vm_eval.c: Symbol#to_proc and instance_exec

* vm_eval.c (yield_under): should evaluate the proc on the first
  argument.  [ruby-core:78839] [Bug #13074]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57194 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2016-12-26 10:00:36 +00:00
Родитель bb7b5a0631
Коммит af2670f1a4
2 изменённых файлов: 8 добавлений и 1 удалений

Просмотреть файл

@ -201,6 +201,12 @@ class TestSymbol < Test::Unit::TestCase
end;
end
def test_to_proc_instance_exec
bug = '[ruby-core:78839] [Bug #13074] should evaluate on the argument'
assert_equal(2, BasicObject.new.instance_exec(1, &:succ), bug)
assert_equal(3, BasicObject.new.instance_exec(1, 2, &:+), bug)
end
def test_call
o = Object.new
def o.foo(x, y); x + y; end

Просмотреть файл

@ -1591,7 +1591,8 @@ yield_under(VALUE under, VALUE self, int argc, const VALUE *argv)
block_handler = vm_proc_to_block_handler(VM_BH_TO_PROC(block_handler));
goto again;
case block_handler_type_symbol:
return rb_sym_proc_call(SYM2ID(VM_BH_TO_SYMBOL(block_handler)), 1, &self, VM_BLOCK_HANDLER_NONE);
return rb_sym_proc_call(SYM2ID(VM_BH_TO_SYMBOL(block_handler)),
argc, argv, VM_BLOCK_HANDLER_NONE);
}
new_captured.self = self;