@@ -868,10 +868,15 @@ int GetPrototypeCheckCount(Isolate* isolate, Handle<Map> receiver_map,
868868 Handle<FixedArray>(), 0 );
869869}
870870
871+ enum class HolderCellRequest {
872+ kGlobalPropertyCell ,
873+ kHolder ,
874+ };
875+
871876Handle<WeakCell> HolderCell (Isolate* isolate, Handle<JSObject> holder,
872- Handle<Name> name, Handle<Smi> smi_handler ) {
873- if (holder-> IsJSGlobalObject () &&
874- *smi_handler != * LoadHandler::LoadInterceptor (isolate)) {
877+ Handle<Name> name, HolderCellRequest request ) {
878+ if (request == HolderCellRequest:: kGlobalPropertyCell ) {
879+ DCHECK (holder-> IsJSGlobalObject ());
875880 Handle<JSGlobalObject> global = Handle<JSGlobalObject>::cast (holder);
876881 GlobalDictionary* dict = global->global_dictionary ();
877882 int number = dict->FindEntry (name);
@@ -908,8 +913,14 @@ Handle<Object> LoadIC::LoadFromPrototype(Handle<Map> receiver_map,
908913 Map::GetOrCreatePrototypeChainValidityCell (receiver_map, isolate ());
909914 DCHECK (!validity_cell.is_null ());
910915
911- Handle<WeakCell> holder_cell =
912- HolderCell (isolate (), holder, name, smi_handler);
916+ // LoadIC dispatcher expects PropertyCell as a "holder" in case of kGlobal
917+ // handler kind.
918+ HolderCellRequest request =
919+ LoadHandler::GetHandlerKind (*smi_handler) == LoadHandler::kGlobal
920+ ? HolderCellRequest::kGlobalPropertyCell
921+ : HolderCellRequest::kHolder ;
922+
923+ Handle<WeakCell> holder_cell = HolderCell (isolate (), holder, name, request);
913924
914925 if (checks_count == 0 ) {
915926 return isolate ()->factory ()->NewTuple3 (holder_cell, smi_handler,
0 commit comments