super_method fails on some UnboundMethods
super_method fails to go up the ancestry chain for methods that are only defined in included modules:
module A def foo end end module B def foo end end class C include A include B end class D def foo end include A include B end C.instance_method(:foo) # => #<UnboundMethod: C(B)#foo> (ok) C.instance_method(:foo).super_method # => nil (wrong, should be <UnboundMethod: <something>(A)#foo>) C.new.method(:foo).super_method # => #<Method: Object(A)#foo> (ok) D.instance_method(:foo).super_method # => #<UnboundMethod: Object(B)#foo> (ok) D.instance_method(:foo).super_method.super_method # => #<UnboundMethod: Object(A)#foo> (ok)
Note that the results for C and D's super_method differ slightly, with one outputing "C(B)" and the other "Object(B)". I don't understand why "Object" shows anywhere in my example. I would have expected the output to be "D(B)" in the later case. Should I open a different issue for this?
Updated by nobu (Nobuyoshi Nakada) over 2 years ago
- Status changed from Open to Closed
Updated by nagachika (Tomoyuki Chikanaga) about 2 years ago
- Backport changed from 2.3: UNKNOWN, 2.4: UNKNOWN to 2.3: REQUIRED, 2.4: REQUIRED
I have noticed this ticket during searching changesets related with r62115.
I think r60127 should be backported, but you should backport r62115 too. See #14421.