From 55d1072441582936d119ed04fd8c532c2760b9d4 Mon Sep 17 00:00:00 2001 From: Teddy Date: Mon, 12 Aug 2013 20:37:38 +0800 Subject: ... --- eval.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'eval.cpp') diff --git a/eval.cpp b/eval.cpp index 2f5921d..e21ae7b 100644 --- a/eval.cpp +++ b/eval.cpp @@ -2,6 +2,7 @@ #include "builtin.h" #include "exc.h" #include "consts.h" +#include "gc.h" #include extern Pair *empty_list; @@ -109,6 +110,7 @@ inline bool make_exec(Pair *ptr) { } inline void push(Pair * &pc, FrameObj ** &top_ptr, Environment *envt) { + gc.attach(pc); // if (pc->car == NULL) // puts("oops"); if (pc->car->is_simple_obj()) // Not an opt invocation @@ -180,6 +182,7 @@ EvalObj *Evaluator::run_expr(Pair *prog) { } else { + gc.attach(args); EvalObj *opt = args->car; if (opt->is_opt_obj()) pc = static_cast(opt)-> @@ -189,6 +192,7 @@ EvalObj *Evaluator::run_expr(Pair *prog) { } } } + gc.expose(prog); // static_cast because the previous while condition return static_cast(*(eval_stack)); } -- cgit v1.2.3