diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | proc.c | 1 | ||||
-rw-r--r-- | test/ruby/test_proc.rb | 7 |
3 files changed, 13 insertions, 0 deletions
@@ -1,3 +1,8 @@ +Mon Nov 17 06:13:06 2014 Nobuyoshi Nakada <[email protected]> + + * proc.c (proc_binding): use the original iseq on a binding from + proc from method object to get the location. + Sun Nov 16 19:38:10 2014 Nobuyoshi Nakada <[email protected]> * vm_eval.c (rb_current_receiver): new function to return the @@ -2452,6 +2452,7 @@ proc_binding(VALUE self) if (!IS_METHOD_PROC_NODE((NODE *)iseq)) { rb_raise(rb_eArgError, "Can't create Binding from C level Proc"); } + iseq = rb_method_get_iseq(RNODE(iseq)->u2.value); } bindval = rb_binding_alloc(rb_cBinding); diff --git a/test/ruby/test_proc.rb b/test/ruby/test_proc.rb index f760cce3ee..728e2b7987 100644 --- a/test/ruby/test_proc.rb +++ b/test/ruby/test_proc.rb @@ -205,6 +205,13 @@ class TestProc < Test::Unit::TestCase assert_instance_of(Binding, b, '[ruby-core:25589]') bug10432 = '[ruby-core:65919] [Bug #10432]' assert_same(self, b.receiver, bug10432) + assert_not_send [b, :local_variable_defined?, :value] + assert_raise(NameError) { + b.local_variable_get(:value) + } + assert_equal 42, b.local_variable_set(:value, 42) + assert_send [b, :local_variable_defined?, :value] + assert_equal 42, b.local_variable_get(:value) end def test_block_given_method |