Hi, At Thu, 20 Jul 2006 01:11:09 +0900, John Fletcher wrote in [ruby-core:08290]: > > [1 Mail message body <text/plain; US-ASCII (7bit)>] > According to the ChangeLog in Ruby 1.8.4 the > following patch was made to Ruby in 2005 > > Wed Jun 8 08:33:10 2005 Nobuyoshi Nakada <nobu@ruby- > lang.org> > * eval.c (backtrace): skip successive frames sharing same node. > > We are having some trouble as a result, because when using the > coerce feature of ruby, the call stack no longer contains the > information needed, and we have traced this to a line of code in > backtrace in eval.c. > > if (frame->prev->node == n) continue; > > If this is commented out then the problem goes away. > > The problem is that the calling operator e.g. `+' is no longer in the > string given by caller[0] and so it is not possible to take different > action depending on different operators. Does this help?
Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.924 diff -p -U 2 -r1.924 eval.c --- eval.c 19 Jul 2006 13:52:03 -0000 1.924 +++ eval.c 20 Jul 2006 15:05:30 -0000 @@ -5805,2 +5805,3 @@ rb_call0(VALUE klass, VALUE recv, ID id, PUSH_SCOPE(); + ruby_frame->node = body; if (body->nd_rval) {
-- Nobu Nakada