From 65f17438de5983ca010e10b4b24c5da65756a9b5 Mon Sep 17 00:00:00 2001 From: Teddy Date: Sun, 4 Aug 2013 11:50:41 +0800 Subject: added exception facilities --- eval.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'eval.cpp') diff --git a/eval.cpp b/eval.cpp index e536f8f..dd4be00 100644 --- a/eval.cpp +++ b/eval.cpp @@ -1,5 +1,7 @@ #include "eval.h" #include "builtin.h" +#include "exc.h" +#include "consts.h" #include extern Cons *empty_list; @@ -87,7 +89,14 @@ EvalObj *Evaluator::run_expr(Cons *prog) { top_ptr++; } else - pc = dynamic_cast(args->car)->call(args, envt, cont, top_ptr); + { + 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); + } } } // static_cast because the previous while condition -- cgit v1.2.3