From babae0496048b117b0767350e895ca82afaf6849 Mon Sep 17 00:00:00 2001
From: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
Date: Sun, 5 May 2013 09:57:02 +0000
Subject: insns.def: refactor by wanabe

* insns.def (defined): use vm_search_superclass() like as normal super
  call.  based on a patch <https://gist.github.com/wanabe/5520026> by
  wanabe.
* vm_insnhelper.c (vm_search_superclass): return error but not raise
  exceptions.
* vm_insnhelper.c (vm_search_super_method): check the result of
  vm_search_superclass and raise execptions on error.

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

(limited to 'insns.def')

diff --git a/insns.def b/insns.def
index d8be61114e..d49b6a7c92 100644
--- a/insns.def
+++ b/insns.def
@@ -764,21 +764,10 @@ defined
 	}
 	break;
       case DEFINED_ZSUPER:{
-	const rb_method_entry_t *me = GET_CFP()->me;
-	if (!me) {
-	    const rb_control_frame_t *end_cfp = RUBY_VM_END_CONTROL_FRAME(GET_THREAD());
-	    const rb_control_frame_t *cfp = GET_CFP();
-	    const VALUE *const local_ep = rb_vm_ep_local_ep(cfp->ep);
-	    while (RUBY_VM_VALID_CONTROL_FRAME_P(cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp), end_cfp)) {
-		if (cfp->ep == local_ep) {
-		    me = cfp->me;
-		    break;
-		}
-	    }
-	}
-	if (me) {
-	    VALUE klass = vm_search_normal_superclass(GET_CFP()->klass);
-	    ID id = me->def ? me->def->original_id : me->called_id;
+	rb_call_info_t cit;
+	if (vm_search_superclass(GET_CFP(), GET_ISEQ(), Qnil, &cit) == 0) {
+	    VALUE klass = cit.klass;
+	    ID id = cit.mid;
 	    if (rb_method_boundp(klass, id, 0)) {
 		expr_type = DEFINED_ZSUPER;
 	    }
-- 
cgit v1.2.3

