From: "shugo (Shugo Maeda)" Date: 2013-01-02T10:30:31+09:00 Subject: [ruby-core:51217] [ruby-trunk - Bug #7643][Feedback] call to super in define_method in refine results in stack level too deep Issue #7643 has been updated by shugo (Shugo Maeda). 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 ---------------------------------------- Bug #7643: call to super in define_method in refine results in stack level too deep https://bugs.ruby-lang.org/issues/7643#change-35176 Author: beatrichartz (Beat Richartz) Status: Feedback Priority: Normal Assignee: shugo (Shugo Maeda) Category: Target version: ruby -v: ruby 2.0.0dev (2012-12-01 trunk 38126) [x86_64-darwin12.2.1] =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 -- http://bugs.ruby-lang.org/