From: nobu.nakada@... Date: 2001-12-30T02:21:19+09:00 Subject: [ruby-dev:15603] filename within eval なかだです。 ファイル名を指定したeval/class_eval/module_evalでメソッドやProc を定義すると、callerやbacktraceのファイル名がおかしくなることが あります。 $ { echo =begin; cat ruby-man-ja-1.6.6-20011225-rd/*.rd; echo =end; } > man.rd $ ./1.7/i686-linux/miniruby -I rdtool-0.7.6 rdtool-0.7.6/rd2 man.rd る特定のオブジェクトに固有の :442:in `quote': failed to convert false into String (TypeError) from る特定のオブジェクトに固有の :442:in `prev_words_on_error' from る特定のオブジェクトに固有の :430:in `on_error' from /usr/lib/ruby/site_ruby/racc/parser.rb:97:in `_racc_do_parse_c' from /usr/lib/ruby/site_ruby/racc/parser.rb:97:in `__send__' from /usr/lib/ruby/site_ruby/racc/parser.rb:97:in `do_parse' from る特定のオブジェクトに固有の :348:in `parse' # 以下、思いっきり文字化けしたので省略。 rb_f_eval(),specific_eval()でファイル名を指定したStringがGCされ てしまうのが原因のようです。 [ruby-talk:28803]や[ruby-talk:29211]+[ruby-talk:29341]でも直り ますが、とりあえずこんな感じでも一応直ります。 Index: parse.y =================================================================== RCS file: /cvs/ruby/src/ruby/parse.y,v retrieving revision 1.137 diff -u -2 -p -r1.137 parse.y --- parse.y 2001/12/22 02:51:00 1.137 +++ parse.y 2001/12/29 16:55:38 @@ -2144,5 +2144,5 @@ yycompile(f, line) ruby_eval_tree = 0; heredoc_end = 0; - ruby_sourcefile = f; + ruby_sourcefile = strdup(f); ruby_in_compile = 1; n = yyparse(); @@ -2229,5 +2229,5 @@ rb_compile_file(f, file, start) ruby_sourceline = start - 1; - return yycompile(strdup(f), start); + return yycompile(f, start); } -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦