diff options
author | Teddy <ted.sybil@gmail.com> | 2013-08-14 17:29:41 +0800 |
---|---|---|
committer | Teddy <ted.sybil@gmail.com> | 2013-08-14 17:29:41 +0800 |
commit | 3bf02a37cdd49d4d12c8fdf3a4a421d5dae3a75b (patch) | |
tree | 5dbfdcb5ca98768f193d529c88cd5ac1812006d8 /eval.cpp | |
parent | be368fbac6b8d80033ccb8e4138b55c4b0954c34 (diff) |
big change in framework: unification of user-def proc and others
Diffstat (limited to 'eval.cpp')
-rw-r--r-- | eval.cpp | 39 |
1 files changed, 7 insertions, 32 deletions
@@ -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<RetAddr*>(*top_ptr); +// RetAddr *ret_addr = static_cast<RetAddr*>(*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<OptObj*>(opt)-> + call(args, envt, cont, top_ptr); else - { - EvalObj *opt = args->car; - if (opt->is_opt_obj()) - pc = static_cast<OptObj*>(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); |