| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index d2943f9f6dfed04b0b1b5e6ca86bdd56d4273f5a..459ce51d593a3584a7af329a27cd21459f3f4b0b 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -144,7 +144,8 @@ MaybeHandle<Object> Object::GetProperty(LookupIterator* it) {
|
|
|
| Handle<Object> JSObject::GetDataProperty(Handle<JSObject> object,
|
| Handle<Name> key) {
|
| - LookupIterator it(object, key, LookupIterator::PROTOTYPE_CHAIN_PROPERTY);
|
| + LookupIterator it(object, key,
|
| + LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR);
|
| return GetDataProperty(&it);
|
| }
|
|
|
| @@ -152,11 +153,13 @@ Handle<Object> JSObject::GetDataProperty(Handle<JSObject> object,
|
| Handle<Object> JSObject::GetDataProperty(LookupIterator* it) {
|
| for (; it->IsFound(); it->Next()) {
|
| switch (it->state()) {
|
| - case LookupIterator::ACCESS_CHECK:
|
| case LookupIterator::INTERCEPTOR:
|
| case LookupIterator::NOT_FOUND:
|
| case LookupIterator::TRANSITION:
|
| UNREACHABLE();
|
| + case LookupIterator::ACCESS_CHECK:
|
| + if (it->HasAccess(v8::ACCESS_GET)) continue;
|
| + // Fall through.
|
| case LookupIterator::JSPROXY:
|
| it->NotFound();
|
| return it->isolate()->factory()->undefined_value();
|
| @@ -3787,7 +3790,8 @@ void JSObject::WriteToField(int descriptor, Object* value) {
|
| void JSObject::AddProperty(Handle<JSObject> object, Handle<Name> name,
|
| Handle<Object> value,
|
| PropertyAttributes attributes) {
|
| - LookupIterator it(object, name, LookupIterator::OWN_PROPERTY);
|
| + LookupIterator it(object, name, LookupIterator::OWN_SKIP_INTERCEPTOR);
|
| + CHECK_NE(LookupIterator::ACCESS_CHECK, it.state());
|
| #ifdef DEBUG
|
| uint32_t index;
|
| DCHECK(!object->IsJSProxy());
|
| @@ -4687,11 +4691,9 @@ void JSObject::DeleteHiddenProperty(Handle<JSObject> object, Handle<Name> key) {
|
|
|
| bool JSObject::HasHiddenProperties(Handle<JSObject> object) {
|
| Handle<Name> hidden = object->GetIsolate()->factory()->hidden_string();
|
| - LookupIterator it(object, hidden, LookupIterator::OWN_PROPERTY);
|
| - Maybe<PropertyAttributes> maybe = GetPropertyAttributes(&it);
|
| - // Cannot get an exception since the hidden_string isn't accessible to JS.
|
| - DCHECK(maybe.has_value);
|
| - return maybe.value != ABSENT;
|
| + LookupIterator it(object, hidden, LookupIterator::OWN_SKIP_INTERCEPTOR);
|
| + CHECK_NE(LookupIterator::ACCESS_CHECK, it.state());
|
| + return it.IsFound() && it.HasProperty();
|
| }
|
|
|
|
|
| @@ -4722,7 +4724,8 @@ Object* JSObject::GetHiddenPropertiesHashTable() {
|
| } else {
|
| Isolate* isolate = GetIsolate();
|
| LookupIterator it(handle(this), isolate->factory()->hidden_string(),
|
| - LookupIterator::OWN_PROPERTY);
|
| + LookupIterator::OWN_SKIP_INTERCEPTOR);
|
| + CHECK_NE(LookupIterator::ACCESS_CHECK, it.state());
|
| if (it.IsFound() && it.HasProperty()) {
|
| DCHECK_EQ(LookupIterator::DATA, it.property_kind());
|
| return *it.GetDataValue();
|
| @@ -6163,7 +6166,8 @@ MaybeHandle<Object> JSObject::DefineAccessor(Handle<JSObject> object,
|
| setter->IsNull());
|
| // At least one of the accessors needs to be a new value.
|
| DCHECK(!getter->IsNull() || !setter->IsNull());
|
| - LookupIterator it(object, name, LookupIterator::OWN_PROPERTY);
|
| + LookupIterator it(object, name, LookupIterator::OWN_SKIP_INTERCEPTOR);
|
| + CHECK_NE(LookupIterator::ACCESS_CHECK, it.state());
|
| if (!getter->IsNull()) {
|
| it.TransitionToAccessorProperty(ACCESSOR_GETTER, getter, attributes);
|
| }
|
| @@ -12843,7 +12847,8 @@ bool JSArray::WouldChangeReadOnlyLength(Handle<JSArray> array,
|
| CHECK(array->length()->ToArrayIndex(&length));
|
| if (length <= index) {
|
| LookupIterator it(array, array->GetIsolate()->factory()->length_string(),
|
| - LookupIterator::OWN_PROPERTY);
|
| + LookupIterator::OWN_SKIP_INTERCEPTOR);
|
| + CHECK_NE(LookupIterator::ACCESS_CHECK, it.state());
|
| CHECK(it.IsFound());
|
| CHECK(it.HasProperty());
|
| return it.IsReadOnly();
|
|
|