projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos/lisp: Cache freed cons and stack items
[fw/altos]
/
src
/
lisp
/
ao_lisp_lambda.c
diff --git
a/src/lisp/ao_lisp_lambda.c
b/src/lisp/ao_lisp_lambda.c
index c53a38fd687f99533d4e7075082967ce99e87bde..0dd8c698646703ea5f0a0057de4d7b9faee937d6 100644
(file)
--- a/
src/lisp/ao_lisp_lambda.c
+++ b/
src/lisp/ao_lisp_lambda.c
@@
-47,6
+47,7
@@
const struct ao_lisp_type ao_lisp_lambda_type = {
.size = lambda_size,
.mark = lambda_mark,
.move = lambda_move,
.size = lambda_size,
.mark = lambda_mark,
.move = lambda_move,
+ .name = "lambda",
};
void
};
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_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));
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;
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);
}
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:
break;
}
case AO_LISP_FUNC_LEXPR: