diff options
| author | Yukihiro Matz Matsumoto <[email protected]> | 2013-01-13 01:07:40 +0900 |
|---|---|---|
| committer | Yukihiro Matz Matsumoto <[email protected]> | 2013-01-13 01:07:40 +0900 |
| commit | 9614f134879f58ee3532e3e7dd4d75814fbc73ee (patch) | |
| tree | 6e672a9fec6b5970a2d80f56247f8d4a72e46c26 /src/codegen.c | |
| parent | a180460635f49ca955e2aa3d01642b1d30b049af (diff) | |
| download | mruby-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.c | 16 |
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; |
