Actions
Bug #16100
closedVisibility modifiers don't call super correctly when overridden in alternative ways
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.7.0dev (2019-08-14) [x86_64-darwin18]
Backport:
Description
It seems that the method visibility modifiers don't call super
correctly when they are overridden in certain ways. I expected the following examples to all behave the same since they are all being defined on the singleton class, but only the first operates correctly presumably because it is explicitly defined on the singleton class. I've reproduced this behavior with 2.7.0
, 2.6.3
, and 2.5.5
.
def test_visibility(description, klass)
puts "Case: #{ description }"
puts " #=> #{ klass.private_instance_methods.include?(:private_method) }"
puts
end
test_visibility('explicit', Class.new {
def self.private(*); super; end
private; def private_method; end
})
test_visibility('opened singleton', Class.new {
class << self
def private(*); super; end
end
private; def private_method; end
})
test_visibility('include/prepend to singleton', Class.new {
module M
def private(*); super; end
end
singleton_class.prepend(M)
private; def private_method; end
})
Case: explicit
#=> true
Case: opened singleton
#=> false
Case: include/prepend to singleton
#=> false
Actions
Like0
Like0Like0Like0