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

ruby-changes:9443

From: ko1 <ko1@a...>
Date: Thu, 25 Dec 2008 13:19:48 +0900 (JST)
Subject: [ruby-changes:9443] Ruby:r20981 (trunk): * vm_insnhelper.c (vm_method_search): return rb_cObject if there is no

ko1	2008-12-25 13:19:33 +0900 (Thu, 25 Dec 2008)

  New Revision: 20981

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

  Log:
    * vm_insnhelper.c (vm_method_search): return rb_cObject if there is no
      super class.  [ruby-dev:37587]
    * bootstraptest/test_method.rb: add tests for above.

  Modified files:
    trunk/ChangeLog
    trunk/bootstraptest/test_method.rb
    trunk/vm_insnhelper.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 20980)
+++ ChangeLog	(revision 20981)
@@ -1,3 +1,10 @@
+Thu Dec 25 13:13:00 2008  Koichi Sasada  <ko1@a...>
+
+	* vm_insnhelper.c (vm_method_search): return rb_cObject if there is no
+	  super class.  [ruby-dev:37587]
+
+	* bootstraptest/test_method.rb: add tests for above.
+
 Thu Dec 25 12:49:12 2008  Koichi Sasada  <ko1@a...>
 
 	* proc.c (proc_new): should use proc_dup() if block has Proc.
Index: bootstraptest/test_method.rb
===================================================================
--- bootstraptest/test_method.rb	(revision 20980)
+++ bootstraptest/test_method.rb	(revision 20981)
@@ -1103,3 +1103,40 @@
 
   C.new.m
 }
+
+assert_equal 'ok', %q{
+  module Foo
+    def foo
+      begin
+        super
+      rescue NoMethodError
+        :ok
+      end
+    end
+    module_function :foo
+  end
+  Foo.foo
+}, '[ruby-dev:37587]'
+
+assert_equal 'Object#foo', %q{
+  class Object
+    def self.foo
+      "Object.foo"
+    end
+    def foo
+      "Object#foo"
+    end
+  end
+
+  module Foo
+    def foo
+      begin
+        super
+      rescue NoMethodError
+        :ok
+      end
+    end
+    module_function :foo
+  end
+  Foo.foo
+}, '[ruby-dev:37587]'
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 20980)
+++ vm_insnhelper.c	(revision 20981)
@@ -1172,20 +1172,24 @@
 static inline VALUE
 vm_search_normal_superclass(VALUE klass, VALUE recv)
 {
+    VALUE sk = 0;
+
     if (BUILTIN_TYPE(klass) == T_CLASS) {
-	klass = RCLASS_SUPER(klass);
+	sk = RCLASS_SUPER(klass);
     }
     else if (BUILTIN_TYPE(klass) == T_MODULE) {
 	VALUE k = CLASS_OF(recv);
 	while (k) {
 	    if (BUILTIN_TYPE(k) == T_ICLASS && RBASIC(k)->klass == klass) {
-		klass = RCLASS_SUPER(k);
+		sk = RCLASS_SUPER(k);
 		break;
 	    }
 	    k = RCLASS_SUPER(k);
 	}
+	sk = rb_cObject;
     }
-    return klass;
+
+    return sk;
 }
 
 static void

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

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