| Index: src/heap/objects-visiting-inl.h
|
| diff --git a/src/heap/objects-visiting-inl.h b/src/heap/objects-visiting-inl.h
|
| index fab6b802150e571af2e8126b8c0cd859e29070b3..8e96f339bdca230bb9f088d49a8a58673b30b654 100644
|
| --- a/src/heap/objects-visiting-inl.h
|
| +++ b/src/heap/objects-visiting-inl.h
|
| @@ -359,9 +359,17 @@ void StaticMarkingVisitor<StaticVisitor>::VisitWeakCell(Map* map,
|
| template <typename StaticVisitor>
|
| void StaticMarkingVisitor<StaticVisitor>::VisitTransitionArray(
|
| Map* map, HeapObject* object) {
|
| - typedef FlexibleBodyVisitor<StaticVisitor, TransitionArray::BodyDescriptor,
|
| - int> TransitionArrayBodyVisitor;
|
| TransitionArray* array = TransitionArray::cast(object);
|
| + Heap* heap = array->GetHeap();
|
| + // Visit strong references.
|
| + if (array->HasPrototypeTransitions()) {
|
| + StaticVisitor::VisitPointer(heap, array,
|
| + array->GetPrototypeTransitionsSlot());
|
| + }
|
| + int num_transitions = TransitionArray::NumberOfTransitions(array);
|
| + for (int i = 0; i < num_transitions; ++i) {
|
| + StaticVisitor::VisitPointer(heap, array, array->GetKeySlot(i));
|
| + }
|
| // Enqueue the array in linked list of encountered transition arrays if it is
|
| // not already in the list.
|
| if (array->next_link()->IsUndefined()) {
|
| @@ -370,8 +378,6 @@ void StaticMarkingVisitor<StaticVisitor>::VisitTransitionArray(
|
| UPDATE_WEAK_WRITE_BARRIER);
|
| heap->set_encountered_transition_arrays(array);
|
| }
|
| - // TODO(ulan): Move MarkTransitionArray logic here.
|
| - TransitionArrayBodyVisitor::Visit(map, object);
|
| }
|
|
|
|
|
| @@ -540,11 +546,6 @@ void StaticMarkingVisitor<StaticVisitor>::VisitBytecodeArray(
|
| template <typename StaticVisitor>
|
| void StaticMarkingVisitor<StaticVisitor>::MarkMapContents(Heap* heap,
|
| Map* map) {
|
| - Object* raw_transitions = map->raw_transitions();
|
| - if (TransitionArray::IsFullTransitionArray(raw_transitions)) {
|
| - MarkTransitionArray(heap, TransitionArray::cast(raw_transitions));
|
| - }
|
| -
|
| // Since descriptor arrays are potentially shared, ensure that only the
|
| // descriptors that belong to this map are marked. The first time a non-empty
|
| // descriptor array is marked, its header is also visited. The slot holding
|
| @@ -578,23 +579,6 @@ void StaticMarkingVisitor<StaticVisitor>::MarkMapContents(Heap* heap,
|
|
|
|
|
| template <typename StaticVisitor>
|
| -void StaticMarkingVisitor<StaticVisitor>::MarkTransitionArray(
|
| - Heap* heap, TransitionArray* transitions) {
|
| - if (!StaticVisitor::MarkObjectWithoutPush(heap, transitions)) return;
|
| -
|
| - if (transitions->HasPrototypeTransitions()) {
|
| - StaticVisitor::VisitPointer(heap, transitions,
|
| - transitions->GetPrototypeTransitionsSlot());
|
| - }
|
| -
|
| - int num_transitions = TransitionArray::NumberOfTransitions(transitions);
|
| - for (int i = 0; i < num_transitions; ++i) {
|
| - StaticVisitor::VisitPointer(heap, transitions, transitions->GetKeySlot(i));
|
| - }
|
| -}
|
| -
|
| -
|
| -template <typename StaticVisitor>
|
| void StaticMarkingVisitor<StaticVisitor>::MarkOptimizedCodeMap(
|
| Heap* heap, FixedArray* code_map) {
|
| if (!StaticVisitor::MarkObjectWithoutPush(heap, code_map)) return;
|
|
|