aboutsummaryrefslogtreecommitdiff
path: root/builtin.cpp
diff options
context:
space:
mode:
authorTeddy <ted.sybil@gmail.com>2013-08-04 10:15:13 +0800
committerTeddy <ted.sybil@gmail.com>2013-08-04 10:15:13 +0800
commitd42c4bd97982c1252c5ad638a11aea5319c4be7f (patch)
tree86c529858dfa0c19619b772386a7c592683cd6fe /builtin.cpp
parent9c1af3a6e77d7a0e1dc66aa9166d0ead6a56d963 (diff)
replaced many `dynamic_cast` to `static_cast`
Diffstat (limited to 'builtin.cpp')
-rw-r--r--builtin.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/builtin.cpp b/builtin.cpp
index 75f470e..1ac0cf2 100644
--- a/builtin.cpp
+++ b/builtin.cpp
@@ -53,7 +53,8 @@ void SpecialOptIf::prepare(Cons *pc) {
void SpecialOptIf::pre_call(ArgList *args, Cons *pc,
Environment *envt) {
- pc = dynamic_cast<Cons*>(pc->car);
+ // static_cast because it's a call invocation
+ pc = static_cast<Cons*>(pc->car);
// Condition evaluated and the decision is made
state = 1;
if (args->cdr->car->is_true())
@@ -82,7 +83,7 @@ EvalObj *SpecialOptIf::post_call(ArgList *args, Cons *pc,
Cons *SpecialOptIf::call(ArgList *args, Environment * &envt,
Continuation * &cont, FrameObj ** &top_ptr) {
- Cons *ret_addr = dynamic_cast<RetAddr*>(*top_ptr)->addr;
+ Cons *ret_addr = static_cast<RetAddr*>(*top_ptr)->addr;
if (state)
{
*top_ptr++ = post_call(args, ret_addr, envt);
@@ -93,7 +94,8 @@ Cons *SpecialOptIf::call(ArgList *args, Environment * &envt,
pre_call(args, ret_addr, envt);
top_ptr += 2;
// Undo pop and invoke again
- return dynamic_cast<Cons*>(ret_addr->car)->next;
+ // static_cast because it's a call invocation
+ return static_cast<Cons*>(ret_addr->car)->next;
}
}
@@ -116,8 +118,8 @@ void SpecialOptLambda::prepare(Cons *pc) {
Cons *SpecialOptLambda::call(ArgList *args, Environment * &envt,
Continuation * &cont, FrameObj ** &top_ptr) {
- Cons *ret_addr = dynamic_cast<RetAddr*>(*top_ptr)->addr;
- Cons *pc = dynamic_cast<Cons*>(ret_addr->car);
+ Cons *ret_addr = static_cast<RetAddr*>(*top_ptr)->addr;
+ Cons *pc = static_cast<Cons*>(ret_addr->car);
SymbolList *para_list = dynamic_cast<SymbolList*>(pc->cdr->car); // parameter list
// Clear the flag to avoid side-effects (e.g. proc calling)
FILL_MARKS(pc, false);
@@ -150,8 +152,8 @@ void SpecialOptDefine::prepare(Cons *pc) {
Cons *SpecialOptDefine::call(ArgList *args, Environment * &envt,
Continuation * &cont, FrameObj ** &top_ptr) {
- Cons *ret_addr = dynamic_cast<RetAddr*>(*top_ptr)->addr;
- Cons *pc = dynamic_cast<Cons*>(ret_addr->car);
+ Cons *ret_addr = static_cast<RetAddr*>(*top_ptr)->addr;
+ Cons *pc = static_cast<Cons*>(ret_addr->car);
EvalObj *obj;
SymObj *id;
// TODO: check identifier
@@ -162,7 +164,8 @@ Cons *SpecialOptDefine::call(ArgList *args, Environment * &envt,
}
else
{
- Cons *plst = dynamic_cast<Cons*>(pc->cdr->car);
+ // static_cast because of is_simple_obj() is false
+ Cons *plst = static_cast<Cons*>(pc->cdr->car);
id = dynamic_cast<SymObj*>(plst->car);
ArgList *para_list = plst->cdr;
// Clear the flag to avoid side-effects (e.g. proc calling)
@@ -192,8 +195,8 @@ void SpecialOptSet::prepare(Cons *pc) {
Cons *SpecialOptSet::call(ArgList *args, Environment * &envt,
Continuation * &cont, FrameObj ** &top_ptr) {
- Cons *ret_addr = dynamic_cast<RetAddr*>(*top_ptr)->addr;
- Cons *pc = dynamic_cast<Cons*>(ret_addr->car);
+ Cons *ret_addr = static_cast<RetAddr*>(*top_ptr)->addr;
+ Cons *pc = static_cast<Cons*>(ret_addr->car);
SymObj *id = dynamic_cast<SymObj*>(pc->cdr->car);
bool flag = envt->add_binding(id, args->cdr->car, false);
// TODO: throw an exc "unbound variable"