let segfault bug "fixed". *But* I suspect there's memory leaking here.
This commit is contained in:
parent
3665326c55
commit
90e862cc59
2 changed files with 27 additions and 25 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
Loading…
Add table
Add a link
Reference in a new issue