| Index: src/heap/scavenger-inl.h
|
| diff --git a/src/heap/scavenger-inl.h b/src/heap/scavenger-inl.h
|
| index 9edf0511768a960760940ebb4b026ba873d254c5..5ae68579fa36cb3c18eea1ea674ff2462f1329d1 100644
|
| --- a/src/heap/scavenger-inl.h
|
| +++ b/src/heap/scavenger-inl.h
|
| @@ -10,7 +10,8 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| -void Scavenger::ScavengeObject(HeapObject** p, HeapObject* object) {
|
| +void Scavenger::ScavengeObject(HeapObject** p, HeapObject* object,
|
| + bool force_promotion) {
|
| DCHECK(object->GetIsolate()->heap()->InFromSpace(object));
|
|
|
| // We use the first word (where the map pointer usually is) of a heap
|
| @@ -34,18 +35,20 @@ void Scavenger::ScavengeObject(HeapObject** p, HeapObject* object) {
|
| // AllocationMementos are unrooted and shouldn't survive a scavenge
|
| DCHECK(object->map() != object->GetHeap()->allocation_memento_map());
|
| // Call the slow part of scavenge object.
|
| - return ScavengeObjectSlow(p, object);
|
| + return ScavengeObjectSlow(p, object, force_promotion);
|
| }
|
|
|
| SlotCallbackResult Scavenger::CheckAndScavengeObject(Heap* heap,
|
| - Address slot_address) {
|
| + Address slot_address,
|
| + bool force_promotion) {
|
| Object** slot = reinterpret_cast<Object**>(slot_address);
|
| Object* object = *slot;
|
| if (heap->InFromSpace(object)) {
|
| HeapObject* heap_object = reinterpret_cast<HeapObject*>(object);
|
| DCHECK(heap_object->IsHeapObject());
|
|
|
| - ScavengeObject(reinterpret_cast<HeapObject**>(slot), heap_object);
|
| + ScavengeObject(reinterpret_cast<HeapObject**>(slot), heap_object,
|
| + force_promotion);
|
|
|
| object = *slot;
|
| // If the object was in from space before and is after executing the
|
| @@ -67,7 +70,7 @@ void StaticScavengeVisitor::VisitPointer(Heap* heap, HeapObject* obj,
|
| Object* object = *p;
|
| if (!heap->InNewSpace(object)) return;
|
| Scavenger::ScavengeObject(reinterpret_cast<HeapObject**>(p),
|
| - reinterpret_cast<HeapObject*>(object));
|
| + reinterpret_cast<HeapObject*>(object), false);
|
| }
|
|
|
| } // namespace internal
|
|
|