Project

General

Profile

Bug #9475

Updated by nobu (Nobuyoshi Nakada) about 10 years ago

Ruby 2.0 appears to have introduced a subtle behavior change in method resolution that persists in 2.1.0. 

 The attached test case (also visible online at https://gist.github.com/benweint/8791007) is extracted from an actual application, and while I won't defend the need to do something like this, it is clear that the behavior changed in 2.0. Note that this sounds similar to https://bugs.ruby-lang.org/issues/9236 but is in fact distinct - the test case given in that bug was fixed in Ruby 2.1. 

 Steps to reproduce: 
 1. Run the attached testcase on Ruby 1.9.3 note the output 
 2. Run the attached testcase on Ruby 2.0.0-p353 or 2.1.0-p0, and note the output 

 Expected results: 
 While it's certainly not obvious to me what 'should' happen when executing this code, on 1.9.3, it produces this output: 

 ~~~ 
 foo from C 
 foo from B 
 foo from A   
 ~~~ 

   

 Actual results: 
 On 2.0+, I get this instead 

 ~~~ 
 foo from C 
 foo from B 
 foo from B (again) 
 foo from B 
 foo from B (again) 
 foo from B 
 ... previous two lines repeated many times ... 
 test.rb:11: stack level too deep (SystemStackError) 
 ~~~ 

 That is to say, on 2.0, we get into an infinitely recursive loop that doesn't happen with 1.9.3.

Back