Bug #7643
closedcall to super in define_method in refine results in stack level too deep
Description
=begin
When (({define_method})) is used within the refine block argument, calls to super will result in a stack level too deep. Definitions with def can call super without problems.
module A
refine Fixnum do
%i(+ -).each do |m|
define_method m do |other|
super(other)
end
end
def * other
super(other)
end
end
end
class B
using A
def working
puts 'working'
1 * 1
end
def error
puts 'stack level too deep'
1 + 1
end
end
puts B.new.working
puts B.new.error
=end
Files
Updated by shugo (Shugo Maeda) almost 12 years ago
- Status changed from Open to Feedback
- Assignee set to shugo (Shugo Maeda)
Hi,
beatrichartz (Beat Richartz) wrote:
When define_method is used within the refine block argument, calls to super will result in a stack level too deep. Definitions with def can call super without problems.
r38126 is too old. Please try the latest revision, where Module#using is removed.
The following modified program doesn't cause a stack level too deep error in my Ubuntu box (ruby 2.0.0dev (2012-12-29 trunk 38655) [i686-linux]):
require 'refinement'
module A
refine Fixnum do
%i(+ -).each do |m|
define_method m do |other|
super(other)
end
end
def * other
super(other)
end
end
end
using A
class B
def working
puts 'working'
1 * 1
end
def error
puts 'stack level too deep'
1 + 1
end
end
puts B.new.working
puts B.new.error
Updated by nobu (Nobuyoshi Nakada) almost 12 years ago
- Description updated (diff)
Updated by beatrichartz (Beat Richartz) almost 12 years ago
Ok, also working for me here with r38676. Should have checked the new versions before, sorry. Have a nice day!
Updated by shugo (Shugo Maeda) almost 12 years ago
- Status changed from Feedback to Rejected
beatrichartz (Beat Richartz) wrote:
Ok, also working for me here with r38676. Should have checked the new versions before, sorry. Have a nice day!
Thanks for your confirmation. So I close this issue.