summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/invalidated-slots.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/invalidated-slots.h')
-rw-r--r--deps/v8/src/heap/invalidated-slots.h33
1 files changed, 32 insertions, 1 deletions
diff --git a/deps/v8/src/heap/invalidated-slots.h b/deps/v8/src/heap/invalidated-slots.h
index 4098595fe4..4a72271910 100644
--- a/deps/v8/src/heap/invalidated-slots.h
+++ b/deps/v8/src/heap/invalidated-slots.h
@@ -30,7 +30,12 @@ using InvalidatedSlots = std::map<HeapObject, int, Object::Comparer>;
// n is the number of IsValid queries.
class V8_EXPORT_PRIVATE InvalidatedSlotsFilter {
public:
- explicit InvalidatedSlotsFilter(MemoryChunk* chunk);
+ static InvalidatedSlotsFilter OldToOld(MemoryChunk* chunk);
+ static InvalidatedSlotsFilter OldToNew(MemoryChunk* chunk);
+
+ explicit InvalidatedSlotsFilter(MemoryChunk* chunk,
+ InvalidatedSlots* invalidated_slots,
+ bool slots_in_free_space_are_valid);
inline bool IsValid(Address slot);
private:
@@ -48,6 +53,32 @@ class V8_EXPORT_PRIVATE InvalidatedSlotsFilter {
#endif
};
+class V8_EXPORT_PRIVATE InvalidatedSlotsCleanup {
+ public:
+ static InvalidatedSlotsCleanup OldToNew(MemoryChunk* chunk);
+ static InvalidatedSlotsCleanup NoCleanup(MemoryChunk* chunk);
+
+ explicit InvalidatedSlotsCleanup(MemoryChunk* chunk,
+ InvalidatedSlots* invalidated_slots);
+
+ inline void Free(Address free_start, Address free_end);
+
+ private:
+ InvalidatedSlots::iterator iterator_;
+ InvalidatedSlots::iterator iterator_end_;
+ InvalidatedSlots* invalidated_slots_;
+ InvalidatedSlots empty_;
+
+ Address sentinel_;
+ Address invalidated_start_;
+ Address invalidated_end_;
+
+ inline void NextInvalidatedObject();
+#ifdef DEBUG
+ Address last_free_;
+#endif
+};
+
} // namespace internal
} // namespace v8