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

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/

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