Modify handling of OP_ENTER.

If `argc` is `-1`, `block` parameter is sometimes overwritten.
This commit is contained in:
Masamitsu MURASE
2013-01-19 23:15:20 +09:00
parent 583983385b
commit 0dd9a0fd6a
+4 -1
View File
@@ -1121,6 +1121,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
}
else {
if (argv0 != argv) {
regs[len+1] = *blk; /* move block */
memmove(&regs[1], argv, sizeof(mrb_value)*(m1+o)); /* m1 + o */
}
if (r) { /* r */
@@ -1129,7 +1130,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
if (m2) {
memmove(&regs[m1+o+r+1], &argv[argc-m2], sizeof(mrb_value)*m2);
}
regs[len+1] = *blk; /* move block */
if (argv0 == argv) {
regs[len+1] = *blk; /* move block */
}
pc += o + 1;
}
JUMP;