| Index: src/transitions.h
 | 
| diff --git a/src/transitions.h b/src/transitions.h
 | 
| index c5f9a30018a16cf02006c49a9cedb644ac3e7986..ef74b4df8bb84039fae8291c3d3fffc66ab15a2c 100644
 | 
| --- a/src/transitions.h
 | 
| +++ b/src/transitions.h
 | 
| @@ -98,9 +98,17 @@ class TransitionArray: public FixedArray {
 | 
|    static Handle<TransitionArray> Insert(Handle<Map> map, Handle<Name> name,
 | 
|                                          Handle<Map> target,
 | 
|                                          SimpleTransitionFlag flag);
 | 
| +  // Search a  transition for a given type, property name and attributes.
 | 
| +  int Search(PropertyType type, Name* name, PropertyAttributes attributes,
 | 
| +             int* out_insertion_index = NULL);
 | 
| +
 | 
| +  // Search a non-property transition (like elements kind, observe or frozen
 | 
| +  // transitions).
 | 
| +  inline int SearchSpecial(Symbol* symbol, int* out_insertion_index = NULL) {
 | 
| +    return SearchName(symbol, out_insertion_index);
 | 
| +  }
 | 
|  
 | 
| -  // Search a transition for a given property name.
 | 
| -  inline int Search(Name* name, int* out_insertion_index = NULL);
 | 
| +  static inline PropertyDetails GetTargetDetails(Name* name, Map* target);
 | 
|  
 | 
|    // Allocates a TransitionArray.
 | 
|    static Handle<TransitionArray> Allocate(Isolate* isolate,
 | 
| @@ -167,6 +175,10 @@ class TransitionArray: public FixedArray {
 | 
|    bool IsSortedNoDuplicates(int valid_entries = -1);
 | 
|    bool IsConsistentWithBackPointers(Map* current_map);
 | 
|    bool IsEqualTo(TransitionArray* other);
 | 
| +
 | 
| +  // Returns true for a non-property transitions like elements kind, observed
 | 
| +  // or frozen transitions.
 | 
| +  static inline bool IsSpecialTransition(Name* name);
 | 
|  #endif
 | 
|  
 | 
|    // The maximum number of transitions we want in a transition array (should
 | 
| @@ -202,6 +214,31 @@ class TransitionArray: public FixedArray {
 | 
|                                           Handle<Map> target,
 | 
|                                           SimpleTransitionFlag flag);
 | 
|  
 | 
| +  // Search a first transition for a given property name.
 | 
| +  inline int SearchName(Name* name, int* out_insertion_index = NULL);
 | 
| +  int SearchDetails(int transition, PropertyType type,
 | 
| +                    PropertyAttributes attributes, int* out_insertion_index);
 | 
| +
 | 
| +  // Compares two tuples <key, is_data_property, attributes>, returns -1 if
 | 
| +  // tuple1 is "less" than tuple2, 0 if tuple1 equal to tuple2 and 1 otherwise.
 | 
| +  static inline int CompareKeys(Name* key1, uint32_t hash1,
 | 
| +                                bool is_data_property1,
 | 
| +                                PropertyAttributes attributes1, Name* key2,
 | 
| +                                uint32_t hash2, bool is_data_property2,
 | 
| +                                PropertyAttributes attributes2);
 | 
| +
 | 
| +  // Compares keys, returns -1 if key1 is "less" than key2,
 | 
| +  // 0 if key1 equal to key2 and 1 otherwise.
 | 
| +  static inline int CompareNames(Name* key1, uint32_t hash1, Name* key2,
 | 
| +                                 uint32_t hash2);
 | 
| +
 | 
| +  // Compares two details, returns -1 if details1 is "less" than details2,
 | 
| +  // 0 if details1 equal to details2 and 1 otherwise.
 | 
| +  static inline int CompareDetails(bool is_data_property1,
 | 
| +                                   PropertyAttributes attributes1,
 | 
| +                                   bool is_data_property2,
 | 
| +                                   PropertyAttributes attributes2);
 | 
| +
 | 
|    inline void NoIncrementalWriteBarrierSet(int transition_number,
 | 
|                                             Name* key,
 | 
|                                             Map* target);
 | 
| 
 |