diff --git a/src/ops/lispops.c b/src/ops/lispops.c index fc91e9c..074566e 100644 --- a/src/ops/lispops.c +++ b/src/ops/lispops.c @@ -1639,7 +1639,6 @@ struct cons_pointer lisp_let( struct stack_frame *frame, bindings = make_cons( make_cons( symbol, val ), bindings ); - } else { result = throw_exception( c_string_to_lisp_string @@ -1649,6 +1648,8 @@ struct cons_pointer lisp_let( struct stack_frame *frame, } } + debug_print( L"\nlet: bindings complete.\n", DEBUG_BIND); + /* i.e., no exception yet */ for ( int form = 1; !exceptionp( result ) && form < frame->args; form++ ) { result = @@ -1656,10 +1657,11 @@ struct cons_pointer lisp_let( struct stack_frame *frame, bindings ); } - // release the local bindings as they go out of scope! - for (struct cons_pointer cursor = bindings; !eq( cursor, env); cursor = c_cdr(cursor)) { - dec_ref( cursor); - } + /* release the local bindings as they go out of scope! **BUT** + * bindings were consed onto the front of env, so caution... */ + // for (struct cons_pointer cursor = bindings; !eq( cursor, env); cursor = c_cdr(cursor)) { + // dec_ref( cursor); + // } return result; diff --git a/unit-tests/let.sh b/unit-tests/let.sh index ad75185..037a96a 100755 --- a/unit-tests/let.sh +++ b/unit-tests/let.sh @@ -2,28 +2,28 @@ result=0 -# echo -n "$0: let with two bindings, one form in body..." -# expected='11' -# actual=`echo "(let ((a . 5)(b . 6)) (+ a b))" | target/psse 2>/dev/null | tail -1` +echo -n "$0: let with two bindings, one form in body..." +expected='11' +actual=`echo "(let ((a . 5)(b . 6)) (+ a b))" | target/psse 2>/dev/null | tail -1` -# if [ "${expected}" = "${actual}" ] -# then -# echo "OK" -# else -# echo "Fail: expected '$expected', got '$actual'" -# result=`echo "${result} + 1" | bc` -# fi +if [ "${expected}" = "${actual}" ] +then + echo "OK" +else + echo "Fail: expected '$expected', got '$actual'" + result=`echo "${result} + 1" | bc` +fi -# echo -n "$0: let with two bindings, two forms in body..." -# expected='1' -# actual=`echo "(let ((a . 5)(b . 6)) (+ a b) (- b a))" | target/psse 2>/dev/null | tail -1` +echo -n "$0: let with two bindings, two forms in body..." +expected='1' +actual=`echo "(let ((a . 5)(b . 6)) (+ a b) (- b a))" | target/psse 2>/dev/null | tail -1` -# if [ "${expected}" = "${actual}" ] -# then -# echo "OK" -# else -# echo "Fail: expected '$expected', got '$actual'" -# result=`echo "${result} + 1" | bc` -# fi +if [ "${expected}" = "${actual}" ] +then + echo "OK" +else + echo "Fail: expected '$expected', got '$actual'" + result=`echo "${result} + 1" | bc` +fi exit ${result} \ No newline at end of file