[ruby-core:63277] [ruby-trunk - Bug #9740] super: no superclass method in Ruby 2.1.1

From: nagachika00@...
Date: 2014-06-22 17:34:31 UTC
List: ruby-core #63277
Issue #9740 has been updated by Tomoyuki Chikanaga.

Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: REQUIRED, 2.1: DONE

r45585 was already backported into `ruby_2_1` branch at r46190 for #9721.

----------------------------------------
Bug #9740: super: no superclass method in Ruby 2.1.1
https://bugs.ruby-lang.org/issues/9740#change-47324

* Author: Wei Hu
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: core
* Target version: current: 2.2.0
* ruby -v: ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]
* Backport: 2.0.0: REQUIRED, 2.1: DONE
----------------------------------------
Below code will result into error:

~~~
super: no superclass method `foo' for #<Object:0x002b0430670fe8>
~~~

However, it can pass with Ruby 1.9 and I am not sure if it's feature changes or bug.

~~~ruby
module A
  def foo
    puts "A"
  end
end
 
module B
  def foo
    puts "B"
    super
  end
  ub_meth = instance_method :foo
  define_method :foo do
    ub_meth.bind(self).call()
  end
end
a = Object.new
a.extend A
a.extend B
a.foo
~~~

Hi, Nakada,
Thanks for your fix @ r45565, but this still has problem. If we run my original example, it will result into:

~~~
B
B
B
t.rb:9: stack level too deep (SystemStackError)
~~~

I think the difference is: in the original example, I used `define_method :foo` to override the foo in Module `B`.




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

In This Thread

Prev Next