summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler
diff options
context:
space:
mode:
authorChristopher Aue <[email protected]>2017-08-22 14:50:40 +0200
committerChristopher Aue <[email protected]>2017-08-23 18:15:08 +0200
commitc040c8d92bc940cd6f7b451c9f8968df5d21c945 (patch)
tree935dac8193276291324570612d4f9887fae407d8 /mrbgems/mruby-compiler
parentc6596cf26a125e9759e01425bea8782ff58dbf4f (diff)
downloadmruby-c040c8d92bc940cd6f7b451c9f8968df5d21c945.tar.gz
mruby-c040c8d92bc940cd6f7b451c9f8968df5d21c945.zip
Tested register windows of OP_SENDs generated by NODE_{RESCUE,HASH,ALIAS}; ref #3783
Diffstat (limited to 'mrbgems/mruby-compiler')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 167ceb3cb..9586ade52 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -1320,7 +1320,8 @@ codegen(codegen_scope *s, node *tree, int val)
if (n4 && n4->car && nint(n4->car->car) == NODE_SPLAT) {
codegen(s, n4->car, VAL);
genop(s, MKOP_AB(OP_MOVE, cursp(), exc));
- push_n(2); pop_n(3);
+ push_n(2); pop_n(2); /* space for one arg and a block */
+ pop();
genop(s, MKOP_ABC(OP_SEND, cursp(), new_msym(s, mrb_intern_lit(s->mrb, "__case_eqq")), 1));
}
else {
@@ -2607,7 +2608,7 @@ codegen(codegen_scope *s, node *tree, int val)
genop(s, MKOP_ABx(OP_LOADSYM, cursp(), b));
push();
genop(s, MKOP_A(OP_LOADNIL, cursp()));
- push();
+ push(); /* space for a block */
pop_n(4);
genop(s, MKOP_ABC(OP_SEND, cursp(), c, 2));
if (val) {