| Index: src/ic/ic.cc
|
| diff --git a/src/ic/ic.cc b/src/ic/ic.cc
|
| index da38d581f0d8183b5dad6385b9d8942b5c4bd16c..8be212237b418313dfd6a13832b9bc201e94ee4b 100644
|
| --- a/src/ic/ic.cc
|
| +++ b/src/ic/ic.cc
|
| @@ -1241,6 +1241,16 @@ Handle<Code> LoadIC::CompileHandler(LookupIterator* lookup,
|
| DCHECK(!GetSharedFunctionInfo()->HasDebugInfo());
|
| Handle<Object> getter(Handle<AccessorPair>::cast(accessors)->getter(),
|
| isolate());
|
| +
|
| + MaybeHandle<Name> maybe_name =
|
| + FunctionTemplateInfo::TryGetCachePropertyName(isolate(), getter);
|
| + if (!maybe_name.is_null()) {
|
| + Handle<Name> name = maybe_name.ToHandleChecked();
|
| + LookupIterator cache_it(lookup->GetReceiver(), name, holder);
|
| + CHECK_EQ(LookupIterator::DATA, cache_it.state());
|
| + return CompileHandler(&cache_it, unused, cache_holder);
|
| + }
|
| +
|
| CallOptimization call_optimization(getter);
|
| NamedLoadHandlerCompiler compiler(isolate(), map, holder, cache_holder);
|
| if (call_optimization.is_simple_api_call()) {
|
| @@ -1288,7 +1298,6 @@ Handle<Code> LoadIC::CompileHandler(LookupIterator* lookup,
|
| // -------------- Fields --------------
|
| if (lookup->property_details().type() == DATA) {
|
| FieldIndex field = lookup->GetFieldIndex();
|
| - DCHECK(!receiver_is_holder);
|
| TRACE_HANDLER_STATS(isolate(), LoadIC_LoadField);
|
| NamedLoadHandlerCompiler compiler(isolate(), map, holder, cache_holder);
|
| return compiler.CompileLoadField(lookup->name(), field);
|
|
|