aboutsummaryrefslogtreecommitdiff
path: root/eval.cpp
diff options
context:
space:
mode:
authorTeddy <ted.sybil@gmail.com>2013-08-14 17:29:41 +0800
committerTeddy <ted.sybil@gmail.com>2013-08-14 17:29:41 +0800
commit3bf02a37cdd49d4d12c8fdf3a4a421d5dae3a75b (patch)
tree5dbfdcb5ca98768f193d529c88cd5ac1812006d8 /eval.cpp
parentbe368fbac6b8d80033ccb8e4138b55c4b0954c34 (diff)
big change in framework: unification of user-def proc and others
Diffstat (limited to 'eval.cpp')
-rw-r--r--eval.cpp39
1 files changed, 7 insertions, 32 deletions
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<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);