Project

General

Profile

Actions

Bug #918

closed

super doesn't work correctly when used with define_method

Added by tmat (Tomas Matousek) over 15 years ago. Updated almost 13 years ago.

Status:
Closed
Assignee:
-
Target version:
ruby -v:
Backport:
[ruby-core:20786]

Description

=begin
The following prints B,A in 1.8 but B,B,A in 1.9.*.
It seems that the receiver's class (C) is incorrectly used to determine the base class. The class where the target method (B#m) is defined (i.e. B) should be used so that A#m is invoked immediately.

class A
def m
puts 'A'
end
end

class B < A
define_method(:m) do
puts 'B'
super()
end
end

class C < B
end

C.new.m
=end

Actions #1

Updated by antares (Michael Klishin) over 15 years ago

=begin
Tomas,

I think the same problem has been reported in #730. Could you check if they are duplicates? Thanks.
=end

Actions #2

Updated by ko1 (Koichi Sasada) over 15 years ago

=begin
Tomas Matousek wrote::

The following prints B,A in 1.8 but B,B,A in 1.9.*.
It seems that the receiver's class (C) is incorrectly used to determine the base class. The class where the target method (B#m) is defined (i.e. B) should be used so that A#m is invoked immediately.

On my environment, following patch fixes this issue. Could you try it?
http://www.atdot.net/sp/readonly/ildack

--
// SASADA Koichi at atdot dot net

=end

Actions #3

Updated by tmat (Tomas Matousek) over 15 years ago

=begin
It might be related yet there might also be an issue specific to define_method. It depends on implementation details in Ruby.
=end

Actions #4

Updated by tmat (Tomas Matousek) over 15 years ago

=begin
Thanks for fixing this so quickly. Unfortunately I can't work with Ruby source code. I would need Win32 binaries to test it.
=end

Actions #5

Updated by antares (Michael Klishin) over 15 years ago

=begin
ko1,

Your patch fixes the problem, though does not help with #730.

I ran test-all as well as test-rubyspec against patched 1.9.1 from today.
=end

Actions #6

Updated by ko1 (Koichi Sasada) over 15 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r20967.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0