diff options
Diffstat (limited to 'src/lisp/ao_lisp_eval.c')
-rw-r--r-- | src/lisp/ao_lisp_eval.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/lisp/ao_lisp_eval.c b/src/lisp/ao_lisp_eval.c index 5fa9e0ad..ef521605 100644 --- a/src/lisp/ao_lisp_eval.c +++ b/src/lisp/ao_lisp_eval.c @@ -525,6 +525,7 @@ ao_lisp_eval_while(void) DBGI(".. frame "); DBG_POLY(ao_lisp_frame_poly(ao_lisp_frame_current)); DBG("\n"); DBGI(".. saved frame "); DBG_POLY(ao_lisp_stack->frame); DBG("\n"); + ao_lisp_stack->values = ao_lisp_v; if (!ao_lisp_stack->sexprs) { ao_lisp_v = AO_LISP_NIL; ao_lisp_stack->state = eval_val; @@ -548,6 +549,7 @@ ao_lisp_eval_while_test(void) DBGI(".. saved frame "); DBG_POLY(ao_lisp_stack->frame); DBG("\n"); if (ao_lisp_v) { + ao_lisp_stack->values = ao_lisp_v; ao_lisp_v = ao_lisp_poly_cons(ao_lisp_stack->sexprs)->cdr; ao_lisp_stack->state = eval_while; if (!ao_lisp_stack_push()) @@ -556,7 +558,10 @@ ao_lisp_eval_while_test(void) ao_lisp_stack->sexprs = ao_lisp_v; } else + { ao_lisp_stack->state = eval_val; + ao_lisp_v = ao_lisp_stack->values; + } return 1; } |