* variable.c (rb_autoload_p): search superclasses as same as actual

loading.  fixes [ruby-core:35679]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31279 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2011-04-14 12:23:32 +00:00
parent d986500059
commit af103c63dc
3 changed files with 27 additions and 1 deletions

View File

@ -1,3 +1,8 @@
Thu Apr 14 21:23:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
* 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@ruby-lang.org>
* include/ruby/win32.h (frexp, modf): wrongly declared as pure in

View File

@ -34,4 +34,22 @@ p Foo::Bar
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

View File

@ -1569,7 +1569,10 @@ rb_autoload_p(VALUE mod, ID id)
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;