Commit f53d5ee7 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #751 from masamitsu-murase/modify_block_copy_of_op_enter

Modify handling of OP_ENTER.
parents 58398338 8f8d9fd4
...@@ -1121,6 +1121,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) ...@@ -1121,6 +1121,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
} }
else { else {
if (argv0 != argv) { if (argv0 != argv) {
regs[len+1] = *blk; /* move block */
memmove(&regs[1], argv, sizeof(mrb_value)*(m1+o)); /* m1 + o */ memmove(&regs[1], argv, sizeof(mrb_value)*(m1+o)); /* m1 + o */
} }
if (r) { /* r */ if (r) { /* r */
...@@ -1129,7 +1130,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) ...@@ -1129,7 +1130,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
if (m2) { if (m2) {
memmove(&regs[m1+o+r+1], &argv[argc-m2], sizeof(mrb_value)*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; pc += o + 1;
} }
JUMP; JUMP;
......
...@@ -332,6 +332,14 @@ assert('BS Block [ruby-dev:31160]') do ...@@ -332,6 +332,14 @@ assert('BS Block [ruby-dev:31160]') do
m {|(v,(*))|} == nil m {|(v,(*))|} == nil
end end
assert('BS Block [issue #750]') do
def m(a, *b)
yield
end
args = [1, 2, 3]
m(*args){ 1 } == 1
end
assert('BS Block 31') do assert('BS Block 31') do
def m() def m()
yield yield
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment