From c5ec33e7eec5015fad526bbc979e32e4dbc1889d Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 8 May 2013 13:29:28 +0200 Subject: Convert qqmladaptermodel to use QV4::persistentValue Change-Id: I231c166d796c64fd8a50da54893383f5241ce81d Reviewed-by: Simon Hausmann --- src/qml/util/qqmladaptormodel.cpp | 51 ++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 19 deletions(-) (limited to 'src/qml/util') diff --git a/src/qml/util/qqmladaptormodel.cpp b/src/qml/util/qqmladaptormodel.cpp index 408f452942..a428029bad 100644 --- a/src/qml/util/qqmladaptormodel.cpp +++ b/src/qml/util/qqmladaptormodel.cpp @@ -46,6 +46,9 @@ #include #include +#include +#include + QT_BEGIN_NAMESPACE class QQmlAdaptorModelEngineData : public QV8Engine::Deletable @@ -62,12 +65,24 @@ public: QQmlAdaptorModelEngineData(QV8Engine *engine); ~QQmlAdaptorModelEngineData(); - v8::Handle index() { return strings->Get(Index)->ToString(); } - v8::Handle modelData() { return strings->Get(ModelData)->ToString(); } - v8::Handle hasModelChildren() { return strings->Get(HasModelChildren)->ToString(); } + v8::Handle index() { + QV4::Object *o = strings.value().asObject(); + QV4::ExecutionContext *ctx = o->engine()->current; + return QV4::Value::fromString(o->getIndexed(Index).toString(ctx)); + } + v8::Handle modelData() { + QV4::Object *o = strings.value().asObject(); + QV4::ExecutionContext *ctx = o->engine()->current; + return QV4::Value::fromString(o->getIndexed(ModelData).toString(ctx)); + } + v8::Handle hasModelChildren() { + QV4::Object *o = strings.value().asObject(); + QV4::ExecutionContext *ctx = o->engine()->current; + return QV4::Value::fromString(o->getIndexed(HasModelChildren).toString(ctx)); + } - v8::Persistent constructorListItem; - v8::Persistent strings; + QV4::PersistentValue constructorListItem; + QV4::PersistentValue strings; }; V8_DEFINE_EXTENSION(QQmlAdaptorModelEngineData, engineData) @@ -144,8 +159,6 @@ public: if (propertyCache) propertyCache->release(); free(metaObject); - - qPersistentDispose(constructor); } bool notify( @@ -207,7 +220,7 @@ public: void initializeConstructor(QQmlAdaptorModelEngineData *const data) { - constructor = qPersistentNew(v8::ObjectTemplate::New()); + constructor = v8::ObjectTemplate::New().get(); constructor->SetHasExternalResource(true); constructor->SetAccessor(data->index(), get_index); @@ -236,7 +249,7 @@ public: return static_cast(object)->metaCall(call, id, arguments); } - v8::Persistent constructor; + QExplicitlySharedDataPointer constructor; QList propertyRoles; QList watchedRoleIds; QList watchedRoles; @@ -412,7 +425,7 @@ public: v8::Handle get() { - if (type->constructor.IsEmpty()) { + if (!type->constructor) { QQmlAdaptorModelEngineData * const data = engineData(engine); type->initializeConstructor(data); type->constructor->SetAccessor(data->hasModelChildren(), get_hasModelChildren); @@ -599,7 +612,7 @@ public: v8::Handle get() { - v8::Handle data = engineData(engine)->constructorListItem->NewInstance(); + v8::Handle data = engineData(engine)->constructorListItem.value().asFunctionObject()->newInstance(); data->SetExternalResource(this); ++scriptRef; return data; @@ -947,12 +960,14 @@ void QQmlAdaptorModel::objectDestroyed(QObject *) setModel(QVariant(), 0, 0); } -QQmlAdaptorModelEngineData::QQmlAdaptorModelEngineData(QV8Engine *) +QQmlAdaptorModelEngineData::QQmlAdaptorModelEngineData(QV8Engine *e) { - strings = qPersistentNew(v8::Array::New(StringCount)); - strings->Set(Index, v8::String::New("index")); - strings->Set(ModelData, v8::String::New("modelData")); - strings->Set(HasModelChildren, v8::String::New("hasModelChildren")); + QV4::ExecutionEngine *v4 = QV8Engine::getV4(e); + QV4::ArrayObject *a = v4->newArrayObject(); + strings = QV4::Value::fromObject(a); + a->putIndexed(Index, QV4::Value::fromString(v4->newString(QStringLiteral("index")))); + a->putIndexed(ModelData, QV4::Value::fromString(v4->newString(QStringLiteral("modelData")))); + a->putIndexed(HasModelChildren, QV4::Value::fromString(v4->newString(QStringLiteral("hasModelChildren")))); v8::Handle listItem = v8::FunctionTemplate::New(); listItem->InstanceTemplate()->SetHasExternalResource(true); @@ -961,13 +976,11 @@ QQmlAdaptorModelEngineData::QQmlAdaptorModelEngineData(QV8Engine *) modelData(), QQmlDMListAccessorData::get_modelData, QQmlDMListAccessorData::set_modelData); - constructorListItem = qPersistentNew(listItem->GetFunction()); + constructorListItem = listItem->GetFunction()->v4Value(); } QQmlAdaptorModelEngineData::~QQmlAdaptorModelEngineData() { - qPersistentDispose(constructorListItem); - qPersistentDispose(strings); } QT_END_NAMESPACE -- cgit v1.2.3