From 9614f134879f58ee3532e3e7dd4d75814fbc73ee Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Sun, 13 Jan 2013 01:07:40 +0900 Subject: more aggressive code elimination for NODE_DOT{2,3} --- src/codegen.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/codegen.c') 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; -- cgit v1.2.3