| Index: src/store-buffer.cc
|
| diff --git a/src/store-buffer.cc b/src/store-buffer.cc
|
| index d1a04d292fb2cb0f79282972caa0b26c8d3b8c2f..69de822e6e6b122d1b3892ec98043ad5000ed72f 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 pointers only.
|
| + if (heap_object->ContainsPointers()) {
|
| + FindPointersToNewSpaceInRegion(
|
| + heap_object->address() + HeapObject::kHeaderSize,
|
| + heap_object->address() + heap_object->Size(),
|
| + slot_callback, clear_maps);
|
| + }
|
| + }
|
| + } else {
|
| + FindPointersToNewSpaceInRegion(start, end, slot_callback,
|
| + clear_maps);
|
| + }
|
| }
|
| }
|
| }
|
|
|