Index: src/heap/scavenger.cc |
diff --git a/src/heap/scavenger.cc b/src/heap/scavenger.cc |
index 4fa30e2650890945097555663006d63f86040512..8e849e9a20ae9d354b3ca835735acebaee131cf8 100644 |
--- a/src/heap/scavenger.cc |
+++ b/src/heap/scavenger.cc |
@@ -208,8 +208,8 @@ class ScavengingVisitor : public StaticVisitorBase { |
SLOW_DCHECK(object->Size() == object_size); |
Heap* heap = map->GetHeap(); |
- if (promotion_mode != FORCE_PROMOTION && |
- !heap->ShouldBePromoted(object->address(), object_size)) { |
+ if (!heap->ShouldBePromoted(object->address(), object_size, |
+ promotion_mode)) { |
// A semi-space copy may fail due to fragmentation. In that case, we |
// try to promote the object. |
if (SemiSpaceCopyObject<alignment>(map, slot, object, object_size)) { |
@@ -224,6 +224,9 @@ class ScavengingVisitor : public StaticVisitorBase { |
if (promotion_mode == FORCE_PROMOTION) { |
FatalProcessOutOfMemory("Scavenger: forced promotion\n"); |
} |
+ if (promotion_mode == PROMOTE_MARKED) { |
+ FatalProcessOutOfMemory("Scavenger: promoting marked\n"); |
+ } |
// If promotion failed, we try to copy the object to the other semi-space |
if (SemiSpaceCopyObject<alignment>(map, slot, object, object_size)) return; |
@@ -472,7 +475,8 @@ void ScavengeVisitor::ScavengePointer(Object** p) { |
Object* object = *p; |
if (!heap_->InNewSpace(object)) return; |
Scavenger::ScavengeObject(reinterpret_cast<HeapObject**>(p), |
- reinterpret_cast<HeapObject*>(object)); |
+ reinterpret_cast<HeapObject*>(object), |
+ heap_->CurrentPromotionMode()); |
} |
} // namespace internal |