diff options
| author | Masamitsu MURASE <[email protected]> | 2013-01-19 23:15:20 +0900 |
|---|---|---|
| committer | Masamitsu MURASE <[email protected]> | 2013-01-19 23:16:03 +0900 |
| commit | 0dd9a0fd6a24399852e7dda3f87700bb6f283574 (patch) | |
| tree | 0faf2da72f8911da9d062c84e73d7fda244071d2 /src/vm.c | |
| parent | 583983385b81c21f82704b116eab52d606a609f4 (diff) | |
| download | mruby-0dd9a0fd6a24399852e7dda3f87700bb6f283574.tar.gz mruby-0dd9a0fd6a24399852e7dda3f87700bb6f283574.zip | |
Modify handling of OP_ENTER.
If `argc` is `-1`, `block` parameter is sometimes overwritten.
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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(®s[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(®s[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; |
