Issue #3011 has been updated by marcandre (Marc-Andre Lafortune).

Description updated
Status changed from Assigned to Closed


----------------------------------------
Bug #3011: caller for recursive function
https://bugs.ruby-lang.org/issues/3011#change-27235

Author: marcandre (Marc-Andre Lafortune)
Status: Closed
Priority: Low
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: Ruby 1.8.8
ruby -v: ruby 1.8.8dev (2010-03-25) [i386-darwin10.2.0] 


=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



-- 
http://bugs.ruby-lang.org/