Index: src/heap.cc |
diff --git a/src/heap.cc b/src/heap.cc |
index ae18fbe6b78666acf357eb67fffbb07edaa926a4..2f6a88a50c08542ff852786dfe5ac4e70d353c40 100644 |
--- a/src/heap.cc |
+++ b/src/heap.cc |
@@ -733,10 +733,7 @@ void Heap::Scavenge() { |
ScavengeVisitor scavenge_visitor; |
// Copy roots. |
- IterateRoots(&scavenge_visitor); |
- |
- // Copy objects reachable from weak pointers. |
- GlobalHandles::IterateWeakRoots(&scavenge_visitor); |
+ IterateRoots(&scavenge_visitor, VISIT_ALL); |
// Copy objects reachable from the old generation. By definition, |
// there are no intergenerational pointers in code or data spaces. |
@@ -3117,7 +3114,7 @@ void Heap::Verify() { |
ASSERT(HasBeenSetup()); |
VerifyPointersVisitor visitor; |
- IterateRoots(&visitor); |
+ IterateRoots(&visitor, VISIT_ONLY_STRONG); |
new_space_.Verify(); |
@@ -3244,14 +3241,14 @@ void Heap::IterateRSet(PagedSpace* space, ObjectSlotCallback copy_object_func) { |
} |
-void Heap::IterateRoots(ObjectVisitor* v) { |
- IterateStrongRoots(v); |
+void Heap::IterateRoots(ObjectVisitor* v, VisitMode mode) { |
+ IterateStrongRoots(v, mode); |
v->VisitPointer(reinterpret_cast<Object**>(&roots_[kSymbolTableRootIndex])); |
v->Synchronize("symbol_table"); |
} |
-void Heap::IterateStrongRoots(ObjectVisitor* v) { |
+void Heap::IterateStrongRoots(ObjectVisitor* v, VisitMode mode) { |
v->VisitPointers(&roots_[0], &roots_[kStrongRootListLength]); |
v->Synchronize("strong_root_list"); |
@@ -3284,7 +3281,11 @@ void Heap::IterateStrongRoots(ObjectVisitor* v) { |
v->Synchronize("builtins"); |
// Iterate over global handles. |
- GlobalHandles::IterateRoots(v); |
+ if (mode == VISIT_ONLY_STRONG) { |
+ GlobalHandles::IterateStrongRoots(v); |
+ } else { |
+ GlobalHandles::IterateAllRoots(v); |
+ } |
v->Synchronize("globalhandles"); |
// Iterate over pointers being held by inactive threads. |
@@ -3889,7 +3890,7 @@ void Heap::TracePathToObject() { |
search_for_any_global = false; |
MarkRootVisitor root_visitor; |
- IterateRoots(&root_visitor); |
+ IterateRoots(&root_visitor, VISIT_ONLY_STRONG); |
} |
@@ -3901,7 +3902,7 @@ void Heap::TracePathToGlobal() { |
search_for_any_global = true; |
MarkRootVisitor root_visitor; |
- IterateRoots(&root_visitor); |
+ IterateRoots(&root_visitor, VISIT_ONLY_STRONG); |
} |
#endif |