Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 2526152b8903d4a3d605b663885ef7d3ef091dbd..06e4db5ff60294d01ba37742d37320d604d3f9e5 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -5792,8 +5792,7 @@ int Map::NextFreePropertyIndex() { |
} |
-void JSReceiver::LookupOwn( |
- Handle<Name> name, LookupResult* result, bool search_hidden_prototypes) { |
+void JSReceiver::LookupOwn(Handle<Name> name, LookupResult* result) { |
DisallowHeapAllocation no_gc; |
DCHECK(name->IsName()); |
@@ -5801,8 +5800,7 @@ void JSReceiver::LookupOwn( |
PrototypeIterator iter(GetIsolate(), this); |
if (iter.IsAtEnd()) return result->NotFound(); |
DCHECK(iter.GetCurrent()->IsJSGlobalObject()); |
- return JSReceiver::cast(iter.GetCurrent()) |
- ->LookupOwn(name, result, search_hidden_prototypes); |
+ return JSReceiver::cast(iter.GetCurrent())->LookupOwn(name, result); |
} |
if (IsJSProxy()) { |
@@ -5826,14 +5824,6 @@ void JSReceiver::LookupOwn( |
} |
js_object->LookupOwnRealNamedProperty(name, result); |
- if (result->IsFound() || name->IsOwn() || !search_hidden_prototypes) return; |
- |
- PrototypeIterator iter(GetIsolate(), js_object); |
- if (!iter.GetCurrent()->IsJSReceiver()) return; |
- JSReceiver* receiver = JSReceiver::cast(iter.GetCurrent()); |
- if (receiver->map()->is_hidden_prototype()) { |
- receiver->LookupOwn(name, result, search_hidden_prototypes); |
- } |
} |
@@ -5843,7 +5833,7 @@ void JSReceiver::Lookup(Handle<Name> name, LookupResult* result) { |
for (PrototypeIterator iter(GetIsolate(), this, |
PrototypeIterator::START_AT_RECEIVER); |
!iter.IsAtEnd(); iter.Advance()) { |
- JSReceiver::cast(iter.GetCurrent())->LookupOwn(name, result, false); |
+ JSReceiver::cast(iter.GetCurrent())->LookupOwn(name, result); |
if (result->IsFound()) return; |
if (name->IsOwn()) { |
result->NotFound(); |
@@ -6369,12 +6359,13 @@ MaybeHandle<Object> JSObject::DefineAccessor(Handle<JSObject> object, |
Object::GetElement(isolate, object, index).ToHandleChecked(); |
} |
} else { |
- LookupResult lookup(isolate); |
- object->LookupOwn(name, &lookup, true); |
- preexists = lookup.IsProperty(); |
- if (preexists && lookup.IsDataProperty()) { |
- old_value = |
- Object::GetPropertyOrElement(object, name).ToHandleChecked(); |
+ LookupIterator it(object, name, |
+ LookupIterator::CHECK_HIDDEN_SKIP_INTERCEPTOR); |
+ CHECK(GetPropertyAttributes(&it).has_value); |
+ preexists = it.IsFound(); |
+ if (preexists && (it.property_kind() == LookupIterator::DATA || |
+ it.GetAccessors()->IsAccessorInfo())) { |
+ old_value = GetProperty(&it).ToHandleChecked(); |
} |
} |
} |
@@ -6564,11 +6555,12 @@ MaybeHandle<Object> JSObject::SetAccessor(Handle<JSObject> object, |
SetElementCallback(object, index, info, info->property_attributes()); |
} else { |
// Lookup the name. |
- LookupResult result(isolate); |
- object->LookupOwn(name, &result, true); |
+ LookupIterator it(object, name, |
+ LookupIterator::CHECK_HIDDEN_SKIP_INTERCEPTOR); |
+ CHECK(GetPropertyAttributes(&it).has_value); |
// ES5 forbids turning a property into an accessor if it's not |
- // configurable (that is IsDontDelete in ES3 and v8), see 8.6.1 (Table 5). |
- if (result.IsFound() && (result.IsReadOnly() || result.IsDontDelete())) { |
+ // configurable. See 8.6.1 (Table 5). |
+ if (it.IsFound() && (it.IsReadOnly() || !it.IsConfigurable())) { |
return factory->undefined_value(); |
} |