Index: src/store-buffer.cc |
diff --git a/src/store-buffer.cc b/src/store-buffer.cc |
index d1a04d292fb2cb0f79282972caa0b26c8d3b8c2f..dbd9cc7415e04b47bf57f3aedf8143ff3dfb9930 100644 |
--- a/src/store-buffer.cc |
+++ b/src/store-buffer.cc |
@@ -515,8 +515,25 @@ void StoreBuffer::IteratePointersToNewSpace(ObjectSlotCallback slot_callback, |
heap_->mark_compact_collector()->EnsureSweepingCompleted(); |
} |
} |
- FindPointersToNewSpaceInRegion( |
- start, end, slot_callback, clear_maps); |
+ // TODO(hpayer): remove the special casing and merge map and pointer |
+ // space handling as soon as we removed conservative sweeping. |
+ CHECK(page->owner() == heap_->old_pointer_space()); |
+ if (heap_->old_pointer_space()->swept_precisely()) { |
+ HeapObjectIterator iterator(page, NULL); |
+ for (HeapObject* heap_object = iterator.Next(); |
+ heap_object != NULL; heap_object = iterator.Next()) { |
+ // We iterate over objects that contain new space pointers only. |
+ if (heap_object->MayContainNewSpacePointers()) { |
+ FindPointersToNewSpaceInRegion( |
+ heap_object->address() + HeapObject::kHeaderSize, |
+ heap_object->address() + heap_object->Size(), |
+ slot_callback, clear_maps); |
+ } |
+ } |
+ } else { |
+ FindPointersToNewSpaceInRegion(start, end, slot_callback, |
+ clear_maps); |
+ } |
} |
} |
} |