mirror of
https://github.com/ruby/ruby.git
synced 2025-09-23 20:44:00 +02:00
Don't accidentally name anonymous module/class
b00f280d4b
introduced
an accidental behavior change in that defining a module/class under
`m` gives `m` a name when `m` is anonymous.
`ruby -ve 'Module.new { class self::A; end; p name }'` outputs a name
similar to `Module#inspect` when it should output `nil` like in Ruby
2.6.x.
* variable.c: Use `make_temporary_path` instead of `save_temporary_path`
when getting the name of the parent module.
* variable.c (rb_set_class_path): Delegate to `rb_set_class_path_string`
instead of duplicating the logic.
[Bug #16097]
This commit is contained in:
parent
1cffd5b4f0
commit
c8f97596b7
Notes:
git
2019-08-31 04:40:14 +09:00
2 changed files with 21 additions and 23 deletions
|
@ -565,6 +565,24 @@ class TestModule < Test::Unit::TestCase
|
|||
assert_equal("TestModule::User", User.name)
|
||||
end
|
||||
|
||||
def test_accidental_singleton_naming_with_module
|
||||
o = Object.new
|
||||
assert_nil(o.singleton_class.name)
|
||||
class << o
|
||||
module Hi; end
|
||||
end
|
||||
assert_nil(o.singleton_class.name)
|
||||
end
|
||||
|
||||
def test_accidental_singleton_naming_with_class
|
||||
o = Object.new
|
||||
assert_nil(o.singleton_class.name)
|
||||
class << o
|
||||
class Hi; end
|
||||
end
|
||||
assert_nil(o.singleton_class.name)
|
||||
end
|
||||
|
||||
def test_classpath
|
||||
m = Module.new
|
||||
n = Module.new
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue