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

ruby-changes:13578

From: nobu <ko1@a...>
Date: Fri, 16 Oct 2009 09:52:14 +0900 (JST)
Subject: [ruby-changes:13578] Ruby:r25359 (ruby_1_8): * eval.c (rb_clear_cache_for_undef): clear entries for inherited

nobu	2009-10-16 09:52:02 +0900 (Fri, 16 Oct 2009)

  New Revision: 25359

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

  Log:
    * eval.c (rb_clear_cache_for_undef): clear entries for inherited
      methods.  [ruby-core:26074]

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/eval.c
    branches/ruby_1_8/test/ruby/test_object.rb

Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 25358)
+++ ruby_1_8/ChangeLog	(revision 25359)
@@ -1,3 +1,8 @@
+Fri Oct 16 09:52:00 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* eval.c (rb_clear_cache_for_undef): clear entries for inherited
+	  methods.  [ruby-core:26074]
+
 Fri Oct 16 09:20:45 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* test/ruby/envutil.rb: get rid of double loading.
Index: ruby_1_8/test/ruby/test_object.rb
===================================================================
--- ruby_1_8/test/ruby/test_object.rb	(revision 25358)
+++ ruby_1_8/test/ruby/test_object.rb	(revision 25359)
@@ -230,6 +230,26 @@
     assert_raise(TypeError) do
       c.instance_eval { remove_method(:foo) }
     end
+
+    c = Class.new do
+      def meth1; "meth" end
+    end
+    d = Class.new(c) do
+      alias meth2 meth1
+    end
+    o1 = c.new
+    assert_respond_to(o1, :meth1)
+    assert_equal("meth", o1.meth1)
+    o2 = d.new
+    assert_respond_to(o2, :meth1)
+    assert_equal("meth", o2.meth1)
+    assert_respond_to(o2, :meth2)
+    assert_equal("meth", o2.meth2)
+    d.class_eval do
+      remove_method :meth2
+    end
+    bug2202 = '[ruby-core:26074]'
+    assert_raise(NoMethodError, bug2202) {o2.meth2}
   end
 
   def test_method_missing
Index: ruby_1_8/eval.c
===================================================================
--- ruby_1_8/eval.c	(revision 25358)
+++ ruby_1_8/eval.c	(revision 25359)
@@ -384,7 +384,8 @@
     ent = cache; end = ent + CACHE_SIZE;
     while (ent < end) {
 	if (ent->mid == id &&
-	    RCLASS(ent->origin)->m_tbl == RCLASS(klass)->m_tbl) {
+	    (ent->klass == klass ||
+	     RCLASS(ent->origin)->m_tbl == RCLASS(klass)->m_tbl)) {
 	    ent->mid = 0;
 	}
 	ent++;

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

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