From 9712236e07667c453cc88b45830bb692415c57ae Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 8 May 2013 07:32:45 +0200 Subject: [PATCH] convert qv8sequencewrapper to use QV4::PersistentValue Change-Id: I211121a1cd389e7973ca1395e46c8f96f73d3a50 Reviewed-by: Simon Hausmann --- src/qml/qml/v8/qv8sequencewrapper.cpp | 36 ++++++++++++++++------------------- src/qml/qml/v8/qv8sequencewrapper_p.h | 14 ++++++++------ 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/qml/qml/v8/qv8sequencewrapper.cpp b/src/qml/qml/v8/qv8sequencewrapper.cpp index c4579fd..eacafea 100644 --- a/src/qml/qml/v8/qv8sequencewrapper.cpp +++ b/src/qml/qml/v8/qv8sequencewrapper.cpp @@ -45,6 +45,8 @@ #include "qv8sequencewrapper_p_p.h" #include "qv8engine_p.h" +#include + QT_BEGIN_NAMESPACE QV8SequenceWrapper::QV8SequenceWrapper() @@ -62,8 +64,8 @@ void QV8SequenceWrapper::init(QV8Engine *engine) FOREACH_QML_SEQUENCE_TYPE(REGISTER_QML_SEQUENCE_METATYPE) 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(); QString defaultSortString = QLatin1String( "(function compare(x,y) {" @@ -74,10 +76,10 @@ void QV8SequenceWrapper::init(QV8Engine *engine) " else return x < y ? -1 : 1;" "})"); - m_sort = qPersistentNew(v8::FunctionTemplate::New(Sort)->GetFunction()); - m_arrayPrototype = qPersistentNew(v8::Array::New(1)->GetPrototype()); + m_sort = v8::FunctionTemplate::New(Sort)->GetFunction()->v4Value(); + m_arrayPrototype = v8::Array::New(1)->GetPrototype()->v4Value(); v8::Handle defaultSortCompareScript = v8::Script::Compile(engine->toString(defaultSortString)); - m_defaultSortComparer = qPersistentNew(v8::Handle(v8::Function::Cast(defaultSortCompareScript->Run().get()))); + m_defaultSortComparer = defaultSortCompareScript->Run()->v4Value(); v8::Handle ft = v8::FunctionTemplate::New(); ft->InstanceTemplate()->SetFallbackPropertyHandler(Getter, Setter); @@ -86,28 +88,22 @@ void QV8SequenceWrapper::init(QV8Engine *engine) v8::Handle(), v8::DEFAULT, v8::PropertyAttribute(v8::DontDelete | v8::DontEnum)); ft->InstanceTemplate()->SetAccessor(v8::String::New("toString"), ToStringGetter, 0, - m_toString, v8::DEFAULT, + m_toString.value(), v8::DEFAULT, v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete | v8::DontEnum)); ft->InstanceTemplate()->SetAccessor(v8::String::New("valueOf"), ValueOfGetter, 0, - m_valueOf, v8::DEFAULT, + m_valueOf.value(), v8::DEFAULT, v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete | v8::DontEnum)); ft->InstanceTemplate()->SetAccessor(v8::String::New("sort"), SortGetter, 0, - m_sort, v8::DEFAULT, + m_sort.value(), v8::DEFAULT, v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete | v8::DontEnum)); ft->InstanceTemplate()->SetHasExternalResource(true); ft->InstanceTemplate()->MarkAsUseUserObjectComparison(); - m_constructor = qPersistentNew(ft->GetFunction()); + m_constructor = ft->GetFunction()->v4Value(); } #undef REGISTER_QML_SEQUENCE_METATYPE void QV8SequenceWrapper::destroy() { - qPersistentDispose(m_defaultSortComparer); - qPersistentDispose(m_sort); - qPersistentDispose(m_arrayPrototype); - qPersistentDispose(m_toString); - qPersistentDispose(m_valueOf); - qPersistentDispose(m_constructor); } #define IS_SEQUENCE(unused1, unused2, SequenceType, unused3) \ @@ -152,9 +148,9 @@ v8::Handle QV8SequenceWrapper::newSequence(int sequenceType, QObject QV8SequenceResource *r = 0; FOREACH_QML_SEQUENCE_TYPE(NEW_REFERENCE_SEQUENCE) { /* else */ *succeeded = false; return v8::Handle(); } - v8::Handle rv = m_constructor->NewInstance(); + v8::Handle rv = m_constructor.value().asFunctionObject()->newInstance(); rv->SetExternalResource(r); - rv->SetPrototype(m_arrayPrototype); + rv->SetPrototype(m_arrayPrototype.value()); return rv; } #undef NEW_REFERENCE_SEQUENCE @@ -175,9 +171,9 @@ v8::Handle QV8SequenceWrapper::fromVariant(const QVariant& v, bool * QV8SequenceResource *r = 0; FOREACH_QML_SEQUENCE_TYPE(NEW_COPY_SEQUENCE) { /* else */ *succeeded = false; return v8::Handle(); } - v8::Handle rv = m_constructor->NewInstance(); + v8::Handle rv = m_constructor.value().asFunctionObject()->newInstance(); rv->SetExternalResource(r); - rv->SetPrototype(m_arrayPrototype); + rv->SetPrototype(m_arrayPrototype.value()); return rv; } #undef NEW_COPY_SEQUENCE @@ -275,7 +271,7 @@ QV4::Value QV8SequenceWrapper::Sort(const v8::Arguments &args) qint32 length = sr->lengthGetter(); if (length > 1) { - v8::Handle jsCompareFn = sr->engine->sequenceWrapper()->m_defaultSortComparer; + v8::Handle jsCompareFn = sr->engine->sequenceWrapper()->m_defaultSortComparer.value(); if (argCount == 1 && args[0]->IsFunction()) jsCompareFn = v8::Handle(v8::Function::Cast(args[0].get())); diff --git a/src/qml/qml/v8/qv8sequencewrapper_p.h b/src/qml/qml/v8/qv8sequencewrapper_p.h index 2408e4a..b5cc721 100644 --- a/src/qml/qml/v8/qv8sequencewrapper_p.h +++ b/src/qml/qml/v8/qv8sequencewrapper_p.h @@ -57,6 +57,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE class QV8Engine; @@ -85,12 +87,12 @@ public: private: QV8Engine *m_engine; - v8::Persistent m_constructor; - v8::Persistent m_toString; - v8::Persistent m_valueOf; - v8::Persistent m_sort; - v8::Persistent m_arrayPrototype; - v8::Persistent m_defaultSortComparer; + QV4::PersistentValue m_constructor; + QV4::PersistentValue m_toString; + QV4::PersistentValue m_valueOf; + QV4::PersistentValue m_sort; + QV4::PersistentValue m_arrayPrototype; + QV4::PersistentValue m_defaultSortComparer; static v8::Handle IndexedGetter(quint32 index, const v8::AccessorInfo &info); static v8::Handle IndexedSetter(quint32 index, v8::Handle value, const v8::AccessorInfo &info); -- 2.7.4