| Index: src/objects.h
 | 
| diff --git a/src/objects.h b/src/objects.h
 | 
| index c479a14aa07eec86c620b40fdfef1f4229aa35f4..e9cbb9cd51cf9fc55a501bb908a26d429d6b1c3f 100644
 | 
| --- a/src/objects.h
 | 
| +++ b/src/objects.h
 | 
| @@ -4806,6 +4806,7 @@ class Map: public HeapObject {
 | 
|    inline Object* GetBackPointer();
 | 
|    inline void SetBackPointer(Object* value,
 | 
|                               WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
 | 
| +  inline void init_back_pointer(Object* undefined);
 | 
|  
 | 
|    // [prototype transitions]: cache of prototype transitions.
 | 
|    // Prototype transition is a transition that happens
 | 
| @@ -4815,27 +4816,29 @@ class Map: public HeapObject {
 | 
|    //    1: back pointer that overlaps with prototype transitions field.
 | 
|    //    2 + 2 * i: prototype
 | 
|    //    3 + 2 * i: target map
 | 
| -  DECL_ACCESSORS(prototype_transitions, FixedArray)
 | 
| +  inline FixedArray* GetPrototypeTransitions();
 | 
| +  MUST_USE_RESULT inline MaybeObject* SetPrototypeTransitions(
 | 
| +      FixedArray* prototype_transitions);
 | 
| +  inline bool HasPrototypeTransitions();
 | 
|  
 | 
| -  inline void init_prototype_transitions(Object* undefined);
 | 
| -  inline HeapObject* unchecked_prototype_transitions();
 | 
| +  inline HeapObject* UncheckedPrototypeTransitions();
 | 
| +  inline TransitionArray* unchecked_transition_array();
 | 
|  
 | 
| -  static const int kProtoTransitionHeaderSize = 2;
 | 
| +  static const int kProtoTransitionHeaderSize = 1;
 | 
|    static const int kProtoTransitionNumberOfEntriesOffset = 0;
 | 
| -  static const int kProtoTransitionBackPointerOffset = 1;
 | 
|    static const int kProtoTransitionElementsPerEntry = 2;
 | 
|    static const int kProtoTransitionPrototypeOffset = 0;
 | 
|    static const int kProtoTransitionMapOffset = 1;
 | 
|  
 | 
|    inline int NumberOfProtoTransitions() {
 | 
| -    FixedArray* cache = prototype_transitions();
 | 
| +    FixedArray* cache = GetPrototypeTransitions();
 | 
|      if (cache->length() == 0) return 0;
 | 
|      return
 | 
|          Smi::cast(cache->get(kProtoTransitionNumberOfEntriesOffset))->value();
 | 
|    }
 | 
|  
 | 
|    inline void SetNumberOfProtoTransitions(int value) {
 | 
| -    FixedArray* cache = prototype_transitions();
 | 
| +    FixedArray* cache = GetPrototypeTransitions();
 | 
|      ASSERT(cache->length() != 0);
 | 
|      cache->set_unchecked(kProtoTransitionNumberOfEntriesOffset,
 | 
|                           Smi::FromInt(value));
 | 
| @@ -4995,17 +4998,14 @@ class Map: public HeapObject {
 | 
|        kConstructorOffset + kPointerSize;
 | 
|    static const int kCodeCacheOffset =
 | 
|        kInstanceDescriptorsOrBitField3Offset + kPointerSize;
 | 
| -  static const int kPrototypeTransitionsOrBackPointerOffset =
 | 
| -      kCodeCacheOffset + kPointerSize;
 | 
| -  static const int kPadStart =
 | 
| -      kPrototypeTransitionsOrBackPointerOffset + kPointerSize;
 | 
| +  static const int kBackPointerOffset = kCodeCacheOffset + kPointerSize;
 | 
| +  static const int kPadStart = kBackPointerOffset + kPointerSize;
 | 
|    static const int kSize = MAP_POINTER_ALIGN(kPadStart);
 | 
|  
 | 
|    // Layout of pointer fields. Heap iteration code relies on them
 | 
|    // being continuously allocated.
 | 
|    static const int kPointerFieldsBeginOffset = Map::kPrototypeOffset;
 | 
| -  static const int kPointerFieldsEndOffset =
 | 
| -      kPrototypeTransitionsOrBackPointerOffset + kPointerSize;
 | 
| +  static const int kPointerFieldsEndOffset = kBackPointerOffset + kPointerSize;
 | 
|  
 | 
|    // Byte offsets within kInstanceSizesOffset.
 | 
|    static const int kInstanceSizeOffset = kInstanceSizesOffset + 0;
 | 
| 
 |