Index: src/heap/objects-visiting-inl.h |
diff --git a/src/heap/objects-visiting-inl.h b/src/heap/objects-visiting-inl.h |
index 5d06a672b3d65d6fd37b0f5f4571fbd6eaba3bc8..c2f65cbcf20cb63e4476f59b06deca5a4888840d 100644 |
--- a/src/heap/objects-visiting-inl.h |
+++ b/src/heap/objects-visiting-inl.h |
@@ -179,6 +179,8 @@ void StaticMarkingVisitor<StaticVisitor>::Initialize() { |
table_.Register(kVisitWeakCell, &VisitWeakCell); |
+ table_.Register(kVisitTransitionArray, &VisitTransitionArray); |
+ |
table_.template RegisterSpecializations<DataObjectVisitor, kVisitDataObject, |
kVisitDataObjectGeneric>(); |
@@ -342,6 +344,25 @@ 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); |
+ // Enqueue the array in linked list of encountered transition arrays if it is |
+ // not already in the lest. |
Michael Lippautz
2015/11/27 14:27:28
nit: ... list.
ulan
2015/11/27 14:43:45
Done.
|
+ if (array->next_link()->IsUndefined()) { |
+ Heap* heap = map->GetHeap(); |
+ array->set_next_link(heap->encountered_transition_arrays(), |
+ UPDATE_WEAK_WRITE_BARRIER); |
+ heap->set_encountered_transition_arrays(array); |
+ } |
+ // TODO(ulan): Move MarkTransitionArray logic here. |
+ TransitionArrayBodyVisitor::Visit(map, object); |
+} |
+ |
+ |
+template <typename StaticVisitor> |
void StaticMarkingVisitor<StaticVisitor>::VisitAllocationSite( |
Map* map, HeapObject* object) { |
Heap* heap = map->GetHeap(); |