| 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
|
|
|