From 3bf02a37cdd49d4d12c8fdf3a4a421d5dae3a75b Mon Sep 17 00:00:00 2001 From: Teddy Date: Wed, 14 Aug 2013 17:29:41 +0800 Subject: big change in framework: unification of user-def proc and others --- eval.cpp | 39 +++++++-------------------------------- 1 file changed, 7 insertions(+), 32 deletions(-) (limited to 'eval.cpp') diff --git a/eval.cpp b/eval.cpp index 5d50335..0157f14 100644 --- a/eval.cpp +++ b/eval.cpp @@ -175,40 +175,15 @@ EvalObj *Evaluator::run_expr(Pair *prog) { args = new Pair(obj, args); } //< static_cast because the while condition - RetAddr *ret_addr = static_cast(*top_ptr); +// RetAddr *ret_addr = static_cast(*top_ptr); gc.attach(args); - if (!ret_addr->addr) - { - Pair *nexp = TO_PAIR(cont->proc_body->cdr); - cont->proc_body = nexp; - if (nexp == empty_list) - { - *top_ptr = gc.attach(args->car); - - gc.expose(envt); - envt = cont->envt; - gc.attach(envt); - - pc = cont->pc->next; - - gc.expose(cont); - cont = cont->prev_cont; - gc.attach(cont); - } - else pc = nexp; - gc.expose(args); - top_ptr++; - } + EvalObj *opt = args->car; + if (opt->is_opt_obj()) + pc = static_cast(opt)-> + call(args, envt, cont, top_ptr); else - { - EvalObj *opt = args->car; - if (opt->is_opt_obj()) - pc = static_cast(opt)-> - call(args, envt, cont, top_ptr); - else - throw TokenError(opt->ext_repr(), SYN_ERR_CAN_NOT_APPLY); - gc.collect(); - } + throw TokenError(opt->ext_repr(), SYN_ERR_CAN_NOT_APPLY); + gc.collect(); } } gc.expose(prog); -- cgit v1.2.3