[前][次][番号順一覧][スレッド一覧]

ruby-changes:19240

From: nobu <ko1@a...>
Date: Fri, 15 Apr 2011 16:47:01 +0900 (JST)
Subject: [ruby-changes:19240] Ruby:r31279 (trunk): * variable.c (rb_autoload_p): search superclasses as same as actual

nobu	2011-04-14 21:23:32 +0900 (Thu, 14 Apr 2011)

  New Revision: 31279

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31279

  Log:
    * variable.c (rb_autoload_p): search superclasses as same as actual
      loading.  fixes [ruby-core:35679]

  Modified files:
    trunk/ChangeLog
    trunk/test/ruby/test_autoload.rb
    trunk/variable.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 31278)
+++ ChangeLog	(revision 31279)
@@ -1,3 +1,8 @@
+Thu Apr 14 21:23:29 2011  Nobuyoshi Nakada  <nobu@r...>
+
+	* variable.c (rb_autoload_p): search superclasses as same as actual
+	  loading.  fixes [ruby-core:35679]
+
 Thu Apr 14 21:21:06 2011  Nobuyoshi Nakada  <nobu@r...>
 
 	* include/ruby/win32.h (frexp, modf): wrongly declared as pure in
Index: variable.c
===================================================================
--- variable.c	(revision 31278)
+++ variable.c	(revision 31279)
@@ -1569,7 +1569,10 @@
     NODE *load;
     const char *loading = 0;
 
-    if (!autoload_node_id(mod, id)) return Qnil;
+    while (!autoload_node_id(mod, id)) {
+	mod = RCLASS_SUPER(mod);
+	if (!mod) return Qnil;
+    }
     load = autoload_node(mod, id, &loading);
     if (!load) return Qnil;
     return load && (file = load->nd_lit) ? file : Qnil;
Index: test/ruby/test_autoload.rb
===================================================================
--- test/ruby/test_autoload.rb	(revision 31278)
+++ test/ruby/test_autoload.rb	(revision 31279)
@@ -34,4 +34,22 @@
     File.unlink(*tmpfiles) rescue nil if tmpfiles
     tmpdirs.each {|dir| Dir.rmdir(dir)}
   end
+
+  def test_autoload_p
+    bug4565 = '[ruby-core:35679]'
+
+    require 'tmpdir'
+    tmpdir = Dir.mktmpdir('autoload')
+    tmpfile = tmpdir + '/foo.rb'
+    a = Module.new do
+      autoload :X, tmpfile
+    end
+    b = Module.new do
+      include a
+    end
+    assert_equal(true, a.const_defined?(:X))
+    assert_equal(true, b.const_defined?(:X))
+    assert_equal(tmpfile, a.autoload?(:X), bug4565)
+    assert_equal(tmpfile, b.autoload?(:X), bug4565)
+  end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]