diff options
author | Jedrzej Nowacki <jedrzej.nowacki@nokia.com> | 2011-08-02 13:14:26 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-08-03 14:13:00 +0200 |
commit | b9fd1367ab71813e15a7b25733bd9fdb0ca6d7aa (patch) | |
tree | 146af254dc78d6a76ad85429c26d2d031a77d3c5 /src/declarative/qml/v8/qv8engine_impl_p.h | |
parent | a61f3725d0e92459eb6f1fe7ee4e817c68d25ccf (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.h | 22 |
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 |