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