Index: src/lookup.cc |
diff --git a/src/lookup.cc b/src/lookup.cc |
index 716622b475de66d098dfa587ad8b467f47d01f6d..1b2d35e335344275c534bbe8a4a371edb0452552 100644 |
--- a/src/lookup.cc |
+++ b/src/lookup.cc |
@@ -228,6 +228,28 @@ void LookupIterator::ApplyTransitionToDataProperty() { |
} |
+void LookupIterator::Delete() { |
+ Handle<JSObject> holder = Handle<JSObject>::cast(holder_); |
+ if (IsElement()) { |
+ ElementsAccessor* accessor = holder->GetElementsAccessor(); |
+ accessor->Delete(holder, number_); |
+ } else { |
+ PropertyNormalizationMode mode = holder->map()->is_prototype_map() |
+ ? KEEP_INOBJECT_PROPERTIES |
+ : CLEAR_INOBJECT_PROPERTIES; |
+ |
+ if (holder->HasFastProperties()) { |
+ JSObject::NormalizeProperties(holder, mode, 0, "DeletingProperty"); |
+ holder_map_ = handle(holder->map(), isolate_); |
+ ReloadPropertyInformation(); |
+ } |
+ // TODO(verwaest): Get rid of the name_ argument. |
+ JSObject::DeleteNormalizedProperty(holder, name_, number_); |
+ JSObject::ReoptimizeIfPrototype(holder); |
Igor Sheludko
2015/07/03 15:09:02
Shouldn't you call NotFound() here?
|
+ } |
+} |
+ |
+ |
void LookupIterator::TransitionToAccessorProperty( |
AccessorComponent component, Handle<Object> accessor, |
PropertyAttributes attributes) { |