From 94f0d86b5d4c52a6af4843d05d47e7dcf2d1acaa Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Sun, 26 Aug 2018 17:50:44 +0200 Subject: Add support for WeakSet Change-Id: I5cee2bf0c6a45ad2c14b52e1a4fc5ef015e01042 Reviewed-by: Simon Hausmann --- src/qml/memory/qv4mm.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/qml/memory/qv4mm.cpp') diff --git a/src/qml/memory/qv4mm.cpp b/src/qml/memory/qv4mm.cpp index 065204b5d3..b9e6327ea2 100644 --- a/src/qml/memory/qv4mm.cpp +++ b/src/qml/memory/qv4mm.cpp @@ -62,6 +62,7 @@ #include "qv4alloca_p.h" #include "qv4profiling_p.h" #include "qv4mapobject_p.h" +#include "qv4setobject_p.h" //#define MM_STATS @@ -989,6 +990,17 @@ void MemoryManager::sweep(bool lastSweep, ClassDestroyStatsCallback classCountPt map = map->nextWeakMap; } + Heap::SetObject *set = weakSets; + Heap::SetObject **lastSet = &weakSets; + while (set) { + if (set->isMarked()) { + set->removeUnmarkedKeys(); + *lastSet = set; + lastSet = &set->nextWeakSet; + } + set = set->nextWeakSet; + } + // onDestruction handlers may have accessed other QObject wrappers and reset their value, so ensure // that they are all set to undefined. for (PersistentValueStorage::Iterator it = m_weakValues->begin(); it != m_weakValues->end(); ++it) { @@ -1198,6 +1210,12 @@ void MemoryManager::registerWeakMap(Heap::MapObject *map) weakMaps = map; } +void MemoryManager::registerWeakSet(Heap::SetObject *set) +{ + set->nextWeakSet = weakSets; + weakSets = set; +} + MemoryManager::~MemoryManager() { delete m_persistentValues; -- cgit v1.2.3