diff --git a/vm_insnhelper.c b/vm_insnhelper.c index cc35997eae..c2608c7f62 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -2796,7 +2796,13 @@ vm_search_super_method(const rb_control_frame_t *reg_cfp, struct rb_call_info *c CC_SET_FASTPATH(cc, vm_call_method_missing, TRUE); } else { - /* TODO: use inline cache */ +#if OPT_INLINE_METHOD_CACHE + if (LIKELY(GET_GLOBAL_METHOD_STATE() == cc->method_state && RCLASS_SERIAL(klass) == cc->class_serial && + ci->mid == cc->me->def->original_id)) + return; + cc->method_state = GET_GLOBAL_METHOD_STATE(); + cc->class_serial = RCLASS_SERIAL(klass); +#endif cc->me = rb_callable_method_entry(klass, ci->mid); CC_SET_FASTPATH(cc, vm_call_super_method, TRUE); }