diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-08-24 14:38:03 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-08-24 14:38:03 +0900 |
| commit | 63f10a1ee59743c086afc339f25da4f6e100e765 (patch) | |
| tree | 7694adf91bfc6ca0ebc26be50b3935d6c3deb3fc /src | |
| parent | 4c9a60487799b923ff905def46cb2497bcc1e4dd (diff) | |
| parent | 3366894a4084c9f44a38410daf6abad9e2da5b33 (diff) | |
| download | mruby-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.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -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); |
