altos/lisp: Cache freed cons and stack items
[fw/altos] / src / lisp / ao_lisp_lambda.c
index c53a38fd687f99533d4e7075082967ce99e87bde..0dd8c698646703ea5f0a0057de4d7b9faee937d6 100644 (file)
@@ -47,6 +47,7 @@ const struct ao_lisp_type ao_lisp_lambda_type = {
        .size = lambda_size,
        .mark = lambda_mark,
        .move = lambda_move,
+       .name = "lambda",
 };
 
 void
@@ -68,7 +69,9 @@ ao_lisp_lambda_print(ao_poly poly)
 ao_poly
 ao_lisp_lambda_alloc(struct ao_lisp_cons *code, int args)
 {
+       ao_lisp_cons_stash(0, code);
        struct ao_lisp_lambda   *lambda = ao_lisp_alloc(sizeof (struct ao_lisp_lambda));
+       code = ao_lisp_cons_fetch(0);
        struct ao_lisp_cons     *arg;
        int                     f;
 
@@ -165,6 +168,7 @@ ao_lisp_lambda_eval(void)
                        args = ao_lisp_poly_cons(args->cdr);
                        vals = ao_lisp_poly_cons(vals->cdr);
                }
+               ao_lisp_cons_free(cons);
                break;
        }
        case AO_LISP_FUNC_LEXPR: