Index: src/heap/objects-visiting-inl.h |
diff --git a/src/heap/objects-visiting-inl.h b/src/heap/objects-visiting-inl.h |
index d220118368e77d07b973ec92c701061ddf06b6a5..6f9ee8f55eb1099c106f26efa88d42c2a05aa8c0 100644 |
--- a/src/heap/objects-visiting-inl.h |
+++ b/src/heap/objects-visiting-inl.h |
@@ -191,6 +191,8 @@ void StaticMarkingVisitor<StaticVisitor>::Initialize() { |
table_.Register(kVisitPropertyCell, &VisitPropertyCell); |
+ table_.Register(kVisitWeakCell, &VisitWeakCell); |
+ |
table_.template RegisterSpecializations<DataObjectVisitor, kVisitDataObject, |
kVisitDataObjectGeneric>(); |
@@ -350,6 +352,19 @@ void StaticMarkingVisitor<StaticVisitor>::VisitPropertyCell( |
template <typename StaticVisitor> |
+void StaticMarkingVisitor<StaticVisitor>::VisitWeakCell(Map* map, |
+ HeapObject* object) { |
+ Heap* heap = map->GetHeap(); |
+ WeakCell* weak_cell = reinterpret_cast<WeakCell*>(object); |
+ // Enqueue weak cell in linked list of encountered weak collections. |
+ if (weak_cell->next() == heap->undefined_value()) { |
Erik Corry
2014/10/14 13:37:22
I think this should set to smi zero.
Since there'
ulan
2014/10/14 14:05:41
Good idea about skipping cleared weak cells. Added
|
+ weak_cell->set_next(heap->encountered_weak_cells()); |
+ heap->set_encountered_weak_cells(weak_cell); |
+ } |
+} |
+ |
+ |
+template <typename StaticVisitor> |
void StaticMarkingVisitor<StaticVisitor>::VisitAllocationSite( |
Map* map, HeapObject* object) { |
Heap* heap = map->GetHeap(); |