From 8eb0c810b228df1f8352c005a7ae882ad4179b4b Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 21 Nov 2014 16:11:55 +0000 Subject: get rid of inadvertent ID creation * object.c (rb_mod_const_get, rb_mod_const_defined): ditto. * variable.c (rb_const_missing, rb_mod_const_missing): call const_missing without new ID to get rid of inadvertent ID creation. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48533 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/-ext-/symbol/test_inadvertent_creation.rb | 43 ++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 6 deletions(-) (limited to 'test/-ext-/symbol/test_inadvertent_creation.rb') diff --git a/test/-ext-/symbol/test_inadvertent_creation.rb b/test/-ext-/symbol/test_inadvertent_creation.rb index 9c5fa04407..14e6abd7a3 100644 --- a/test/-ext-/symbol/test_inadvertent_creation.rb +++ b/test/-ext-/symbol/test_inadvertent_creation.rb @@ -15,19 +15,31 @@ module Test_Symbol @obj = Object.new end + def assert_not_pinneddown(name, msg = nil) + assert_not_send([Bug::Symbol, :pinneddown?, name], msg) + end + def assert_not_interned(name, msg = nil) assert_not_send([Bug::Symbol, :find, name], msg) end - def assert_not_interned_error(obj, meth, name, msg = nil) - e = assert_raise(NameError, msg) {obj.__send__(meth, name)} - assert_not_interned(name, msg) + def assert_not_interned_error(obj, meth, name, msg = nil, &block) + e = assert_raise(NameError, msg) {obj.__send__(meth, name, &block)} + if Symbol === name + assert_not_pinneddown(name, msg) + else + assert_not_interned(name, msg) + end e end def assert_not_interned_false(obj, meth, name, msg = nil) assert_not_send([obj, meth, name], msg) - assert_not_interned(name, msg) + if Symbol === name + assert_not_pinneddown(name, msg) + else + assert_not_interned(name, msg) + end end Feature5072 = '[ruby-core:38367]' @@ -37,6 +49,8 @@ module Test_Symbol name = noninterned_name("A") assert_not_interned_error(cl, :const_get, name, Feature5072) + + assert_not_interned_error(cl, :const_get, name.to_sym) end def test_module_const_defined? @@ -44,6 +58,9 @@ module Test_Symbol name = noninterned_name("A") assert_not_interned_false(cl, :const_defined?, name, Feature5072) + + name = noninterned_name + assert_not_interned_error(cl, :const_defined?, name.to_sym) end def test_respond_to_missing @@ -115,8 +132,8 @@ module Test_Symbol end s = noninterned_name("A") - # assert_not_interned_error(c, :const_get, s, feature5089) - assert_not_interned_false(c, :autoload?, s, feature5089) + assert_not_interned_error(c, :const_get, s.to_sym, feature5089) + assert_not_interned_false(c, :autoload?, s.to_sym, feature5089) end def test_aliased_method @@ -206,6 +223,8 @@ module Test_Symbol mod = Module.new assert_raise(NameError) {mod.const_set(name, true)} assert_not_interned(name) + assert_raise(NameError) {mod.const_set(name.to_sym, true)} + assert_not_pinneddown(name) end def test_module_cvar_set @@ -213,6 +232,8 @@ module Test_Symbol mod = Module.new assert_raise(NameError) {mod.class_variable_set(name, true)} assert_not_interned(name) + assert_raise(NameError) {mod.class_variable_set(name.to_sym, true)} + assert_not_pinneddown(name) end def test_object_ivar_set @@ -220,6 +241,8 @@ module Test_Symbol obj = Object.new assert_raise(NameError) {obj.instance_variable_set(name, true)} assert_not_interned(name) + assert_raise(NameError) {obj.instance_variable_set(name.to_sym, true)} + assert_not_pinneddown(name) end def test_struct_new @@ -247,6 +270,8 @@ module Test_Symbol mod = Module.new assert_raise(NameError) {mod.module_eval {attr(name)}} assert_not_interned(name) + assert_raise(NameError) {mod.module_eval {attr(name.to_sym)}} + assert_not_pinneddown(name) end def test_invalid_attr_reader @@ -254,6 +279,8 @@ module Test_Symbol mod = Module.new assert_raise(NameError) {mod.module_eval {attr_reader(name)}} assert_not_interned(name) + assert_raise(NameError) {mod.module_eval {attr_reader(name.to_sym)}} + assert_not_pinneddown(name) end def test_invalid_attr_writer @@ -261,6 +288,8 @@ module Test_Symbol mod = Module.new assert_raise(NameError) {mod.module_eval {attr_writer(name)}} assert_not_interned(name) + assert_raise(NameError) {mod.module_eval {attr_writer(name.to_sym)}} + assert_not_pinneddown(name) end def test_invalid_attr_accessor @@ -268,6 +297,8 @@ module Test_Symbol mod = Module.new assert_raise(NameError) {mod.module_eval {attr_accessor(name)}} assert_not_interned(name) + assert_raise(NameError) {mod.module_eval {attr_accessor(name.to_sym)}} + assert_not_pinneddown(name) end def test_gc_attrset -- cgit v1.2.3