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

ruby-changes:16093

From: mame <ko1@a...>
Date: Fri, 28 May 2010 00:39:50 +0900 (JST)
Subject: [ruby-changes:16093] Ruby:r28043 (trunk): * insns.def (invokesuper): check consistency between class of self and

mame	2010-05-28 00:39:34 +0900 (Fri, 28 May 2010)

  New Revision: 28043

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

  Log:
    * insns.def (invokesuper): check consistency between class of self and
      class of method being invoked by super.  This is temporary measure
      for YARV.  See [ruby-core:30313] in detail.  See [ruby-dev:40959]
      [ruby-dev:39772] [ruby-core:27000] [ruby-core:27230]
    
    * vm_insnhelper.c (vm_search_superclass): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/insns.def
    trunk/vm_insnhelper.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 28042)
+++ ChangeLog	(revision 28043)
@@ -1,3 +1,12 @@
+Fri May 28 00:32:25 2010  Yusuke Endoh  <mame@t...>
+
+	* insns.def (invokesuper): check consistency between class of self and
+	  class of method being invoked by super.  This is temporary measure
+	  for YARV.  See [ruby-core:30313] in detail.  See [ruby-dev:40959]
+	  [ruby-dev:39772] [ruby-core:27000] [ruby-core:27230]
+
+	* vm_insnhelper.c (vm_search_superclass): ditto.
+
 Thu May 27 23:38:31 2010  NARUSE, Yui  <naruse@r...>
 
 	* file.c (rb_home_dir): set filesystem encoding.
Index: insns.def
===================================================================
--- insns.def	(revision 28042)
+++ insns.def	(revision 28043)
@@ -1022,6 +1022,12 @@
 
     recv = GET_SELF();
     vm_search_superclass(GET_CFP(), GET_ISEQ(), recv, TOPN(num), &id, &klass);
+
+    /* temporary measure for [Bug #2402] [Bug #2502] [Bug #3136] */
+    if (!rb_obj_is_kind_of(recv, klass)) {
+	rb_raise(rb_eNotImpError, "super from singleton method that is defined to multiple classes is not supported; this will be fixed in 1.9.3 or later");
+    }
+
     me = rb_method_entry(klass, id);
 
     CALL_METHOD(num, blockptr, flag, id, me, recv);
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 28042)
+++ vm_insnhelper.c	(revision 28043)
@@ -1402,6 +1402,11 @@
 	    }
 	}
 
+	/* temporary measure for [Bug #2420] [Bug #3136] */
+	if (!lcfp->me) {
+	    rb_raise(rb_eNoMethodError, "super called outside of method");
+	}
+
 	id = lcfp->me->def->original_id;
 	klass = vm_search_normal_superclass(lcfp->me->klass, recv);
     }

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

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