mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Supress class variable overtaken warning when original modules are the same
This issue was exposed by recent commits to better support including refined modules.
This commit is contained in:
parent
8a1f313e2e
commit
0c273b2279
Notes:
git
2019-11-30 03:32:27 +09:00
2 changed files with 24 additions and 1 deletions
|
@ -63,6 +63,29 @@ class TestVariable < Test::Unit::TestCase
|
||||||
assert_equal(1, o.singleton_class.class_variable_get(:@@foo))
|
assert_equal(1, o.singleton_class.class_variable_get(:@@foo))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class IncludeRefinedModuleClassVariableNoWarning
|
||||||
|
module Mod
|
||||||
|
@@_test_include_refined_module_class_variable = true
|
||||||
|
end
|
||||||
|
|
||||||
|
module Mod2
|
||||||
|
refine Mod do
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
include Mod
|
||||||
|
|
||||||
|
def t
|
||||||
|
@@_test_include_refined_module_class_variable
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_include_refined_module_class_variable
|
||||||
|
assert_warning('') do
|
||||||
|
IncludeRefinedModuleClassVariableNoWarning.new.t
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_variable
|
def test_variable
|
||||||
assert_instance_of(Integer, $$)
|
assert_instance_of(Integer, $$)
|
||||||
|
|
||||||
|
|
|
@ -3025,7 +3025,7 @@ cvar_overtaken(VALUE front, VALUE target, ID id)
|
||||||
if (front && target != front) {
|
if (front && target != front) {
|
||||||
st_data_t did = (st_data_t)id;
|
st_data_t did = (st_data_t)id;
|
||||||
|
|
||||||
if (RTEST(ruby_verbose)) {
|
if (RTEST(ruby_verbose) && original_module(front) != original_module(target)) {
|
||||||
rb_warning("class variable % "PRIsVALUE" of %"PRIsVALUE" is overtaken by %"PRIsVALUE"",
|
rb_warning("class variable % "PRIsVALUE" of %"PRIsVALUE" is overtaken by %"PRIsVALUE"",
|
||||||
ID2SYM(id), rb_class_name(original_module(front)),
|
ID2SYM(id), rb_class_name(original_module(front)),
|
||||||
rb_class_name(original_module(target)));
|
rb_class_name(original_module(target)));
|
||||||
|
|
Loading…
Reference in a new issue