Issue #6644 has been reported by alexisowl (Alexey Smolianinov).

----------------------------------------
Bug #6644: Weird behavior of defined?(super) check invoked from a metaprogrammatically defined class method
https://bugs.ruby-lang.org/issues/6644

Author: alexisowl (Alexey Smolianinov)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 1.9.3
ruby -v: ruby 1.9.3p0 (2011-10-30 revision 33570) [i686-linux]


=begin
Lately I came across some weird behavior with the (({defined?})) operator used to check if (({super})) keyword can be invoked in current context. Usually it works fine, but when I tried to combine the (({defined? super})) check with a tiny bit of metaprogramming, it gave me unexpected results.

Here's an example:

  class A; 
    def self.def_f!; 
      singleton_class.send(:define_method, :f) { defined? super }
    end
  end
  class AA < A; end

  A.def_f!

  A.f  # => nil
  AA.f # => nil

  AA.def_f!

  AA.f # => "super"
  A.f  # => "super" - WHY???

The last result is really strange, isn't it? 

A.f has no super method, so I would expect the last (({A.f})) to return (({nil})).
Is it a bug?

=end


-- 
http://bugs.ruby-lang.org/