示例#1
0
  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);
  }