projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos/lisp: have 'while' return the last body value
[fw/altos]
/
src
/
lisp
/
ao_lisp_eval.c
diff --git
a/src/lisp/ao_lisp_eval.c
b/src/lisp/ao_lisp_eval.c
index 5fa9e0ad47a25ebbde49557b315ae41fd4e6ff1b..ef521605764fd1d1a013079149d826963ef4d763 100644
(file)
--- 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");
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;
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) {
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())
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->sexprs = ao_lisp_v;
}
else
+ {
ao_lisp_stack->state = eval_val;
ao_lisp_stack->state = eval_val;
+ ao_lisp_v = ao_lisp_stack->values;
+ }
return 1;
}
return 1;
}