Index: src/transitions.cc |
diff --git a/src/transitions.cc b/src/transitions.cc |
index c39534bbb566a2930934d2a56482517a2d18e1c6..d646eb80c888f287b42ec346ccc9585c22a4b622 100644 |
--- a/src/transitions.cc |
+++ b/src/transitions.cc |
@@ -17,11 +17,11 @@ void TransitionArray::Insert(Handle<Map> map, Handle<Name> name, |
Handle<Map> target, SimpleTransitionFlag flag) { |
Isolate* isolate = map->GetIsolate(); |
target->SetBackPointer(*map); |
+ Handle<WeakCell> cell = Map::WeakCellForMap(target); |
// If the map doesn't have any transitions at all yet, install the new one. |
if (CanStoreSimpleTransition(map->raw_transitions())) { |
if (flag == SIMPLE_PROPERTY_TRANSITION) { |
- Handle<WeakCell> cell = Map::WeakCellForMap(target); |
ReplaceTransitions(map, *cell); |
return; |
} |
@@ -42,7 +42,6 @@ void TransitionArray::Insert(Handle<Map> map, Handle<Name> name, |
if (flag == SIMPLE_PROPERTY_TRANSITION && key->Equals(*name) && |
old_details.kind() == new_details.kind() && |
old_details.attributes() == new_details.attributes()) { |
- Handle<WeakCell> cell = Map::WeakCellForMap(target); |
ReplaceTransitions(map, *cell); |
return; |
} |
@@ -51,8 +50,8 @@ void TransitionArray::Insert(Handle<Map> map, Handle<Name> name, |
// Re-read existing data; the allocation might have caused it to be cleared. |
if (IsSimpleTransition(map->raw_transitions())) { |
old_target = GetSimpleTransition(map->raw_transitions()); |
- result->NoIncrementalWriteBarrierSet( |
- 0, GetSimpleTransitionKey(old_target), old_target); |
+ result->Set(0, GetSimpleTransitionKey(old_target), |
+ GetSimpleTransitionCell(map->raw_transitions())); |
} else { |
result->SetNumberOfTransitions(0); |
} |
@@ -83,7 +82,7 @@ void TransitionArray::Insert(Handle<Map> map, Handle<Name> name, |
&insertion_index); |
// If an existing entry was found, overwrite it and return. |
if (index != kNotFound) { |
- array->SetTarget(index, *target); |
+ array->SetTargetCell(index, *cell); |
return; |
} |
@@ -96,10 +95,10 @@ void TransitionArray::Insert(Handle<Map> map, Handle<Name> name, |
array->SetNumberOfTransitions(new_nof); |
for (index = number_of_transitions; index > insertion_index; --index) { |
array->SetKey(index, array->GetKey(index - 1)); |
- array->SetTarget(index, array->GetTarget(index - 1)); |
+ array->SetTargetCell(index, array->GetTargetCell(index - 1)); |
} |
array->SetKey(index, *name); |
- array->SetTarget(index, *target); |
+ array->SetTargetCell(index, *cell); |
SLOW_DCHECK(array->IsSortedNoDuplicates()); |
return; |
} |
@@ -145,11 +144,11 @@ void TransitionArray::Insert(Handle<Map> map, Handle<Name> name, |
DCHECK_NE(kNotFound, insertion_index); |
for (int i = 0; i < insertion_index; ++i) { |
- result->NoIncrementalWriteBarrierCopyFrom(array, i, i); |
+ result->CopyFrom(array, i, i); |
} |
- result->NoIncrementalWriteBarrierSet(insertion_index, *name, *target); |
+ result->Set(insertion_index, *name, *cell); |
for (int i = insertion_index; i < number_of_transitions; ++i) { |
- result->NoIncrementalWriteBarrierCopyFrom(array, i, i + 1); |
+ result->CopyFrom(array, i, i + 1); |
} |
SLOW_DCHECK(result->IsSortedNoDuplicates()); |
@@ -349,12 +348,10 @@ Handle<TransitionArray> TransitionArray::Allocate(Isolate* isolate, |
} |
-void TransitionArray::NoIncrementalWriteBarrierCopyFrom(TransitionArray* origin, |
- int origin_transition, |
- int target_transition) { |
- NoIncrementalWriteBarrierSet(target_transition, |
- origin->GetKey(origin_transition), |
- origin->GetTarget(origin_transition)); |
+void TransitionArray::CopyFrom(TransitionArray* origin, int origin_transition, |
+ int target_transition) { |
+ Set(target_transition, origin->GetKey(origin_transition), |
+ origin->GetTargetCell(origin_transition)); |
} |
@@ -422,9 +419,9 @@ void TransitionArray::EnsureHasFullTransitionArray(Handle<Map> map) { |
result->Shrink(ToKeyIndex(0)); |
result->SetNumberOfTransitions(0); |
} else if (nof == 1) { |
- Map* target = GetSimpleTransition(raw_transitions); |
- Name* key = GetSimpleTransitionKey(target); |
- result->NoIncrementalWriteBarrierSet(0, key, target); |
+ WeakCell* target_cell = GetSimpleTransitionCell(raw_transitions); |
+ Name* key = GetSimpleTransitionKey(Map::cast(target_cell->value())); |
+ result->Set(0, key, target_cell); |
} |
ReplaceTransitions(map, *result); |
} |