let segfault bug "fixed". *But* I suspect there's memory leaking here.

This commit is contained in:
Simon Brooke 2026-02-25 20:13:57 +00:00
parent 3665326c55
commit 90e862cc59
2 changed files with 27 additions and 25 deletions

View file

@ -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;

View file

@ -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}