| 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);
|
|
|