Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 719aa9d754c64798c6029878b9eecfb1255950d8..24b54c0d4a3710160d5cde7b57d2bb9a732c2a86 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -5145,14 +5145,13 @@ MaybeHandle<Object> JSObject::DeletePropertyWithInterceptor( |
void JSObject::DeleteNormalizedProperty(Handle<JSObject> object, |
- Handle<Name> name) { |
+ Handle<Name> name, int entry) { |
DCHECK(!object->HasFastProperties()); |
Isolate* isolate = object->GetIsolate(); |
if (object->IsGlobalObject()) { |
// If we have a global object, invalidate the cell and swap in a new one. |
Handle<GlobalDictionary> dictionary(object->global_dictionary()); |
- int entry = dictionary->FindEntry(name); |
DCHECK_NE(GlobalDictionary::kNotFound, entry); |
auto cell = PropertyCell::InvalidateEntry(dictionary, entry); |
@@ -5162,7 +5161,6 @@ void JSObject::DeleteNormalizedProperty(Handle<JSObject> object, |
cell->property_details().set_cell_type(PropertyCellType::kInvalidated)); |
} else { |
Handle<NameDictionary> dictionary(object->property_dictionary()); |
- int entry = dictionary->FindEntry(name); |
DCHECK_NE(NameDictionary::kNotFound, entry); |
NameDictionary::DeleteProperty(dictionary, entry); |
@@ -5221,16 +5219,12 @@ MaybeHandle<Object> JSReceiver::DeleteProperty(LookupIterator* it, |
if (!it->IsConfigurable() || receiver->map()->is_strong()) { |
// Fail if the property is not configurable, or on a strong object. |
if (is_strict(language_mode)) { |
- if (receiver->map()->is_strong()) { |
- THROW_NEW_ERROR( |
- isolate, NewTypeError(MessageTemplate::kStrongDeleteProperty, |
- receiver, it->GetName()), |
- Object); |
- } |
- THROW_NEW_ERROR(isolate, |
- NewTypeError(MessageTemplate::kStrictDeleteProperty, |
- it->GetName(), receiver), |
- Object); |
+ MessageTemplate::Template templ = |
+ receiver->map()->is_strong() |
+ ? MessageTemplate::kStrongDeleteProperty |
+ : MessageTemplate::kStrictDeleteProperty; |
+ THROW_NEW_ERROR( |
+ isolate, NewTypeError(templ, it->GetName(), receiver), Object); |
} |
return it->factory()->false_value(); |
} |
@@ -5243,18 +5237,7 @@ MaybeHandle<Object> JSReceiver::DeleteProperty(LookupIterator* it, |
return it->factory()->true_value(); |
} |
- if (it->IsElement()) { |
- ElementsAccessor* accessor = holder->GetElementsAccessor(); |
- accessor->Delete(holder, it->index(), language_mode); |
- } else { |
- PropertyNormalizationMode mode = holder->map()->is_prototype_map() |
- ? KEEP_INOBJECT_PROPERTIES |
- : CLEAR_INOBJECT_PROPERTIES; |
- |
- JSObject::NormalizeProperties(holder, mode, 0, "DeletingProperty"); |
- JSObject::DeleteNormalizedProperty(holder, it->name()); |
- JSObject::ReoptimizeIfPrototype(holder); |
- } |
+ it->Delete(); |
if (is_observed) { |
RETURN_ON_EXCEPTION(isolate, |