summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-04-01 01:22:16 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2016-04-01 01:22:16 +0900
commite1e888e354abbd7fc3b14302675a5ef6b0dde8af (patch)
tree3dae7066494da110c159f39cbbe15c30f502a398
parentd098d823de6db6e312c5acc73325eb2b0491fd95 (diff)
downloadmruby-e1e888e354abbd7fc3b14302675a5ef6b0dde8af.tar.gz
mruby-e1e888e354abbd7fc3b14302675a5ef6b0dde8af.zip
fix too much optimization for `||=`
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index de21f05b5..80443ff63 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -1774,7 +1774,12 @@ codegen(codegen_scope *s, node *tree, int val)
int pos;
pop();
- pos = genop_peep(s, MKOP_AsBx(name[0]=='|'?OP_JMPIF:OP_JMPNOT, cursp(), 0), NOVAL);
+ if (val) {
+ pos = genop(s, MKOP_AsBx(name[0]=='|'?OP_JMPIF:OP_JMPNOT, cursp(), 0));
+ }
+ else {
+ pos = genop_peep(s, MKOP_AsBx(name[0]=='|'?OP_JMPIF:OP_JMPNOT, cursp(), 0), NOVAL);
+ }
codegen(s, tree->cdr->cdr->car, VAL);
pop();
gen_assignment(s, tree->car, cursp(), val);