[#23332] to_str再考 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

15 messages 2004/04/05

[#23380] [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

17 messages 2004/04/15
[#23400] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。落ちる場所がわかりました。

[#23402] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23403] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — nobu.nakada@... 2004/04/16

なかだです。

[#23405] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23407] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[ruby-dev:23305] top_include() with ruby_wrapper

From: Shugo Maeda <shugo@...>
Date: 2004-04-02 03:01:54 UTC
List: ruby-dev #23305
前田です。

top_include()の挙動が1.6から変わったせいで、以下のようなコードが
1.8ではエラーになるようです。

--- b.rb ---
module A
  module B
  end
end
-----------
--- test.rb ---
p A::B
include A
p B
--------------

excelsior:/tmp$ ruby1.6 -v -r b -e 'load("./test.rb", true)'
ruby 1.6.8 (2003-07-09) [i386-linux]
A::B
A::B
excelsior:/tmp$ ruby1.8 -v -r b -e 'load("./test.rb", true)'
ruby 1.8.1 (2004-02-03) [i386-linux]
A::B
./test.rb:2: warning: main#include in the wrapped load is effective only for toplevel
./test.rb:3: uninitialized constant #<Module:0x402e8f48>::B (NameError)
        from -e:1:in `load'
        from -e:1

なぜか、以下のようにloadされるライブラリ側からrequireすると動くよ
うです。

--- test2.rb
require "b"

p A::B
include A
p B
------------

excelsior:/tmp$ ruby1.8 -v -e 'load("./test2.rb", true)'
ruby 1.8.1 (2004-02-03) [i386-linux]
A::B
A::B

top_include()の実装を見ると、selfにモジュールをextendしているよう
ですが、こんな感じでruby_wrapperにincludeするのでは何かまずいんでしたっけ?

diff -u -r1.652 eval.c
--- eval.c	2 Apr 2004 02:36:47 -0000	1.652
+++ eval.c	2 Apr 2004 03:01:15 -0000
@@ -7222,8 +7222,7 @@
 {
     rb_secure(4);
     if (ruby_wrapper) {
-	rb_warn("main#include in the wrapped load is effective only for toplevel");
-	return rb_obj_extend(argc, argv, self);
+	return rb_mod_include(argc, argv, ruby_wrapper);
     }
     else {
 	return rb_mod_include(argc, argv, rb_cObject);

-- 
前田 修吾

In This Thread

Prev Next