summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-11-11 17:55:32 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-11-11 17:55:32 +0900
commitc210a8adf9e558e96258de4865bf0c68d9da52f8 (patch)
tree7cafab6e30dc429f8357f3adde4a4398a79b6b8f /src
parent181f980b6cc5dfa25b270e137c6d060a897b8bf4 (diff)
downloadmruby-c210a8adf9e558e96258de4865bf0c68d9da52f8.tar.gz
mruby-c210a8adf9e558e96258de4865bf0c68d9da52f8.zip
Fixed wrong stack extend size; fix #3847
Diffstat (limited to 'src')
-rw-r--r--src/vm.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/vm.c b/src/vm.c
index 38e2a9067..dd68e8a79 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -502,11 +502,11 @@ mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p)
ci->nregs = p->body.irep->nregs;
if (ci->argc < 0) keep = 3;
else keep = ci->argc + 1;
- if (ci->argc < keep) {
+ if (ci->nregs < keep) {
stack_extend(mrb, keep);
}
else {
- stack_extend(mrb, ci->argc);
+ stack_extend(mrb, ci->nregs);
stack_clear(mrb->c->stack+keep, ci->nregs-keep);
}
@@ -1015,7 +1015,9 @@ RETRY_TRY_BLOCK:
CASE(OP_LOADI) {
/* A sBx R(A) := sBx */
- SET_INT_VALUE(regs[GETARG_A(i)], GETARG_sBx(i));
+ int a = GETARG_A(i);
+ mrb_int bx = GETARG_sBx(i);
+ SET_INT_VALUE(regs[a], bx);
NEXT;
}