- ao_lisp_stack->macro = 1;
- DBGI(".. macro %d\n", ao_lisp_stack->macro);
- 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->macro_frame = ao_lisp_stack->frame;
+ /* Evaluate the result once more */
+ prev = ao_lisp_stack;
+ ao_lisp_stack->state = eval_sexpr;
+ if (!ao_lisp_stack_push())
+ return 0;
+
+ /* After the function returns, take that
+ * value and re-evaluate it
+ */
+ ao_lisp_stack->state = eval_sexpr;
+ ao_lisp_stack->sexprs = prev->sexprs;
+ prev->sexprs = AO_LISP_NIL;
+
+ DBGI(".. start macro\n");
+ DBGI(".. sexprs "); DBG_POLY(ao_lisp_stack->sexprs); DBG("\n");
+ DBGI(".. values "); DBG_POLY(ao_lisp_stack->values); DBG("\n");
+ DBG_FRAMES();
+