@@ -223,7 +223,8 @@ inline bool PrototypeHasNoElements(Isolate* isolate, JSObject* object) {
223223 HeapObject* empty = isolate->heap()->empty_fixed_array();
224224 while (prototype != null) {
225225 Map* map = prototype->map();
226- if (map->instance_type() <= LAST_CUSTOM_ELEMENTS_RECEIVER) return false;
226+ if (map->instance_type() <= LAST_CUSTOM_ELEMENTS_RECEIVER ||
227+ map->instance_type() == JS_GLOBAL_PROXY_TYPE) return false;
227228 if (JSObject::cast(prototype)->elements() != empty) return false;
228229 prototype = HeapObject::cast(map->prototype());
229230 }
@@ -237,6 +238,7 @@ inline bool IsJSArrayFastElementMovingAllowed(Isolate* isolate,
237238
238239inline bool HasSimpleElements(JSObject* current) {
239240 return current->map()->instance_type() > LAST_CUSTOM_ELEMENTS_RECEIVER &&
241+ current->map()->instance_type() != JS_GLOBAL_PROXY_TYPE &&
240242 !current->GetElementsAccessor()->HasAccessors(current);
241243}
242244
@@ -421,9 +423,13 @@ void Builtins::Generate_ObjectHasOwnProperty(
421423
422424 {
423425 Label if_objectissimple(assembler);
424- assembler->Branch(assembler->Int32LessThanOrEqual(
425- instance_type,
426- assembler->Int32Constant(LAST_SPECIAL_RECEIVER_TYPE)),
426+ assembler->Branch(assembler->Word32Or(
427+ assembler->Int32LessThanOrEqual(
428+ instance_type, assembler->Int32Constant(
429+ LAST_SPECIAL_RECEIVER_TYPE)),
430+ assembler->Word32Equal(
431+ instance_type, assembler->Int32Constant(
432+ JS_GLOBAL_PROXY_TYPE))),
427433 &call_runtime, &if_objectissimple);
428434 assembler->Bind(&if_objectissimple);
429435 }
@@ -481,9 +487,13 @@ void Builtins::Generate_ObjectHasOwnProperty(
481487 assembler->Bind(&keyisindex);
482488 {
483489 Label if_objectissimple(assembler);
484- assembler->Branch(assembler->Int32LessThanOrEqual(
485- instance_type, assembler->Int32Constant(
490+ assembler->Branch(assembler->Word32Or(
491+ assembler->Int32LessThanOrEqual(
492+ instance_type, assembler->Int32Constant(
486493 LAST_CUSTOM_ELEMENTS_RECEIVER)),
494+ assembler->Word32Equal(
495+ instance_type, assembler->Int32Constant(
496+ JS_GLOBAL_PROXY_TYPE))),
487497 &call_runtime, &if_objectissimple);
488498 assembler->Bind(&if_objectissimple);
489499 }
0 commit comments