From: naruse@... Date: 2021-02-01T10:17:55+00:00 Subject: [ruby-core:102351] [Ruby master Bug#17509] Custom respond_to? methods in modules break defined?(super) Issue #17509 has been updated by naruse (Yui NARUSE). Backport changed from 2.5: DONTNEED, 2.6: DONTNEED, 2.7: DONTNEED, 3.0: REQUIRED to 2.5: DONTNEED, 2.6: DONTNEED, 2.7: DONTNEED, 3.0: DONE ruby_3_0 147453ad1e85bc94506c269e363e736675946908 merged revision(s) 85b5d4c8bf4cdcba4f1af65f2bc0c8ac716cb795. ---------------------------------------- Bug #17509: Custom respond_to? methods in modules break defined?(super) https://bugs.ruby-lang.org/issues/17509#change-90211 * Author: benediktdeicke (Benedikt Deicke) * Status: Closed * Priority: Normal * ruby -v: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin19] * Backport: 2.5: DONTNEED, 2.6: DONTNEED, 2.7: DONTNEED, 3.0: DONE ---------------------------------------- When using `defined?(super)` to check that a superclass method exists before calling `super`, including modules with a custom `respond_to?` method seems to break the check so it wrongfully returns a truthy value, even though the superclass method doesn't exist. This only happens on Ruby 3.0.0 and works fine on previous Ruby versions. This is possibly related to this change: https://github.com/ruby/ruby/pull/3777 ### Example ```ruby module SomeModule def a_method defined?(super) ? super : :no_super_method end end module RespondModule def respond_to?(*) super end end class PlainClass include SomeModule end class ModuleClass include RespondModule include SomeModule end puts "PlainClass: #{PlainClass.new.a_method}" puts "ModuleClass: #{ModuleClass.new.a_method}" ``` ### Actual Result on Ruby 3.0.0p0 ``` PlainClass: no_super_method test.rb:3:in `a_method': super: no superclass method `a_method' for # (NoMethodError) Did you mean? method from test.rb:24:in `
' ``` ### Expected Result (like on older versions) ``` PlainClass: no_super_method ModuleClass: no_super_method ``` Thanks to Rafael Fran�a for helping me unravel this. ---Files-------------------------------- test.rb (359 Bytes) -- https://bugs.ruby-lang.org/ Unsubscribe: