@@ -868,10 +868,15 @@ int GetPrototypeCheckCount(Isolate* isolate, Handle<Map> receiver_map,
868
868
Handle <FixedArray>(), 0 );
869
869
}
870
870
871
+ enum class HolderCellRequest {
872
+ kGlobalPropertyCell ,
873
+ kHolder ,
874
+ };
875
+
871
876
Handle <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 ());
875
880
Handle <JSGlobalObject> global = Handle <JSGlobalObject>::cast (holder);
876
881
GlobalDictionary* dict = global->global_dictionary ();
877
882
int number = dict->FindEntry (name);
@@ -908,8 +913,14 @@ Handle<Object> LoadIC::LoadFromPrototype(Handle<Map> receiver_map,
908
913
Map::GetOrCreatePrototypeChainValidityCell (receiver_map, isolate ());
909
914
DCHECK (!validity_cell.is_null ());
910
915
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);
913
924
914
925
if (checks_count == 0 ) {
915
926
return isolate ()->factory ()->NewTuple3 (holder_cell, smi_handler,
0 commit comments