From: "marcandre (Marc-Andre Lafortune)" Date: 2012-06-14T11:31:24+09:00 Subject: [ruby-core:45638] [Ruby 1.8 - Bug #3011][Closed] caller for recursive function 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/