@@ -572,19 +572,12 @@ MaybeHandle<Object> Object::SetPropertyWithDefinedSetter(
572
572
573
573
574
574
static bool FindAllCanReadHolder(LookupIterator* it) {
575
- // Skip current iteration, it's in state ACCESS_CHECK or INTERCEPTOR, both of
576
- // which have already been checked.
577
- DCHECK(it->state() == LookupIterator::ACCESS_CHECK ||
578
- it->state() == LookupIterator::INTERCEPTOR);
579
- for (it->Next(); it->IsFound(); it->Next()) {
575
+ for (; it->IsFound(); it->Next()) {
580
576
if (it->state() == LookupIterator::ACCESSOR) {
581
- auto accessors = it->GetAccessors();
577
+ Handle<Object> accessors = it->GetAccessors();
582
578
if (accessors->IsAccessorInfo()) {
583
579
if (AccessorInfo::cast(*accessors)->all_can_read()) return true;
584
580
}
585
- } else if (it->state() == LookupIterator::INTERCEPTOR) {
586
- auto holder = it->GetHolder<JSObject>();
587
- if (holder->GetNamedInterceptor()->all_can_read()) return true;
588
581
}
589
582
}
590
583
return false;
@@ -594,18 +587,10 @@ static bool FindAllCanReadHolder(LookupIterator* it) {
594
587
MaybeHandle<Object> JSObject::GetPropertyWithFailedAccessCheck(
595
588
LookupIterator* it) {
596
589
Handle<JSObject> checked = it->GetHolder<JSObject>();
597
- while (FindAllCanReadHolder(it)) {
598
- if (it->state() == LookupIterator::ACCESSOR) {
599
- return GetPropertyWithAccessor(it->GetReceiver(), it->name(),
600
- it->GetHolder<JSObject>(),
601
- it->GetAccessors());
602
- }
603
- DCHECK_EQ(LookupIterator::INTERCEPTOR, it->state());
604
- auto receiver = Handle<JSObject>::cast(it->GetReceiver());
605
- auto result = GetPropertyWithInterceptor(it->GetHolder<JSObject>(),
606
- receiver, it->name());
607
- if (it->isolate()->has_scheduled_exception()) break;
608
- if (!result.is_null()) return result;
590
+ if (FindAllCanReadHolder(it)) {
591
+ return GetPropertyWithAccessor(it->GetReceiver(), it->name(),
592
+ it->GetHolder<JSObject>(),
593
+ it->GetAccessors());
609
594
}
610
595
it->isolate()->ReportFailedAccessCheck(checked, v8::ACCESS_GET);
611
596
RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(it->isolate(), Object);
@@ -616,16 +601,8 @@ MaybeHandle<Object> JSObject::GetPropertyWithFailedAccessCheck(
616
601
Maybe<PropertyAttributes> JSObject::GetPropertyAttributesWithFailedAccessCheck(
617
602
LookupIterator* it) {
618
603
Handle<JSObject> checked = it->GetHolder<JSObject>();
619
- while (FindAllCanReadHolder(it)) {
620
- if (it->state() == LookupIterator::ACCESSOR) {
621
- return maybe(it->property_details().attributes());
622
- }
623
- DCHECK_EQ(LookupIterator::INTERCEPTOR, it->state());
624
- auto result = GetPropertyAttributesWithInterceptor(
625
- it->GetHolder<JSObject>(), it->GetReceiver(), it->name());
626
- if (it->isolate()->has_scheduled_exception()) break;
627
- if (result.has_value && result.value != ABSENT) return result;
628
- }
604
+ if (FindAllCanReadHolder(it))
605
+ return maybe(it->property_details().attributes());
629
606
it->isolate()->ReportFailedAccessCheck(checked, v8::ACCESS_HAS);
630
607
RETURN_VALUE_IF_SCHEDULED_EXCEPTION(it->isolate(),
631
608
Maybe<PropertyAttributes>());
@@ -759,65 +736,6 @@ Handle<Object> JSObject::DeleteNormalizedProperty(Handle<JSObject> object,
759
736
}
760
737
761
738
762
- static MaybeHandle<JSObject> FindIndexedAllCanReadHolder(
763
- Isolate* isolate, Handle<JSObject> js_object,
764
- PrototypeIterator::WhereToStart where_to_start) {
765
- for (PrototypeIterator iter(isolate, js_object, where_to_start);
766
- !iter.IsAtEnd(); iter.Advance()) {
767
- auto curr = PrototypeIterator::GetCurrent(iter);
768
- if (!curr->IsJSObject()) break;
769
- auto obj = Handle<JSObject>::cast(curr);
770
- if (!obj->HasIndexedInterceptor()) continue;
771
- if (obj->GetIndexedInterceptor()->all_can_read()) return obj;
772
- }
773
- return MaybeHandle<JSObject>();
774
- }
775
-
776
-
777
- MaybeHandle<Object> JSObject::GetElementWithFailedAccessCheck(
778
- Isolate* isolate, Handle<JSObject> object, Handle<Object> receiver,
779
- uint32_t index) {
780
- Handle<JSObject> holder = object;
781
- PrototypeIterator::WhereToStart where_to_start =
782
- PrototypeIterator::START_AT_RECEIVER;
783
- while (true) {
784
- auto all_can_read_holder =
785
- FindIndexedAllCanReadHolder(isolate, holder, where_to_start);
786
- if (!all_can_read_holder.ToHandle(&holder)) break;
787
- auto result =
788
- JSObject::GetElementWithInterceptor(holder, receiver, index, false);
789
- if (isolate->has_scheduled_exception()) break;
790
- if (!result.is_null()) return result;
791
- where_to_start = PrototypeIterator::START_AT_PROTOTYPE;
792
- }
793
- isolate->ReportFailedAccessCheck(object, v8::ACCESS_GET);
794
- RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object);
795
- return isolate->factory()->undefined_value();
796
- }
797
-
798
-
799
- Maybe<PropertyAttributes> JSObject::GetElementAttributesWithFailedAccessCheck(
800
- Isolate* isolate, Handle<JSObject> object, Handle<Object> receiver,
801
- uint32_t index) {
802
- Handle<JSObject> holder = object;
803
- PrototypeIterator::WhereToStart where_to_start =
804
- PrototypeIterator::START_AT_RECEIVER;
805
- while (true) {
806
- auto all_can_read_holder =
807
- FindIndexedAllCanReadHolder(isolate, holder, where_to_start);
808
- if (!all_can_read_holder.ToHandle(&holder)) break;
809
- auto result =
810
- JSObject::GetElementAttributeFromInterceptor(object, receiver, index);
811
- if (isolate->has_scheduled_exception()) break;
812
- if (result.has_value && result.value != ABSENT) return result;
813
- where_to_start = PrototypeIterator::START_AT_PROTOTYPE;
814
- }
815
- isolate->ReportFailedAccessCheck(object, v8::ACCESS_HAS);
816
- RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Maybe<PropertyAttributes>());
817
- return maybe(ABSENT);
818
- }
819
-
820
-
821
739
MaybeHandle<Object> Object::GetElementWithReceiver(Isolate* isolate,
822
740
Handle<Object> object,
823
741
Handle<Object> receiver,
@@ -850,14 +768,14 @@ MaybeHandle<Object> Object::GetElementWithReceiver(Isolate* isolate,
850
768
// Check access rights if needed.
851
769
if (js_object->IsAccessCheckNeeded()) {
852
770
if (!isolate->MayIndexedAccess(js_object, index, v8::ACCESS_GET)) {
853
- return JSObject::GetElementWithFailedAccessCheck(isolate, js_object,
854
- receiver, index);
771
+ isolate->ReportFailedAccessCheck(js_object, v8::ACCESS_GET);
772
+ RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object);
773
+ return isolate->factory()->undefined_value();
855
774
}
856
775
}
857
776
858
777
if (js_object->HasIndexedInterceptor()) {
859
- return JSObject::GetElementWithInterceptor(js_object, receiver, index,
860
- true);
778
+ return JSObject::GetElementWithInterceptor(js_object, receiver, index);
861
779
}
862
780
863
781
if (js_object->elements() != isolate->heap()->empty_fixed_array()) {
@@ -4266,8 +4184,9 @@ Maybe<PropertyAttributes> JSObject::GetElementAttributeWithReceiver(
4266
4184
// Check access rights if needed.
4267
4185
if (object->IsAccessCheckNeeded()) {
4268
4186
if (!isolate->MayIndexedAccess(object, index, v8::ACCESS_HAS)) {
4269
- return GetElementAttributesWithFailedAccessCheck(isolate, object,
4270
- receiver, index);
4187
+ isolate->ReportFailedAccessCheck(object, v8::ACCESS_HAS);
4188
+ RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Maybe<PropertyAttributes>());
4189
+ return maybe(ABSENT);
4271
4190
}
4272
4191
}
4273
4192
@@ -13464,10 +13383,10 @@ MaybeHandle<Object> JSArray::ReadOnlyLengthError(Handle<JSArray> array) {
13464
13383
}
13465
13384
13466
13385
13467
- MaybeHandle<Object> JSObject::GetElementWithInterceptor(Handle<JSObject> object,
13468
- Handle<Object> receiver ,
13469
- uint32_t index ,
13470
- bool check_prototype ) {
13386
+ MaybeHandle<Object> JSObject::GetElementWithInterceptor(
13387
+ Handle<JSObject> object ,
13388
+ Handle<Object> receiver ,
13389
+ uint32_t index ) {
13471
13390
Isolate* isolate = object->GetIsolate();
13472
13391
13473
13392
// Make sure that the top context does not change when doing
@@ -13492,8 +13411,6 @@ MaybeHandle<Object> JSObject::GetElementWithInterceptor(Handle<JSObject> object,
13492
13411
}
13493
13412
}
13494
13413
13495
- if (!check_prototype) return MaybeHandle<Object>();
13496
-
13497
13414
ElementsAccessor* handler = object->GetElementsAccessor();
13498
13415
Handle<Object> result;
13499
13416
ASSIGN_RETURN_ON_EXCEPTION(
0 commit comments