aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4estable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime/qv4estable.cpp')
-rw-r--r--src/qml/jsruntime/qv4estable.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/qml/jsruntime/qv4estable.cpp b/src/qml/jsruntime/qv4estable.cpp
index 55b7407000..4b0eddb989 100644
--- a/src/qml/jsruntime/qv4estable.cpp
+++ b/src/qml/jsruntime/qv4estable.cpp
@@ -38,6 +38,7 @@
****************************************************************************/
#include "qv4estable_p.h"
+#include "qv4object_p.h"
using namespace QV4;
@@ -67,10 +68,11 @@ ESTable::~ESTable()
m_values = nullptr;
}
-void ESTable::markObjects(MarkStack *s)
+void ESTable::markObjects(MarkStack *s, bool isWeakMap)
{
for (uint i = 0; i < m_size; ++i) {
- m_keys[i].mark(s);
+ if (!isWeakMap)
+ m_keys[i].mark(s);
m_values[i].mark(s);
}
}
@@ -179,3 +181,19 @@ void ESTable::iterate(uint idx, Value *key, Value *value)
*value = m_values[idx];
}
+void ESTable::removeUnmarkedKeys()
+{
+ uint idx = 0;
+ uint toIdx = 0;
+ for (; idx < m_size; ++idx) {
+ Q_ASSERT(m_keys[idx].isObject());
+ Object &o = static_cast<Object &>(m_keys[idx]);
+ if (o.d()->isMarked()) {
+ m_keys[toIdx] = m_keys[idx];
+ m_values[toIdx] = m_values[idx];
+ ++toIdx;
+ }
+ }
+ m_size = toIdx;
+}
+