summaryrefslogtreecommitdiff
path: root/insns.def
diff options
context:
space:
mode:
Diffstat (limited to 'insns.def')
-rw-r--r--insns.def19
1 files changed, 4 insertions, 15 deletions
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;
}