| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index e6277060732e9d71feb9d592af657a3dff31e406..2dab6eb28e151a3955c2fa53f87016010262523e 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -2180,12 +2180,12 @@ static Object* DeclareGlobals(Isolate* isolate, Handle<GlobalObject> global,
|
| PropertyAttributes attr, bool is_var,
|
| bool is_const, bool is_function) {
|
| // Do the lookup own properties only, see ES5 erratum.
|
| - LookupIterator it(global, name, LookupIterator::HIDDEN_PROPERTY);
|
| + LookupIterator it(global, name, LookupIterator::HIDDEN_SKIP_INTERCEPTOR);
|
| Maybe<PropertyAttributes> maybe = JSReceiver::GetPropertyAttributes(&it);
|
| - DCHECK(maybe.has_value);
|
| - PropertyAttributes old_attributes = maybe.value;
|
| + if (!maybe.has_value) return isolate->heap()->exception();
|
|
|
| - if (old_attributes != ABSENT) {
|
| + if (it.IsFound()) {
|
| + PropertyAttributes old_attributes = maybe.value;
|
| // The name was declared before; check for conflicting re-declarations.
|
| if (is_const) return ThrowRedeclarationError(isolate, name);
|
|
|
| @@ -2310,7 +2310,7 @@ RUNTIME_FUNCTION(Runtime_InitializeConstGlobal) {
|
| Handle<GlobalObject> global = isolate->global_object();
|
|
|
| // Lookup the property as own on the global object.
|
| - LookupIterator it(global, name, LookupIterator::HIDDEN_PROPERTY);
|
| + LookupIterator it(global, name, LookupIterator::HIDDEN_SKIP_INTERCEPTOR);
|
| Maybe<PropertyAttributes> maybe = JSReceiver::GetPropertyAttributes(&it);
|
| DCHECK(maybe.has_value);
|
| PropertyAttributes old_attributes = maybe.value;
|
| @@ -2460,7 +2460,7 @@ RUNTIME_FUNCTION(Runtime_InitializeLegacyConstLookupSlot) {
|
| // code can run in between that modifies the declared property.
|
| DCHECK(holder->IsJSGlobalObject() || holder->IsJSContextExtensionObject());
|
|
|
| - LookupIterator it(holder, name, LookupIterator::HIDDEN_PROPERTY);
|
| + LookupIterator it(holder, name, LookupIterator::HIDDEN_SKIP_INTERCEPTOR);
|
| Maybe<PropertyAttributes> maybe = JSReceiver::GetPropertyAttributes(&it);
|
| if (!maybe.has_value) return isolate->heap()->exception();
|
| PropertyAttributes old_attributes = maybe.value;
|
| @@ -5040,14 +5040,14 @@ RUNTIME_FUNCTION(Runtime_DefineDataPropertyUnchecked) {
|
| RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0);
|
| PropertyAttributes attr = static_cast<PropertyAttributes>(unchecked);
|
|
|
| - // Check access rights if needed.
|
| - if (js_object->IsAccessCheckNeeded() &&
|
| - !isolate->MayNamedAccess(js_object, name, v8::ACCESS_SET)) {
|
| - return isolate->heap()->undefined_value();
|
| + LookupIterator it(js_object, name, LookupIterator::OWN_SKIP_INTERCEPTOR);
|
| + if (it.IsFound() && it.state() == LookupIterator::ACCESS_CHECK) {
|
| + if (!isolate->MayNamedAccess(js_object, name, v8::ACCESS_SET)) {
|
| + return isolate->heap()->undefined_value();
|
| + }
|
| + it.Next();
|
| }
|
|
|
| - LookupIterator it(js_object, name, LookupIterator::OWN_PROPERTY);
|
| -
|
| // Take special care when attributes are different and there is already
|
| // a property.
|
| if (it.IsFound() && it.HasProperty() &&
|
| @@ -5293,9 +5293,9 @@ RUNTIME_FUNCTION(Runtime_AddNamedProperty) {
|
| #ifdef DEBUG
|
| uint32_t index = 0;
|
| DCHECK(!key->ToArrayIndex(&index));
|
| - LookupIterator it(object, key, LookupIterator::OWN_PROPERTY);
|
| + LookupIterator it(object, key, LookupIterator::OWN_SKIP_INTERCEPTOR);
|
| Maybe<PropertyAttributes> maybe = JSReceiver::GetPropertyAttributes(&it);
|
| - DCHECK(maybe.has_value);
|
| + if (!maybe.has_value) return isolate->heap()->exception();
|
| RUNTIME_ASSERT(!it.IsFound());
|
| #endif
|
|
|
| @@ -5325,7 +5325,7 @@ RUNTIME_FUNCTION(Runtime_AddPropertyForTemplate) {
|
| bool duplicate;
|
| if (key->IsName()) {
|
| LookupIterator it(object, Handle<Name>::cast(key),
|
| - LookupIterator::OWN_PROPERTY);
|
| + LookupIterator::OWN_SKIP_INTERCEPTOR);
|
| Maybe<PropertyAttributes> maybe = JSReceiver::GetPropertyAttributes(&it);
|
| DCHECK(maybe.has_value);
|
| duplicate = it.IsFound();
|
|
|