From: nobu.nakada@... Date: 2002-11-13T13:02:14+09:00 Subject: [ruby-dev:18759] Re: Different caller(0) in trace_func when NameError from toplevel between 1.6 and 1.7 なかだです。 At Wed, 13 Nov 2002 10:43:39 +0900, NAKAMURA, Hiroshi wrote: > > トップレベルだとruby_frame->nodeがセットされてないからですね。 > > 以下のパッチでどうでしょう。 > > ばっちりです。1時間で直っちゃいますか。。。さすが。 > なひが真面目に追う気が失せちゃいますね(冗談です。 > できるだけ他の人に負担かけないように頑張ります ^^;)。 これはruby_current_nodeを追加したときのミスですから。 > 本当を言うと"trace.rb:1"がいいんですが、これはもしかすると > parse.yかな、と思ってとりあえず後回しにしています。^^; ブロック内の最初の文よりも{とかdoのある行ということですよね。確 かにそのほうがいいかも。 > 同様のものとしては、begin、ensure、elseがありますね。 ensureとelseは次の行になるような気がしますが、なんか勘違いして ますか。 あとはProc#to_sかな。 Index: parse.y =================================================================== RCS file: /cvs/ruby/src/ruby/parse.y,v retrieving revision 1.226 diff -u -2 -p -r1.226 parse.y --- parse.y 7 Nov 2002 23:01:45 -0000 1.226 +++ parse.y 13 Nov 2002 03:54:11 -0000 @@ -1302,8 +1302,12 @@ primary : literal } | kBEGIN + { + $1 = ruby_sourceline; + } bodystmt kEND { - $$ = NEW_BEGIN($2); + $$ = NEW_BEGIN($3); + nd_set_line($$, $1); } | tLPAREN_ARG expr {lex_state = EXPR_ENDARG;} ')' @@ -1589,4 +1593,5 @@ do_block : kDO_BLOCK { $$ = dyna_push(); + $1 = ruby_sourceline; } opt_block_var @@ -1595,8 +1600,12 @@ do_block : kDO_BLOCK { $$ = NEW_ITER($3, 0, $4); - fixpos($$, $3?$3:$4); + nd_set_line($$, $1); dyna_pop($2); } - | tLBRACE_ARG {$$ = dyna_push();} + | tLBRACE_ARG + { + $$ = dyna_push(); + $1 = ruby_sourceline; + } opt_block_var compstmt @@ -1604,5 +1613,5 @@ do_block : kDO_BLOCK { $$ = NEW_ITER($3, 0, $4); - fixpos($$, $3?$3:$4); + nd_set_line($$, $1); dyna_pop($2); } @@ -1661,4 +1670,5 @@ brace_block : '{' { $$ = dyna_push(); + $1 = ruby_sourceline; } opt_block_var @@ -1666,5 +1676,5 @@ brace_block : '{' { $$ = NEW_ITER($3, 0, $4); - fixpos($$, $4); + nd_set_line($$, $1); dyna_pop($2); } @@ -1672,4 +1682,5 @@ brace_block : '{' { $$ = dyna_push(); + $1 = ruby_sourceline; } opt_block_var @@ -1677,5 +1688,5 @@ brace_block : '{' { $$ = NEW_ITER($3, 0, $4); - fixpos($$, $4); + nd_set_line($$, $1); dyna_pop($2); } -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦