| Index: src/objects.cc | 
| diff --git a/src/objects.cc b/src/objects.cc | 
| index 5a1671a320419c767b2a875d2e7311b7a658d4b1..fbef78280cc382aa1b54f4bf7d526fb740827018 100644 | 
| --- a/src/objects.cc | 
| +++ b/src/objects.cc | 
| @@ -7430,23 +7430,20 @@ void Map::ClearNonLiveTransitions(Heap* heap) { | 
| if (d->IsEmpty()) return; | 
| Smi* NullDescriptorDetails = | 
| PropertyDetails(NONE, NULL_DESCRIPTOR).AsSmi(); | 
| -  FixedArray* contents = FixedArray::cast( | 
| -      d->get(DescriptorArray::kContentArrayIndex)); | 
| -  ASSERT(contents->length() >= 2); | 
| -  for (int i = 0; i < contents->length(); i += 2) { | 
| +  for (int i = 0; i < d->number_of_descriptors(); ++i) { | 
| // If the pair (value, details) is a map transition, check if the target is | 
| // live. If not, null the descriptor. Also drop the back pointer for that | 
| // map transition, so that this map is not reached again by following a back | 
| // pointer from that non-live map. | 
| bool keep_entry = false; | 
| -    PropertyDetails details(Smi::cast(contents->get(i + 1))); | 
| +    PropertyDetails details(d->GetDetails(i)); | 
| switch (details.type()) { | 
| case MAP_TRANSITION: | 
| case CONSTANT_TRANSITION: | 
| -        ClearBackPointer(heap, contents->get(i), &keep_entry); | 
| +        ClearBackPointer(heap, d->GetValue(i), &keep_entry); | 
| break; | 
| case ELEMENTS_TRANSITION: { | 
| -        Object* object = contents->get(i); | 
| +        Object* object = d->GetValue(i); | 
| if (object->IsMap()) { | 
| ClearBackPointer(heap, object, &keep_entry); | 
| } else { | 
| @@ -7460,7 +7457,7 @@ void Map::ClearNonLiveTransitions(Heap* heap) { | 
| break; | 
| } | 
| case CALLBACKS: { | 
| -        Object* object = contents->get(i); | 
| +        Object* object = d->GetValue(i); | 
| if (object->IsAccessorPair()) { | 
| AccessorPair* accessors = AccessorPair::cast(object); | 
| if (ClearBackPointer(heap, accessors->getter(), &keep_entry)) { | 
| @@ -7487,8 +7484,8 @@ void Map::ClearNonLiveTransitions(Heap* heap) { | 
| // What we *really* want to do here is removing this entry completely, but | 
| // for technical reasons we can't do this, so we zero it out instead. | 
| if (!keep_entry) { | 
| -      contents->set_unchecked(i + 1, NullDescriptorDetails); | 
| -      contents->set_null_unchecked(heap, i); | 
| +      d->SetDetailsUnchecked(i, NullDescriptorDetails); | 
| +      d->SetNullValueUnchecked(i, heap); | 
| } | 
| } | 
| } | 
|  |