From 5141c2a745a98a5b667f6d20f0d110669e81abe5 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 8 May 2013 07:31:54 +0200 Subject: [PATCH] convert qv8variantwrapper to use QV4::PersistentValue Change-Id: Iccccc41a031e72b7ed7ac90bf022f5e1bdea3876 Reviewed-by: Simon Hausmann --- src/qml/qml/v8/qv8variantwrapper.cpp | 36 ++++++++++++++++-------------------- src/qml/qml/v8/qv8variantwrapper_p.h | 14 ++++++++------ 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/qml/qml/v8/qv8variantwrapper.cpp b/src/qml/qml/v8/qv8variantwrapper.cpp index ffff9e4..10170ab 100644 --- a/src/qml/qml/v8/qv8variantwrapper.cpp +++ b/src/qml/qml/v8/qv8variantwrapper.cpp @@ -44,6 +44,8 @@ #include "qv8engine_p.h" #include +#include + QT_BEGIN_NAMESPACE QV8VariantResource::QV8VariantResource(QV8Engine *engine, const QVariant &data) @@ -83,8 +85,8 @@ QV8VariantWrapper::~QV8VariantWrapper() void QV8VariantWrapper::init(QV8Engine *engine) { m_engine = engine; - m_toString = qPersistentNew(v8::FunctionTemplate::New(ToString)->GetFunction()); - m_valueOf = qPersistentNew(v8::FunctionTemplate::New(ValueOf)->GetFunction()); + m_toString = v8::FunctionTemplate::New(ToString)->GetFunction()->v4Value(); + m_valueOf = v8::FunctionTemplate::New(ValueOf)->GetFunction()->v4Value(); { v8::Handle ft = v8::FunctionTemplate::New(); @@ -92,45 +94,39 @@ void QV8VariantWrapper::init(QV8Engine *engine) ft->InstanceTemplate()->SetHasExternalResource(true); ft->InstanceTemplate()->MarkAsUseUserObjectComparison(); ft->InstanceTemplate()->SetAccessor(v8::String::New("toString"), ToStringGetter, 0, - m_toString, v8::DEFAULT, + m_toString.value(), v8::DEFAULT, v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete)); ft->InstanceTemplate()->SetAccessor(v8::String::New("valueOf"), ValueOfGetter, 0, - m_valueOf, v8::DEFAULT, + m_valueOf.value(), v8::DEFAULT, v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete)); - m_constructor = qPersistentNew(ft->GetFunction()); + m_constructor = ft->GetFunction()->v4Value(); } { - m_preserve = qPersistentNew(v8::FunctionTemplate::New(Preserve)->GetFunction()); - m_destroy = qPersistentNew(v8::FunctionTemplate::New(Destroy)->GetFunction()); + m_preserve = v8::FunctionTemplate::New(Preserve)->GetFunction()->v4Value(); + m_destroy = v8::FunctionTemplate::New(Destroy)->GetFunction()->v4Value(); v8::Handle ft = v8::FunctionTemplate::New(); ft->InstanceTemplate()->SetFallbackPropertyHandler(Getter, Setter); ft->InstanceTemplate()->SetHasExternalResource(true); ft->InstanceTemplate()->MarkAsUseUserObjectComparison(); ft->InstanceTemplate()->SetAccessor(v8::String::New("preserve"), PreserveGetter, 0, - m_preserve, v8::DEFAULT, + m_preserve.value(), v8::DEFAULT, v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete)); ft->InstanceTemplate()->SetAccessor(v8::String::New("destroy"), DestroyGetter, 0, - m_destroy, v8::DEFAULT, + m_destroy.value(), v8::DEFAULT, v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete)); ft->InstanceTemplate()->SetAccessor(v8::String::New("toString"), ToStringGetter, 0, - m_toString, v8::DEFAULT, + m_toString.value(), v8::DEFAULT, v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete)); ft->InstanceTemplate()->SetAccessor(v8::String::New("valueOf"), ValueOfGetter, 0, - m_valueOf, v8::DEFAULT, + m_valueOf.value(), v8::DEFAULT, v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete)); - m_scarceConstructor = qPersistentNew(ft->GetFunction()); + m_scarceConstructor = ft->GetFunction()->v4Value(); } } void QV8VariantWrapper::destroy() { - qPersistentDispose(m_valueOf); - qPersistentDispose(m_toString); - qPersistentDispose(m_destroy); - qPersistentDispose(m_preserve); - qPersistentDispose(m_scarceConstructor); - qPersistentDispose(m_constructor); } v8::Handle QV8VariantWrapper::newVariant(const QVariant &value) @@ -145,11 +141,11 @@ v8::Handle QV8VariantWrapper::newVariant(const QVariant &value) if (scarceResource) { QQmlEnginePrivate *ep = QQmlEnginePrivate::get(m_engine->engine()); Q_ASSERT(ep->scarceResourcesRefCount); - rv = m_scarceConstructor->NewInstance(); + rv = m_scarceConstructor.value().asFunctionObject()->newInstance(); r->m_isScarceResource = true; ep->scarceResources.insert(r); } else { - rv = m_constructor->NewInstance(); + rv = m_constructor.value().asFunctionObject()->newInstance(); } rv->SetExternalResource(r); diff --git a/src/qml/qml/v8/qv8variantwrapper_p.h b/src/qml/qml/v8/qv8variantwrapper_p.h index a25d491..2615fd1 100644 --- a/src/qml/qml/v8/qv8variantwrapper_p.h +++ b/src/qml/qml/v8/qv8variantwrapper_p.h @@ -57,6 +57,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE class QV8Engine; @@ -96,12 +98,12 @@ private: static QV4::Value ValueOf(const v8::Arguments &args); QV8Engine *m_engine; - v8::Persistent m_constructor; - v8::Persistent m_scarceConstructor; - v8::Persistent m_preserve; - v8::Persistent m_destroy; - v8::Persistent m_toString; - v8::Persistent m_valueOf; + QV4::PersistentValue m_constructor; + QV4::PersistentValue m_scarceConstructor; + QV4::PersistentValue m_preserve; + QV4::PersistentValue m_destroy; + QV4::PersistentValue m_toString; + QV4::PersistentValue m_valueOf; }; QT_END_NAMESPACE -- 2.7.4