Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index e83a32d059d19ee30bbf1a0e4fa27b21ec739452..f45945b4b777767f6d57a9ff4b7e88e13c580a79 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -1824,15 +1824,18 @@ MaybeObject* JSObject::AddFastProperty(Name* name, |
Heap* heap = isolate->heap(); |
- Map* new_map; |
- MaybeObject* maybe_new_map = map()->CopyAddDescriptor(&new_field, flag); |
- if (!maybe_new_map->To(&new_map)) return maybe_new_map; |
- |
Object* storage; |
MaybeObject* maybe_storage = |
value->AllocateNewStorageFor(heap, representation); |
if (!maybe_storage->To(&storage)) return maybe_storage; |
+ // Note that Map::CopyAddDescriptor has side-effects, the new map is already |
+ // inserted in the transition tree. No more allocations that might fail are |
+ // allowed after this point. |
+ Map* new_map; |
+ MaybeObject* maybe_new_map = map()->CopyAddDescriptor(&new_field, flag); |
+ if (!maybe_new_map->To(&new_map)) return maybe_new_map; |
+ |
if (map()->unused_property_fields() == 0) { |
ASSERT(values != NULL); |
set_properties(values); |