Index: src/heap/mark-compact.h |
diff --git a/src/heap/mark-compact.h b/src/heap/mark-compact.h |
index 254328a9e2db25259ac5a3f12edfd1eb86f7e6a5..b4a4fe7fda2c423c6450ee513d3d127472c0b63e 100644 |
--- a/src/heap/mark-compact.h |
+++ b/src/heap/mark-compact.h |
@@ -325,6 +325,12 @@ class SlotsBuffer { |
slots_[idx_++] = slot; |
} |
+ // Should be used for testing only. |
+ ObjectSlot Get(intptr_t i) { |
+ DCHECK(i >= 0 && i < kNumberOfElements); |
+ return slots_[i]; |
+ } |
+ |
enum SlotType { |
EMBEDDED_OBJECT_SLOT, |
OBJECT_SLOT, |
@@ -374,14 +380,9 @@ class SlotsBuffer { |
inline bool HasSpaceForTypedSlot() { return idx_ < kNumberOfElements - 1; } |
- static void UpdateSlotsRecordedIn(Heap* heap, SlotsBuffer* buffer, |
- bool code_slots_filtering_required) { |
+ static void UpdateSlotsRecordedIn(Heap* heap, SlotsBuffer* buffer) { |
while (buffer != NULL) { |
- if (code_slots_filtering_required) { |
- buffer->UpdateSlotsWithFilter(heap); |
- } else { |
buffer->UpdateSlots(heap); |
- } |
buffer = buffer->next(); |
} |
} |
@@ -420,6 +421,10 @@ class SlotsBuffer { |
// before sweeping when mark bits are still intact. |
static void RemoveInvalidSlots(Heap* heap, SlotsBuffer* buffer); |
+ // Eliminate all slots that are within the given address range. |
+ static void RemoveObjectSlots(Heap* heap, SlotsBuffer* buffer, |
+ Address start_slot, Address end_slot); |
+ |
// Ensures that there are no invalid slots in the chain of slots buffers. |
static void VerifySlots(Heap* heap, SlotsBuffer* buffer); |
@@ -741,13 +746,17 @@ class MarkCompactCollector { |
bool IsSlotInLiveObject(Address slot); |
void VerifyIsSlotInLiveObject(Address slot, HeapObject* object); |
+ // Removes all the slots in the slot buffers that are within the given |
+ // address range. |
+ void RemoveObjectSlots(Address start_slot, Address end_slot); |
+ |
private: |
class SweeperTask; |
explicit MarkCompactCollector(Heap* heap); |
~MarkCompactCollector(); |
- bool MarkInvalidatedCode(); |
+ void RemoveDeoptimizedCodeSlots(); |
bool WillBeDeoptimized(Code* code); |
void RemoveDeadInvalidatedCode(); |
void ProcessInvalidatedCode(ObjectVisitor* visitor); |