summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-08-24 14:38:03 +0900
committerGitHub <[email protected]>2017-08-24 14:38:03 +0900
commit63f10a1ee59743c086afc339f25da4f6e100e765 (patch)
tree7694adf91bfc6ca0ebc26be50b3935d6c3deb3fc /src
parent4c9a60487799b923ff905def46cb2497bcc1e4dd (diff)
parent3366894a4084c9f44a38410daf6abad9e2da5b33 (diff)
downloadmruby-63f10a1ee59743c086afc339f25da4f6e100e765.tar.gz
mruby-63f10a1ee59743c086afc339f25da4f6e100e765.zip
Merge pull request #3788 from christopheraue/fix_codegen_op_send_nregs
Fixed register windows of OP_SENDs generated during codegen
Diffstat (limited to 'src')
-rw-r--r--src/vm.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index 715c3db6b..ba320d962 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1333,10 +1333,12 @@ RETRY_TRY_BLOCK:
int bidx = (argc < 0) ? a+2 : a+n+1;
struct RProc *m;
struct RClass *c;
- mrb_callinfo *ci;
+ mrb_callinfo *ci = mrb->c->ci;
mrb_value recv, blk;
mrb_sym mid = syms[GETARG_B(i)];
+ mrb_assert(bidx < ci->nregs);
+
recv = regs[a];
if (GET_OPCODE(i) != OP_SENDB) {
SET_NIL_VALUE(regs[bidx]);
@@ -1523,6 +1525,8 @@ RETRY_TRY_BLOCK:
mrb_value recv, blk;
mrb_sym mid = ci->mid;
+ mrb_assert(bidx < ci->nregs);
+
if (mid == 0 || !ci->target_class) {
mrb_value exc = mrb_exc_new_str_lit(mrb, E_NOMETHOD_ERROR, "super called outside of method");
mrb_exc_set(mrb, exc);