From d42c4bd97982c1252c5ad638a11aea5319c4be7f Mon Sep 17 00:00:00 2001 From: Teddy Date: Sun, 4 Aug 2013 10:15:13 +0800 Subject: replaced many `dynamic_cast` to `static_cast` --- eval.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'eval.cpp') diff --git a/eval.cpp b/eval.cpp index 44569c1..e536f8f 100644 --- a/eval.cpp +++ b/eval.cpp @@ -34,14 +34,16 @@ void push(Cons * &pc, FrameObj ** &top_ptr, Environment *envt) { if (pc->car->is_simple_obj()) // Not an opt invocation { *top_ptr = envt->get_obj(pc->car); // Objectify the symbol - dynamic_cast(*top_ptr)->prepare(pc); + // static_cast because of is_simple_obj() is true + static_cast(*top_ptr)->prepare(pc); top_ptr++; pc = pc->next; // Move to the next instruction } else // Operational Invocation { *top_ptr++ = new RetAddr(pc); // Push the return address - pc = dynamic_cast(pc->car); // Go deeper to enter the call + // static_cast because of is_simple_obj() is false + pc = static_cast(pc->car); // Go deeper to enter the call } } @@ -67,8 +69,9 @@ EvalObj *Evaluator::run_expr(Cons *prog) { { Cons *args = empty_list; while (!(*(--top_ptr))->is_ret_addr()) - args = new Cons(dynamic_cast(*top_ptr), args); - RetAddr *ret_addr = dynamic_cast(*top_ptr); + args = new Cons(static_cast(*top_ptr), args); + //< static_cast because the while condition + RetAddr *ret_addr = static_cast(*top_ptr); if (!ret_addr->addr) { Cons *nexp = cont->proc_body->cdr; @@ -87,5 +90,6 @@ EvalObj *Evaluator::run_expr(Cons *prog) { pc = dynamic_cast(args->car)->call(args, envt, cont, top_ptr); } } - return dynamic_cast(*(eval_stack)); + // static_cast because the previous while condition + return static_cast(*(eval_stack)); } -- cgit v1.2.3