Object* PolyInlineCache::check_cache(STATE, CallSite* call_site, Arguments& args) { Class* const recv_class = args.recv()->direct_class(state); PolyInlineCache* cache = static_cast<PolyInlineCache*>(call_site); InlineCacheEntry* entry = cache->get_entry(recv_class); if(likely(entry)) { Executable* meth = entry->method(); Module* mod = entry->stored_module(); entry->hit(); state->vm()->metrics().machine.methods_invoked++; return meth->execute(state, meth, mod, args); } return cache->fallback(state, args); }