Index: src/mark-compact.h |
diff --git a/src/mark-compact.h b/src/mark-compact.h |
index 179edba74e926a4ec8e65edc6c4449b413591e4d..9b67c8affe08e0182dfbe207f85acba86e1aa39d 100644 |
--- a/src/mark-compact.h |
+++ b/src/mark-compact.h |
@@ -193,6 +193,11 @@ class MarkCompactCollector { |
inline bool is_code_flushing_enabled() const { return code_flusher_ != NULL; } |
void EnableCodeFlushing(bool enable); |
+ inline Object* encountered_weak_maps() { return encountered_weak_maps_; } |
+ inline void set_encountered_weak_maps(Object* weak_map) { |
+ encountered_weak_maps_ = weak_map; |
+ } |
+ |
private: |
MarkCompactCollector(); |
~MarkCompactCollector(); |
@@ -329,6 +334,16 @@ class MarkCompactCollector { |
// We replace them with a null descriptor, with the same key. |
void ClearNonLiveTransitions(); |
+ // Mark all values associated with reachable keys in weak maps encountered |
+ // so far. This might push new object or even new weak maps onto the |
+ // marking stack. |
+ void ProcessWeakMaps(); |
+ |
+ // After all reachable objects have been marked those weak map entries |
+ // with an unreachable key are removed from all encountered weak maps. |
+ // The linked list of all encountered weak maps is destroyed. |
+ void ClearWeakMaps(); |
+ |
// ----------------------------------------------------------------------- |
// Phase 2: Sweeping to clear mark bits and free non-live objects for |
// a non-compacting collection, or else computing and encoding |
@@ -499,6 +514,7 @@ class MarkCompactCollector { |
Heap* heap_; |
MarkingStack marking_stack_; |
CodeFlusher* code_flusher_; |
+ Object* encountered_weak_maps_; |
friend class Heap; |
friend class OverflowedObjectsScanner; |