Project

General

Profile

Bug #3011

Updated by marcandre (Marc-Andre Lafortune) over 7 years ago

=begin 
  
  For some reason, Ruby 1.8 will skip multiple copies of the same method. In case of a recursive function call, the behavior is different from Ruby 1.9 and seems wrong. 
 
  Here's the rubyspec I just committed: 
 
      it "returns one entry per call, even for recursive methods" do 
        def recurse(n) 
          return caller if n <= 0 
          recurse(n-1) 
        end 
        (recurse(3).size - recurse(2).size).should == 1 
      end 
 
  The following patch doesn't seem to yield any new failure with make test, make test-all, nor the caller specs: 
 
  diff --git a/eval.c b/eval.c 
  index 3407548..65fb970 100644 
  --- a/eval.c 
  +++ b/eval.c 
  @@ -6468,9 +6468,6 @@ backtrace(lev) 
       } 
       for (; frame && (n = frame->node); frame = frame->prev) { 
          if (frame->prev && frame->prev->last_func) { 
  -             if (frame->prev->node == n) { 
  -                 if (frame->prev->last_func == frame->last_func) continue; 
  -             } 
              snprintf(buf, BUFSIZ, "%s:%d:in `%s'", 
                       n->nd_file, nd_line(n), 
                       rb_id2name(frame->prev->last_func)); 
 
 
  Nobu, can you recall what was the reason for these lines ( r10593 ) ? 
 
 =end 
 

Back