ruby-changes:20441
From: mrkn <ko1@a...>
Date: Sun, 10 Jul 2011 15:32:17 +0900 (JST)
Subject: [ruby-changes:20441] mrkn:r32489 (trunk): * load.c (rb_f_autoload): prevent to autoload for singleton
mrkn 2011-07-10 15:32:06 +0900 (Sun, 10 Jul 2011) New Revision: 32489 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32489 Log: * load.c (rb_f_autoload): prevent to autoload for singleton classes. fixes [Bug #4886] [ruby-dev:43816] * bootstraptest/test_autoload.rb: add tests for the above change. Modified files: trunk/ChangeLog trunk/bootstraptest/test_autoload.rb trunk/load.c Index: ChangeLog =================================================================== --- ChangeLog (revision 32488) +++ ChangeLog (revision 32489) @@ -1,3 +1,10 @@ +Sun Jul 10 15:30:00 2011 Kenta Murata <mrkn@m...> + + * load.c (rb_f_autoload): prevent to autoload for singleton + classes. fixes [Bug #4886] [ruby-dev:43816] + + * bootstraptest/test_autoload.rb: add tests for the above change. + Sun Jul 10 15:09:17 2011 Shota Fukumori <sorah@t...> * lib/test/unit/assertions.rb: Import documentation patch by Justin Index: bootstraptest/test_autoload.rb =================================================================== --- bootstraptest/test_autoload.rb (revision 32488) +++ bootstraptest/test_autoload.rb (revision 32489) @@ -1,4 +1,36 @@ assert_equal 'ok', %q{ + File.unlink('zzz.rb') if File.file?('zzz.rb') + instance_eval do + autoload :ZZZ, './zzz.rb' + begin + ZZZ + rescue LoadError + :ok + end + end +}, '[ruby-dev:43816]' + +assert_equal 'ok', %q{ + open('zzz.rb', 'w') {|f| f.puts '' } + instance_eval do + autoload :ZZZ, './zzz.rb' + begin + ZZZ + rescue NameError + :ok + end + end +}, '[ruby-dev:43816]' + +assert_equal 'ok', %q{ + open('zzz.rb', 'w') {|f| f.puts 'class ZZZ; def self.ok;:ok;end;end'} + instance_eval do + autoload :ZZZ, './zzz.rb' + ZZZ.ok + end +}, '[ruby-dev:43816]' + +assert_equal 'ok', %q{ open("zzz.rb", "w") {|f| f.puts "class ZZZ; def self.ok;:ok;end;end"} autoload :ZZZ, "./zzz.rb" ZZZ.ok Index: load.c =================================================================== --- load.c (revision 32488) +++ load.c (revision 32489) @@ -722,7 +722,7 @@ static VALUE rb_f_autoload(VALUE obj, VALUE sym, VALUE file) { - VALUE klass = rb_vm_cbase(); + VALUE klass = rb_class_real(rb_vm_cbase()); if (NIL_P(klass)) { rb_raise(rb_eTypeError, "Can not set autoload on singleton class"); } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/