From b18fcd6a7c45f4726f8ee68dfac4cae662caf384 Mon Sep 17 00:00:00 2001
From: mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
Date: Thu, 27 May 2010 15:39:34 +0000
Subject: * 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.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28043 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
---
 insns.def | 6 ++++++
 1 file changed, 6 insertions(+)

(limited to 'insns.def')

diff --git a/insns.def b/insns.def
index 79b92d8a4d..23c0143907 100644
--- a/insns.def
+++ b/insns.def
@@ -1022,6 +1022,12 @@ invokesuper
 
     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);
-- 
cgit v1.2.3

