diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-02-08 21:13:22 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-02-08 21:13:22 +0900 |
| commit | af4d74fc7df9788a1c0013a4dc66e9bbac951b20 (patch) | |
| tree | 74d979f399fd69182c60946ff19d1e225a3744e9 | |
| parent | 76135e757f96ad640e3c44b4d46f73e512fbfc50 (diff) | |
| download | mruby-af4d74fc7df9788a1c0013a4dc66e9bbac951b20.tar.gz mruby-af4d74fc7df9788a1c0013a4dc66e9bbac951b20.zip | |
Add MRB_TT_PROC check to OP_SUPER as well; fix #3432
| -rw-r--r-- | src/vm.c | 21 |
1 files changed, 16 insertions, 5 deletions
@@ -1366,11 +1366,22 @@ RETRY_TRY_BLOCK: ci->mid = mid; ci->proc = m; ci->stackent = mrb->c->stack; - if (n == CALL_MAXARGS) { - ci->argc = -1; - } - else { - ci->argc = n; + { + int bidx; + mrb_value blk; + + if (n == CALL_MAXARGS) { + ci->argc = -1; + bidx = a+2; + } + else { + ci->argc = n; + bidx = a+n+1; + } + blk = regs[bidx]; + if (!mrb_nil_p(blk) && mrb_type(blk) != MRB_TT_PROC) { + regs[bidx] = mrb_convert_type(mrb, blk, MRB_TT_PROC, "Proc", "to_proc"); + } } ci->target_class = c; ci->pc = pc + 1; |
