なかだです。

At Thu, 25 Aug 2005 18:04:37 +0900,
Shugo Maeda wrote in [ruby-dev:26883]:
> これをload(filename, true)でロードすると、以下のようなエラーに
> なります。
> 
> $ ruby -e 'load("test.rb", true)' /home/shugo/ruby/test.rb:7:in
> `append_features': cyclic include detected (ArgumentError)
>         from /home/shugo/ruby/test.rb:7
>         from -e:1

wrapされたload中のclassやmodule定義では、ruby_wrapperをextendと
include両方していますが、少なくともincludeはいらないんではない
かという気がしてきました。なにか見落としてるような気もしますが。


Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.831 diff -U2 -p -u -r1.831 eval.c --- eval.c 14 Sep 2005 08:30:15 -0000 1.831 +++ eval.c 15 Sep 2005 09:37:36 -0000 @@ -3874,5 +3874,4 @@ rb_eval(VALUE self, NODE *n) if (ruby_wrapper) { rb_extend_object(klass, ruby_wrapper); - rb_include_module(klass, ruby_wrapper); } if (super && gen) { @@ -3910,5 +3909,4 @@ rb_eval(VALUE self, NODE *n) if (ruby_wrapper) { rb_extend_object(module, ruby_wrapper); - rb_include_module(module, ruby_wrapper); } @@ -3932,5 +3930,4 @@ rb_eval(VALUE self, NODE *n) if (ruby_wrapper) { rb_extend_object(klass, ruby_wrapper); - rb_include_module(klass, ruby_wrapper); } @@ -7295,6 +7292,9 @@ top_include(int argc, VALUE *argv, VALUE rb_secure(4); if (ruby_wrapper) { + VALUE ret; rb_warning("main#include in the wrapped load is effective only in wrapper module"); - return rb_mod_include(argc, argv, ruby_wrapper); + ret = rb_mod_include(argc, argv, ruby_wrapper); + rb_extend_object(self, ruby_wrapper); + return ret; } return rb_mod_include(argc, argv, rb_cObject);
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦