diff options
author | Chris Adams <christopher.adams@nokia.com> | 2011-10-10 12:11:21 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-06 02:46:28 +0100 |
commit | 564d58025e46c825ec763193767defd78f5e13a0 (patch) | |
tree | 31d046ac0c016df416afd4923fb749d8bf73d6bc /src/declarative/qml/v8/qv8variantwrapper.cpp | |
parent | 8601f3444f7926a7b47ae217d8bf51044ff61809 (diff) |
Ensure that scarce resources work with var properties
Now that we have a new property type which stores JavaScript handles,
we need to ensure that scarce resources can be used with them.
Task-number: QMLNG-18
Task-number: QTBUG-21843
Change-Id: I4a920ae39e7d33cf5e33362e5e0ee21c74cb35e3
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/declarative/qml/v8/qv8variantwrapper.cpp')
-rw-r--r-- | src/declarative/qml/v8/qv8variantwrapper.cpp | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/src/declarative/qml/v8/qv8variantwrapper.cpp b/src/declarative/qml/v8/qv8variantwrapper.cpp index 671e4d33c3..28bcccbaab 100644 --- a/src/declarative/qml/v8/qv8variantwrapper.cpp +++ b/src/declarative/qml/v8/qv8variantwrapper.cpp @@ -40,22 +40,35 @@ ****************************************************************************/ #include "qv8variantwrapper_p.h" +#include "qv8variantresource_p.h" #include "qv8engine_p.h" #include <private/qdeclarativeengine_p.h> QT_BEGIN_NAMESPACE -class QV8VariantResource : public QV8ObjectResource, - public QDeclarativeEnginePrivate::ScarceResourceData +QV8VariantResource::QV8VariantResource(QV8Engine *engine, const QVariant &data) +: QV8ObjectResource(engine), QDeclarativeEnginePrivate::ScarceResourceData(data), m_isScarceResource(false), m_vmePropertyReferenceCount(0) { - V8_RESOURCE_TYPE(VariantType); -public: - QV8VariantResource(QV8Engine *engine, const QVariant &data); -}; +} -QV8VariantResource::QV8VariantResource(QV8Engine *engine, const QVariant &data) -: QV8ObjectResource(engine), QDeclarativeEnginePrivate::ScarceResourceData(data) +void QV8VariantResource::addVmePropertyReference() +{ + if (m_isScarceResource && ++m_vmePropertyReferenceCount == 1) { + // remove from the ep->scarceResources list + // since it is now no longer eligible to be + // released automatically by the engine. + node.remove(); + } +} + +void QV8VariantResource::removeVmePropertyReference() { + if (m_isScarceResource && --m_vmePropertyReferenceCount == 0) { + // and add to the ep->scarceResources list + // since it is now eligible to be released + // automatically by the engine. + QDeclarativeEnginePrivate::get(engine->engine())->scarceResources.insert(this); + } } QV8VariantWrapper::QV8VariantWrapper() @@ -133,6 +146,7 @@ v8::Local<v8::Object> QV8VariantWrapper::newVariant(const QVariant &value) QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(m_engine->engine()); Q_ASSERT(ep->scarceResourcesRefCount); rv = m_scarceConstructor->NewInstance(); + r->m_isScarceResource = true; ep->scarceResources.insert(r); } else { rv = m_constructor->NewInstance(); |