diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-04-01 01:22:16 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-04-01 01:22:16 +0900 |
| commit | e1e888e354abbd7fc3b14302675a5ef6b0dde8af (patch) | |
| tree | 3dae7066494da110c159f39cbbe15c30f502a398 | |
| parent | d098d823de6db6e312c5acc73325eb2b0491fd95 (diff) | |
| download | mruby-e1e888e354abbd7fc3b14302675a5ef6b0dde8af.tar.gz mruby-e1e888e354abbd7fc3b14302675a5ef6b0dde8af.zip | |
fix too much optimization for `||=`
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 7 |
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); |
