なかだです。

ruby-bugs:PR#372を調べてて気づいたんですが、require_libraries()
でorig_sourcefileが開放されてしまいます。NODEで保存しておくよう
にすれば大丈夫だと思います。

それと、rb_require()を呼ぶ前にruby_sourcefileを0にしているため
に、ライブラリが見付からないときのメッセージがちょっとおかしく
なっている気がします。

$ ruby-1.6 -v -rnothing -e0
0: No such file to load -- nothing (LoadError)
ruby 1.6.7 (2002-08-21) [i686-linux]
$ ruby-1.7 -v -rnothing -e0
0: No such file to load -- nothing (LoadError)
ruby 1.7.2 (2002-08-21) [i686-linux]


Index: ruby.c =================================================================== RCS file: /cvs/ruby/src/ruby/ruby.c,v retrieving revision 1.64 diff -u -2 -p -r1.64 ruby.c --- ruby.c 21 Aug 2002 15:47:54 -0000 1.64 +++ ruby.c 24 Aug 2002 02:14:34 -0000 @@ -311,13 +311,12 @@ require_libraries() extern NODE *ruby_eval_tree; extern NODE *ruby_eval_tree_begin; - char *orig_sourcefile = ruby_sourcefile; - NODE *save[2]; + NODE *save[3]; struct req_list *list = req_list_head.next; struct req_list *tmp; Init_ext(); /* should be called here for some reason :-( */ - ruby_sourcefile = 0; save[0] = ruby_eval_tree; save[1] = ruby_eval_tree_begin; + save[2] = NEW_NEWLINE(0); ruby_eval_tree = ruby_eval_tree_begin = 0; req_list_last = 0; @@ -332,5 +331,8 @@ require_libraries() ruby_eval_tree = save[0]; ruby_eval_tree_begin = save[1]; - ruby_sourcefile = orig_sourcefile; + ruby_current_node = save[2]; + ruby_set_current_source(); + ruby_current_node = 0; + rb_gc_force_recycle((VALUE)save[2]); }
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦