From b18fcd6a7c45f4726f8ee68dfac4cae662caf384 Mon Sep 17 00:00:00 2001 From: mame 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 --- vm_insnhelper.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'vm_insnhelper.c') diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 0bd29b5208..3b442c8d9e 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1402,6 +1402,11 @@ vm_search_superclass(rb_control_frame_t *reg_cfp, rb_iseq_t *ip, } } + /* 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); } -- cgit v1.2.3