summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-01-29 02:01:19 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-01-29 02:01:19 +0000
commit5b74e4f09ef4f10e5574a02f26a893569c99c945 (patch)
tree2c6409e383147ec0cf977e3526d9a4bfd28c493a
parent934f537b458778f4786716c95b73fc72bc1ce256 (diff)
* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30718 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog8
-rw-r--r--test/ruby/test_module.rb15
-rw-r--r--vm_insnhelper.c4
3 files changed, 25 insertions, 2 deletions
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 <mame@tsg.ne.jp>
+
+ * 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 <ryand-ruby@zenspider.com>
* 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 {