| Index: src/transitions.cc
 | 
| diff --git a/src/transitions.cc b/src/transitions.cc
 | 
| index 51eee6f980b705915279e5a1220fb74c72612635..ec1b7f4fc991f4d91ac2ce1c9fc04af7d24cd6e1 100644
 | 
| --- a/src/transitions.cc
 | 
| +++ b/src/transitions.cc
 | 
| @@ -48,7 +48,7 @@ Handle<TransitionArray> TransitionArray::NewWith(Handle<Map> map,
 | 
|    Handle<TransitionArray> result;
 | 
|    Isolate* isolate = name->GetIsolate();
 | 
|  
 | 
| -  if (flag == SIMPLE_PROPERTY_TRANSITION) {
 | 
| +  if (flag == SIMPLE_TRANSITION) {
 | 
|      result = AllocateSimple(isolate, target);
 | 
|    } else {
 | 
|      result = Allocate(isolate, 1);
 | 
| @@ -94,19 +94,9 @@ Handle<TransitionArray> TransitionArray::Insert(Handle<Map> map,
 | 
|    int number_of_transitions = map->transitions()->number_of_transitions();
 | 
|    int new_nof = number_of_transitions;
 | 
|  
 | 
| -  bool is_special_transition = flag == SPECIAL_TRANSITION;
 | 
| -  DCHECK_EQ(is_special_transition, IsSpecialTransition(*name));
 | 
| -  PropertyDetails details = is_special_transition
 | 
| -                                ? PropertyDetails(NONE, NORMAL, 0)
 | 
| -                                : GetTargetDetails(*name, *target);
 | 
| -
 | 
|    int insertion_index = kNotFound;
 | 
| -  int index =
 | 
| -      is_special_transition
 | 
| -          ? map->transitions()->SearchSpecial(Symbol::cast(*name),
 | 
| -                                              &insertion_index)
 | 
| -          : map->transitions()->Search(details.type(), *name,
 | 
| -                                       details.attributes(), &insertion_index);
 | 
| +  int index = map->transitions()->Search(*name, &insertion_index);
 | 
| +
 | 
|    if (index == kNotFound) {
 | 
|      ++new_nof;
 | 
|    } else {
 | 
| @@ -128,12 +118,12 @@ Handle<TransitionArray> TransitionArray::Insert(Handle<Map> map,
 | 
|      array->SetNumberOfTransitions(new_nof);
 | 
|      for (index = number_of_transitions; index > insertion_index; --index) {
 | 
|        Name* key = array->GetKey(index - 1);
 | 
| +      DCHECK(key->Hash() > name->Hash());
 | 
|        array->SetKey(index, key);
 | 
|        array->SetTarget(index, array->GetTarget(index - 1));
 | 
|      }
 | 
|      array->SetKey(index, *name);
 | 
|      array->SetTarget(index, *target);
 | 
| -    SLOW_DCHECK(array->IsSortedNoDuplicates());
 | 
|      return handle(array);
 | 
|    }
 | 
|  
 | 
| @@ -154,11 +144,7 @@ Handle<TransitionArray> TransitionArray::Insert(Handle<Map> map,
 | 
|      new_nof = number_of_transitions;
 | 
|  
 | 
|      insertion_index = kNotFound;
 | 
| -    index = is_special_transition ? map->transitions()->SearchSpecial(
 | 
| -                                        Symbol::cast(*name), &insertion_index)
 | 
| -                                  : map->transitions()->Search(
 | 
| -                                        details.type(), *name,
 | 
| -                                        details.attributes(), &insertion_index);
 | 
| +    index = array->Search(*name, &insertion_index);
 | 
|      if (index == kNotFound) {
 | 
|        ++new_nof;
 | 
|      } else {
 | 
| @@ -184,46 +170,8 @@ Handle<TransitionArray> TransitionArray::Insert(Handle<Map> map,
 | 
|    }
 | 
|  
 | 
|    result->set_back_pointer_storage(array->back_pointer_storage());
 | 
| -  SLOW_DCHECK(result->IsSortedNoDuplicates());
 | 
|    return result;
 | 
|  }
 | 
|  
 | 
|  
 | 
| -int TransitionArray::SearchDetails(int transition, PropertyType type,
 | 
| -                                   PropertyAttributes attributes,
 | 
| -                                   int* out_insertion_index) {
 | 
| -  int nof_transitions = number_of_transitions();
 | 
| -  DCHECK(transition < nof_transitions);
 | 
| -  Name* key = GetKey(transition);
 | 
| -  bool is_data = type == FIELD || type == CONSTANT;
 | 
| -  for (; transition < nof_transitions && GetKey(transition) == key;
 | 
| -       transition++) {
 | 
| -    Map* target = GetTarget(transition);
 | 
| -    PropertyDetails target_details = GetTargetDetails(key, target);
 | 
| -
 | 
| -    bool target_is_data =
 | 
| -        target_details.type() == FIELD || target_details.type() == CONSTANT;
 | 
| -
 | 
| -    int cmp = CompareDetails(is_data, attributes, target_is_data,
 | 
| -                             target_details.attributes());
 | 
| -    if (cmp == 0) {
 | 
| -      return transition;
 | 
| -    } else if (cmp < 0) {
 | 
| -      break;
 | 
| -    }
 | 
| -  }
 | 
| -  if (out_insertion_index != NULL) *out_insertion_index = transition;
 | 
| -  return kNotFound;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -int TransitionArray::Search(PropertyType type, Name* name,
 | 
| -                            PropertyAttributes attributes,
 | 
| -                            int* out_insertion_index) {
 | 
| -  int transition = SearchName(name, out_insertion_index);
 | 
| -  if (transition == kNotFound) {
 | 
| -    return kNotFound;
 | 
| -  }
 | 
| -  return SearchDetails(transition, type, attributes, out_insertion_index);
 | 
| -}
 | 
|  } }  // namespace v8::internal
 | 
| 
 |