summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2015-10-01 02:25:31 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2015-10-01 19:29:05 +0900
commit0a94c69cc391092470c0c209f62752d0a8149e76 (patch)
tree9d30c38f07e977fd9712b7e54e9217e42229be4c /mrbgems/mruby-compiler/core
parentcb76ed8ec43b32b9e389b7904ac9d68fcb771d2b (diff)
downloadmruby-0a94c69cc391092470c0c209f62752d0a8149e76.tar.gz
mruby-0a94c69cc391092470c0c209f62752d0a8149e76.zip
optimize if statement with constant condition
Diffstat (limited to 'mrbgems/mruby-compiler/core')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index f2bbf3497..d9a8e463e 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -1330,6 +1330,17 @@ codegen(codegen_scope *s, node *tree, int val)
int pos1, pos2;
node *e = tree->cdr->cdr->car;
+ switch ((intptr_t)tree->car->car) {
+ case NODE_TRUE:
+ case NODE_INT:
+ case NODE_STR:
+ codegen(s, tree->cdr->car, val);
+ return;
+ case NODE_FALSE:
+ case NODE_NIL:
+ codegen(s, e, val);
+ return;
+ }
codegen(s, tree->car, VAL);
pop();
pos1 = genop_peep(s, MKOP_AsBx(OP_JMPNOT, cursp(), 0), NOVAL);