From 8f5cb9983896e4c17fed7952b5db90484068af20 Mon Sep 17 00:00:00 2001 From: Bernd Jendrissek Date: Sun, 17 Feb 2008 23:51:42 +0000 Subject: [PATCH] Let go of objects as soon as they have evaluated. --- lisp/lisp.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lisp/lisp.c b/lisp/lisp.c index fbef427..82be3d9 100644 --- a/lisp/lisp.c +++ b/lisp/lisp.c @@ -866,16 +866,17 @@ int main() form = lisp_cons(constant_nil, constant_nil); formsize = parse_forms(buf, bufused, &get_pair(form)->cdr); - gc_protect(lisp_cdr(form)); - gc_unprotect(form); + i = form; form = lisp_cdr(form); + gc_protect(form); + gc_unprotect(i); if (formsize != bufused) { printf("this stuff left over: \"%.*s\"\n", bufused - formsize, buf + formsize); } - for (i = form; get_pair(i) != get_pair(constant_nil); i = lisp_cdr(i)) { + for (i = form; get_pair(i) != get_pair(constant_nil); i = form) { union value_pointer rest; rest = lisp_cons(lisp_car(i), constant_nil); @@ -885,9 +886,11 @@ int main() pretty_print(builtin_eval(top_env, rest)); printf("\n"); - gc_protect(i); - gc_collect(top_env); + form = lisp_cdr(i); + gc_protect(form); gc_unprotect(i); + + gc_collect(top_env); } environment_free(top_env); -- 2.11.4.GIT