diff --git a/ChangeLog b/ChangeLog index 8a6718e9ac..2b5c2d27b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Sat Jan 29 10:53:16 2011 Yusuke Endoh + + * vm_insnhelper.c (vm_get_ev_const): no-scope reference to toplevel + private constant has been prohibited incorrectly. + + * test/ruby/test_module.rb (test_toplevel_private_constant): add a + test for above. + Sat Jan 29 08:43:23 2011 Ryan Davis * lib/rubygems*: Import rubygems 1.5.0 (release candidate @ 09893d9) diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb index c7acac05f9..ce6e8a66bb 100644 --- a/test/ruby/test_module.rb +++ b/test/ruby/test_module.rb @@ -985,4 +985,19 @@ class TestModule < Test::Unit::TestCase def test_constants_with_private_constant assert(!(::TestModule).constants.include?(:PrivateClass)) end + + def test_toplevel_private_constant + src = <<-INPUT + class Object + private_constant :Object + end + p Object + begin + p ::Object + rescue + p :ok + end + INPUT + assert_in_out_err([], src, %w(Object :ok), []) + end end diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 94d6a87920..8cd066f532 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1199,10 +1199,10 @@ vm_get_ev_const(rb_thread_t *th, const rb_iseq_t *iseq, } if (is_defined) { - return rb_public_const_defined(klass, id); + return rb_const_defined(klass, id); } else { - return rb_public_const_get(klass, id); + return rb_const_get(klass, id); } } else {