| Index: src/heap/heap.cc
|
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
| index 0a65f711849e90c0546cc618f56b2c7e04aa81cc..ea1c0b6efde5ee74f6cb82c22c976d8db89a19fa 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()) {
|
| @@ -1758,8 +1758,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);
|
| + collector->code_flusher()
|
| + ->IteratePointersToFromSpace<StaticScavengeVisitor>();
|
| }
|
| }
|
|
|
| @@ -4816,7 +4817,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);
|
|
|
| @@ -4847,7 +4850,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()) {
|
| @@ -4876,6 +4880,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
|
| @@ -6120,7 +6126,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);
|
| }
|
|
|
|
|