なかだです。

拡張ライブラリからスクリプトをロードしたあとで、ソースファイル
名が保存されません。

$ cat ext/hoge/hoge.c
#include "ruby.h"

Init_hoge()
{
    rb_require("foobar.rb");
    rb_raise(rb_eRuntimeError, "hoge");
}
$ cat ext/hoge/foobar.rb
# empty

$ ruby -I i686-linux/ext/hoge -I ext/hoge -rhoge -e0
./ext/hoge/foobar.rb: hoge (RuntimeError)

* eval.c (rb_load): should preserve current source file/line.

Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.505 diff -u -2 -p -r1.505 eval.c --- eval.c 4 Aug 2003 05:28:50 -0000 1.505 +++ eval.c 5 Aug 2003 06:23:38 -0000 @@ -5716,4 +5716,5 @@ rb_load(fname, wrap) volatile VALUE wrapper = 0; volatile VALUE self = ruby_top_self; + NODE *volatile last_node; NODE *saved_cref = ruby_cref; TMP_PROTECT; @@ -5760,4 +5761,9 @@ rb_load(fname, wrap) state = EXEC_TAG(); last_func = ruby_frame->last_func; + last_node = ruby_current_node; + if (!ruby_current_node && ruby_sourcefile) { + last_node = NEW_NEWLINE(0); + } + ruby_current_node = 0; if (state == 0) { NODE *node; @@ -5778,4 +5784,7 @@ rb_load(fname, wrap) ALLOW_INTS; ruby_frame->last_func = last_func; + ruby_current_node = last_node; + ruby_sourcefile = 0; + ruby_set_current_source(); if (ruby_scope->flags == SCOPE_ALLOCA && ruby_class == rb_cObject) { if (ruby_scope->local_tbl) /* toplevel was empty */
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦