aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/v8/qv8engine_impl_p.h
diff options
context:
space:
mode:
authorJedrzej Nowacki <jedrzej.nowacki@nokia.com>2011-08-02 13:14:26 +0200
committerQt by Nokia <qt-info@nokia.com>2011-08-03 14:13:00 +0200
commitb9fd1367ab71813e15a7b25733bd9fdb0ca6d7aa (patch)
tree146af254dc78d6a76ad85429c26d2d031a77d3c5 /src/declarative/qml/v8/qv8engine_impl_p.h
parenta61f3725d0e92459eb6f1fe7ee4e817c68d25ccf (diff)
Improve QJSValueIterator implementation.
The old implementation was a hack, it had some memory leak (in case of deleted engine) and performance problems (for example all names were copied to separate QList instance instead of reusing v8::Array). Change-Id: Ic70ad511127a8c05df3c627e4496083004c6452a Reviewed-on: http://codereview.qt.nokia.com/2512 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
Diffstat (limited to 'src/declarative/qml/v8/qv8engine_impl_p.h')
-rw-r--r--src/declarative/qml/v8/qv8engine_impl_p.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/declarative/qml/v8/qv8engine_impl_p.h b/src/declarative/qml/v8/qv8engine_impl_p.h
index 5c56efdf39..382e221f5a 100644
--- a/src/declarative/qml/v8/qv8engine_impl_p.h
+++ b/src/declarative/qml/v8/qv8engine_impl_p.h
@@ -38,6 +38,7 @@
#include "qv8engine_p.h"
#include "qjsvalue_p.h"
#include "qjsconverter_p.h"
+#include "qjsvalueiterator_p.h"
QT_BEGIN_NAMESPACE
@@ -80,6 +81,10 @@ public:
{
value->reinitialize();
}
+ void operator () (QJSValueIteratorPrivate *iterator) const
+ {
+ iterator->invalidate();
+ }
};
inline void QV8Engine::registerValue(QJSValuePrivate *data)
@@ -99,6 +104,23 @@ inline void QV8Engine::invalidateAllValues()
m_values.clear();
}
+inline void QV8Engine::registerValueIterator(QJSValueIteratorPrivate *data)
+{
+ m_valueIterators.insert(data);
+}
+
+inline void QV8Engine::unregisterValueIterator(QJSValueIteratorPrivate *data)
+{
+ m_valueIterators.remove(data);
+}
+
+inline void QV8Engine::invalidateAllIterators()
+{
+ QtScriptBagCleaner invalidator;
+ m_valueIterators.forEach(invalidator);
+ m_valueIterators.clear();
+}
+
/*!
\internal
\note property can be index (v8::Integer) or a property (v8::String) name, according to ECMA script