Project

General

Profile

Backport #8367

regression in defined?(super) starting with 2.0.0-p0

Added by indirect (André Arko) about 7 years ago. Updated about 7 years ago.

Status:
Closed
Priority:
Normal
[ruby-core:54769]

Description

=begin
Hello,

I have discovered a regression in the behaviour of (({defined?(super)})). It functions as expected in 1.9.3-p392, but has changed in 2.0.0-p0 and in 2.1.0dev (2013-05-03 trunk 40571).

On Ruby 1.9.3, the call returns the string (({"super"})). On 2.0.0-p0 and above, the call returns (({nil})). The change seems to be specific to the inside of a block in a method that is defined in a module that is extended onto the object where the method is called.

This is a minimal reproduction example, which I have also attached as "super-gone.rb".

class C
def x; end
end

module M
def b; yield; end

def x
b do
# On 1.9.3, this is "super", but on 2.0.0 it is nil
p defined?(super)
end
end
end

c = C.new
c.extend M
c.x

Thank you.
=end


Files

super-gone.rb (491 Bytes) super-gone.rb indirect (André Arko), 05/04/2013 10:20 AM

Related issues

Related to Ruby master - Bug #6644: Weird behavior of defined?(super) check invoked from a metaprogrammatically defined class methodClosed06/25/2012Actions

Also available in: Atom PDF