From d6765d8d42bd543b414d6ae54392247dd26da649 Mon Sep 17 00:00:00 2001 From: Teddy Date: Tue, 13 Aug 2013 10:25:53 +0800 Subject: a little improvement (but it can't resolve the circular referencing problem) --- eval.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'eval.cpp') diff --git a/eval.cpp b/eval.cpp index 5112232..73c2120 100644 --- a/eval.cpp +++ b/eval.cpp @@ -149,6 +149,9 @@ EvalObj *Evaluator::run_expr(Pair *prog) { FrameObj **top_ptr = eval_stack; Pair *pc = prog; Continuation *cont = NULL; +#ifdef GC_DEBUG + fprintf(stderr, "Start the evaluation...\n"); +#endif // envt is this->envt push(pc, top_ptr, envt); gc.attach(prog); @@ -170,6 +173,7 @@ EvalObj *Evaluator::run_expr(Pair *prog) { } //< static_cast because the while condition RetAddr *ret_addr = static_cast(*top_ptr); + gc.attach(args); if (!ret_addr->addr) { Pair *nexp = TO_PAIR(cont->proc_body->cdr); @@ -189,11 +193,11 @@ EvalObj *Evaluator::run_expr(Pair *prog) { gc.attach(cont); } else pc = nexp; + gc.expose(args); top_ptr++; } else { - gc.attach(args); EvalObj *opt = args->car; if (opt->is_opt_obj()) pc = static_cast(opt)-> -- cgit v1.2.3