Index: src/heap/heap.cc |
diff --git a/src/heap/heap.cc b/src/heap/heap.cc |
index db69962fe0d45342781a2e68bd57b540162c4437..e4240e382a289d5a22426ab173898694dd682f9b 100644 |
--- a/src/heap/heap.cc |
+++ b/src/heap/heap.cc |
@@ -1137,7 +1137,7 @@ void Heap::MoveElements(FixedArray* array, int dst_index, int src_index, |
// Helper class for verifying the string table. |
class StringTableVerifier : public ObjectVisitor { |
public: |
- void VisitPointers(Object** start, Object** end) override { |
+ void VisitPointers(HeapObject* host, Object** start, Object** end) override { |
// Visit all HeapObject pointers in [start, end). |
for (Object** p = start; p < end; p++) { |
if ((*p)->IsHeapObject()) { |
@@ -1753,8 +1753,9 @@ void Heap::Scavenge() { |
TRACE_GC(tracer(), GCTracer::Scope::SCAVENGER_CODE_FLUSH_CANDIDATES); |
MarkCompactCollector* collector = mark_compact_collector(); |
if (collector->is_code_flushing_enabled()) { |
- collector->code_flusher()->IteratePointersToFromSpace( |
- &root_scavenge_visitor); |
+ collector->code_flusher()->VisitListHeads(&root_scavenge_visitor); |
ulan
2017/04/10 10:59:37
This is the only non-mechanical change:
we first v
|
+ collector->code_flusher() |
+ ->IteratePointersToFromSpace<StaticScavengeVisitor>(); |
} |
} |
@@ -4821,7 +4822,9 @@ class IterateAndScavengePromotedObjectsVisitor final : public ObjectVisitor { |
bool record_slots) |
: heap_(heap), target_(target), record_slots_(record_slots) {} |
- inline void VisitPointers(Object** start, Object** end) override { |
+ inline void VisitPointers(HeapObject* host, Object** start, |
+ Object** end) override { |
+ DCHECK_EQ(host, target_); |
Address slot_address = reinterpret_cast<Address>(start); |
Page* page = Page::FromAddress(slot_address); |
@@ -4852,7 +4855,8 @@ class IterateAndScavengePromotedObjectsVisitor final : public ObjectVisitor { |
} |
} |
- inline void VisitCodeEntry(Address code_entry_slot) override { |
+ inline void VisitCodeEntry(JSFunction* host, |
+ Address code_entry_slot) override { |
// Black allocation requires us to process objects referenced by |
// promoted objects. |
if (heap_->incremental_marking()->black_allocation()) { |
@@ -4881,6 +4885,8 @@ void Heap::IterateAndScavengePromotedObject(HeapObject* target, int size, |
ObjectMarking::IsBlack(target, MarkingState::Internal(target)); |
} |
+ // TODO(ulan): remove the target, the visitor now gets the host object |
+ // in each visit method. |
IterateAndScavengePromotedObjectsVisitor visitor(this, target, record_slots); |
if (target->IsJSFunction()) { |
// JSFunctions reachable through kNextFunctionLinkOffset are weak. Slots for |
@@ -6125,7 +6131,8 @@ class UnreachableObjectsFilter : public HeapObjectsFilter { |
public: |
MarkingVisitor() : marking_stack_(10) {} |
- void VisitPointers(Object** start, Object** end) override { |
+ void VisitPointers(HeapObject* host, Object** start, |
+ Object** end) override { |
MarkPointers(start, end); |
} |