diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-05-08 13:29:28 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2013-05-08 15:27:42 +0200 |
commit | c5ec33e7eec5015fad526bbc979e32e4dbc1889d (patch) | |
tree | 2880b545df949db077feda309ce1b03e38a2c4b6 /src/qml/util/qqmladaptormodel.cpp | |
parent | c3f5ea992a7e57ad23cc5bcdcdb3f1e8188993f6 (diff) |
Convert qqmladaptermodel to use QV4::persistentValue
Change-Id: I231c166d796c64fd8a50da54893383f5241ce81d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/util/qqmladaptormodel.cpp')
-rw-r--r-- | src/qml/util/qqmladaptormodel.cpp | 51 |
1 files changed, 32 insertions, 19 deletions
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 <private/qqmlproperty_p.h> #include <private/qv8engine_p.h> +#include <private/qv4value_p.h> +#include <private/qv4functionobject_p.h> + QT_BEGIN_NAMESPACE class QQmlAdaptorModelEngineData : public QV8Engine::Deletable @@ -62,12 +65,24 @@ public: QQmlAdaptorModelEngineData(QV8Engine *engine); ~QQmlAdaptorModelEngineData(); - v8::Handle<v8::String> index() { return strings->Get(Index)->ToString(); } - v8::Handle<v8::String> modelData() { return strings->Get(ModelData)->ToString(); } - v8::Handle<v8::String> hasModelChildren() { return strings->Get(HasModelChildren)->ToString(); } + v8::Handle<v8::String> index() { + QV4::Object *o = strings.value().asObject(); + QV4::ExecutionContext *ctx = o->engine()->current; + return QV4::Value::fromString(o->getIndexed(Index).toString(ctx)); + } + v8::Handle<v8::String> modelData() { + QV4::Object *o = strings.value().asObject(); + QV4::ExecutionContext *ctx = o->engine()->current; + return QV4::Value::fromString(o->getIndexed(ModelData).toString(ctx)); + } + v8::Handle<v8::String> hasModelChildren() { + QV4::Object *o = strings.value().asObject(); + QV4::ExecutionContext *ctx = o->engine()->current; + return QV4::Value::fromString(o->getIndexed(HasModelChildren).toString(ctx)); + } - v8::Persistent<v8::Function> constructorListItem; - v8::Persistent<v8::Array> 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<QQmlDMCachedModelData *>(object)->metaCall(call, id, arguments); } - v8::Persistent<v8::ObjectTemplate> constructor; + QExplicitlySharedDataPointer<v8::ObjectTemplate> constructor; QList<int> propertyRoles; QList<int> watchedRoleIds; QList<QByteArray> watchedRoles; @@ -412,7 +425,7 @@ public: v8::Handle<v8::Value> 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<v8::Value> get() { - v8::Handle<v8::Object> data = engineData(engine)->constructorListItem->NewInstance(); + v8::Handle<v8::Object> 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<v8::FunctionTemplate> 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 |