summaryrefslogtreecommitdiffhomepage
path: root/src/codegen.c
diff options
context:
space:
mode:
authorYukihiro Matz Matsumoto <[email protected]>2013-01-13 01:07:40 +0900
committerYukihiro Matz Matsumoto <[email protected]>2013-01-13 01:07:40 +0900
commit9614f134879f58ee3532e3e7dd4d75814fbc73ee (patch)
tree6e672a9fec6b5970a2d80f56247f8d4a72e46c26 /src/codegen.c
parenta180460635f49ca955e2aa3d01642b1d30b049af (diff)
downloadmruby-9614f134879f58ee3532e3e7dd4d75814fbc73ee.tar.gz
mruby-9614f134879f58ee3532e3e7dd4d75814fbc73ee.zip
more aggressive code elimination for NODE_DOT{2,3}
Diffstat (limited to 'src/codegen.c')
-rw-r--r--src/codegen.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/codegen.c b/src/codegen.c
index 7f1823ba6..6168c7c0e 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -1264,20 +1264,20 @@ codegen(codegen_scope *s, node *tree, int val)
break;
case NODE_DOT2:
- codegen(s, tree->car, VAL);
- codegen(s, tree->cdr, VAL);
- pop(); pop();
+ codegen(s, tree->car, val);
+ codegen(s, tree->cdr, val);
if (val) {
+ pop(); pop();
genop(s, MKOP_ABC(OP_RANGE, cursp(), cursp(), 0));
push();
}
break;
case NODE_DOT3:
- codegen(s, tree->car, VAL);
- codegen(s, tree->cdr, VAL);
- pop(); pop();
+ codegen(s, tree->car, val);
+ codegen(s, tree->cdr, val);
if (val) {
+ pop(); pop();
genop(s, MKOP_ABC(OP_RANGE, cursp(), cursp(), 1));
push();
}
@@ -1290,7 +1290,7 @@ codegen(codegen_scope *s, node *tree, int val)
codegen(s, tree->car, VAL);
pop();
genop(s, MKOP_ABx(OP_GETMCNST, cursp(), sym));
- push();
+ if (val) push();
}
break;
@@ -1300,7 +1300,7 @@ codegen(codegen_scope *s, node *tree, int val)
genop(s, MKOP_A(OP_OCLASS, cursp()));
genop(s, MKOP_ABx(OP_GETMCNST, cursp(), sym));
- push();
+ if (val) push();
}
break;