diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-03-11 16:32:29 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-03-11 16:32:29 +0900 |
| commit | 000c68da97ec0bfbd93e3969a2eef21081569a72 (patch) | |
| tree | e7233e2db7ca4d0c4a38a3717c20c07f2bcd1ea7 | |
| parent | 4ab70294ea01cbaf6bdbfbea5bbd854f6661cfd8 (diff) | |
| download | mruby-000c68da97ec0bfbd93e3969a2eef21081569a72.tar.gz mruby-000c68da97ec0bfbd93e3969a2eef21081569a72.zip | |
OP_RETRUN to take B as matching exception; ref #3487
| -rw-r--r-- | include/mruby/opcode.h | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/include/mruby/opcode.h b/include/mruby/opcode.h index 9dfa7f75d..3d4544817 100644 --- a/include/mruby/opcode.h +++ b/include/mruby/opcode.h @@ -82,7 +82,7 @@ enum { OP_JMPIF,/* A sBx if R(A) pc+=sBx */ OP_JMPNOT,/* A sBx if !R(A) pc+=sBx */ OP_ONERR,/* sBx rescue_push(pc+sBx) */ - OP_RESCUE,/* A clear(exc); R(A) := exception (ignore when A=0) */ + OP_RESCUE,/* A B R(A) := exc; R(B) := matched (ignore if A/B=0) */ OP_POPERR,/* A A.times{rescue_pop()} */ OP_RAISE,/* A raise(R(A)) */ OP_EPUSH,/* Bx ensure_push(SEQ[Bx]) */ diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index c53abde7f..780a60ea2 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -1294,7 +1294,7 @@ codegen(codegen_scope *s, node *tree, int val) node *n2 = tree->car; int exc = cursp(); - genop(s, MKOP_A(OP_RESCUE, exc)); + genop(s, MKOP_AB(OP_RESCUE, exc, 0)); push(); while (n2) { node *n3 = n2->car; @@ -1788,7 +1788,7 @@ codegen(codegen_scope *s, node *tree, int val) genop(s, MKOP_A(OP_POPERR, 1)); noexc = genop(s, MKOP_Bx(OP_JMP, 0)); dispatch(s, onerr); - genop(s, MKOP_A(OP_RESCUE, exc)); + genop(s, MKOP_AB(OP_RESCUE, exc, 0)); genop(s, MKOP_A(OP_LOADF, exc)); dispatch(s, noexc); loop_pop(s, NOVAL); |
