Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 1e5315b978e67fb8e9314cd993a5184f60ff3269..a010035e0cfc06e7e1a5cd36fd7832259242b914 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -6053,6 +6053,11 @@ bool JSReceiver::OrdinaryDefineOwnProperty(LookupIterator* it, |
isolate->has_pending_exception()) { |
return false; |
} |
+ // TODO(jkummerow/verwaest): It would be nice if we didn't have to reset |
+ // the iterator every time. Currently, the reasons why we need it are: |
+ // - handle interceptors correctly |
+ // - handle accessors correctly (which might change the holder's map) |
+ it->Restart(); |
// 3. Let extensible be the value of the [[Extensible]] internal slot of O. |
Handle<JSObject> object = Handle<JSObject>::cast(it->GetReceiver()); |
bool extensible = JSObject::IsExtensible(object); |
@@ -6074,13 +6079,6 @@ bool JSReceiver::OrdinaryDefineOwnProperty(LookupIterator* it, |
} |
return false; |
} |
- // We have to reset the LookupIterator to handle interceptors properly. |
- Map* map = Handle<HeapObject>::cast(object)->map(); |
- if ((it->IsElement() && map->has_indexed_interceptor()) || |
- (!it->IsElement() && map->has_named_interceptor())) { |
- it->Restart(); |
- } |
- |
// 2c. If IsGenericDescriptor(Desc) or IsDataDescriptor(Desc) is true, then: |
// (This is equivalent to !IsAccessorDescriptor(desc).) |
DCHECK((desc_is_generic_descriptor || desc_is_data_descriptor) == |