aboutsummaryrefslogtreecommitdiff
path: root/eval.cpp
diff options
context:
space:
mode:
authorTeddy <ted.sybil@gmail.com>2013-08-04 23:35:59 +0800
committerTeddy <ted.sybil@gmail.com>2013-08-04 23:35:59 +0800
commit645549b8a42844fc5a8042a4808c8ebf5050d7da (patch)
tree6f96ef92e16f332a6eb3860450404903865a12fe /eval.cpp
parentacb298c7f864f9862859320555b416c97632d2fa (diff)
added support for `cons`, `car`, `cdr`
Diffstat (limited to 'eval.cpp')
-rw-r--r--eval.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/eval.cpp b/eval.cpp
index efd1114..de06209 100644
--- a/eval.cpp
+++ b/eval.cpp
@@ -21,6 +21,9 @@ void Evaluator::add_builtin_routines() {
ADD_ENTRY("<", new BuiltinProcObj(builtin_lt, "<"));
ADD_ENTRY("=", new BuiltinProcObj(builtin_arithmetic_eq, "="));
ADD_ENTRY("display", new BuiltinProcObj(builtin_display, "display"));
+ ADD_ENTRY("cons", new BuiltinProcObj(builtin_cons, "cons"));
+ ADD_ENTRY("car", new BuiltinProcObj(builtin_car, "car"));
+ ADD_ENTRY("cdr", new BuiltinProcObj(builtin_cdr, "cdr"));
ADD_ENTRY("if", new SpecialOptIf());
ADD_ENTRY("lambda", new SpecialOptLambda());
ADD_ENTRY("define", new SpecialOptDefine());
@@ -79,7 +82,7 @@ EvalObj *Evaluator::run_expr(Cons *prog) {
RetAddr *ret_addr = static_cast<RetAddr*>(*top_ptr);
if (!ret_addr->addr)
{
- Cons *nexp = cont->proc_body->cdr;
+ Cons *nexp = TO_CONS(cont->proc_body->cdr);
cont->proc_body = nexp;
if (nexp == empty_list)
{