| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 56e8ada4afd3b1c172ce9b6d59b079154912b418..368123e5e68b54d0ed77b92ea0bbcf097485caa2 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -3399,9 +3399,7 @@ MaybeObject* JSObject::NormalizeProperties(PropertyNormalizationMode mode,
|
| -instance_size_delta);
|
| }
|
|
|
| -
|
| set_map(new_map);
|
| - new_map->clear_instance_descriptors();
|
|
|
| set_properties(dictionary);
|
|
|
| @@ -4915,12 +4913,7 @@ MaybeObject* Map::CopyDropDescriptors() {
|
| }
|
| Map::cast(result)->set_prototype(prototype());
|
| Map::cast(result)->set_constructor(constructor());
|
| - // Don't copy descriptors, so map transitions always remain a forest.
|
| - // If we retained the same descriptors we would have two maps
|
| - // pointing to the same transition which is bad because the garbage
|
| - // collector relies on being able to reverse pointers from transitions
|
| - // to maps. If properties need to be retained use CopyDropTransitions.
|
| - Map::cast(result)->clear_instance_descriptors();
|
| +
|
| // Please note instance_type and instance_size are set when allocated.
|
| Map::cast(result)->set_inobject_properties(inobject_properties());
|
| Map::cast(result)->set_unused_property_fields(unused_property_fields());
|
| @@ -5812,7 +5805,6 @@ MaybeObject* DescriptorArray::Allocate(int number_of_descriptors,
|
| if (!maybe_array->To(&result)) return maybe_array;
|
| }
|
|
|
| - result->set(kBitField3StorageIndex, Smi::FromInt(0));
|
| result->set(kEnumerationIndexIndex,
|
| Smi::FromInt(PropertyDetails::kInitialIndex));
|
| result->set(kTransitionsIndex, Smi::FromInt(0));
|
| @@ -7400,7 +7392,7 @@ void Map::ClearNonLiveTransitions(Heap* heap) {
|
| if (transition_index == 0 &&
|
| !t->HasElementsTransition() &&
|
| !t->HasPrototypeTransitions()) {
|
| - return ClearTransitions();
|
| + return ClearTransitions(heap);
|
| }
|
|
|
| int trim = t->number_of_transitions() - transition_index;
|
|
|