diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-09-23 15:52:10 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-26 09:05:16 +0200 |
commit | 12fd2ccd3fa2dc0133b5a3fb89f9fdf5cf721232 (patch) | |
tree | 880acb9c7c0d8289185b6aebe4339f439c707a0e /src/qml/types | |
parent | 2e4f66caa8a5f9e887dbdb4e3f2ae5c9be9a7005 (diff) |
Fix Persistent/WeakValue API
Don't use unprotected Values in the API anymore.
Change-Id: I8851628227fca374de24701bc8ee0908b5ae3923
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/types')
-rw-r--r-- | src/qml/types/qqmldelegatemodel.cpp | 19 | ||||
-rw-r--r-- | src/qml/types/qquickworkerscript.cpp | 23 |
2 files changed, 25 insertions, 17 deletions
diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp index 0fa0c73ae0..97aa3ec628 100644 --- a/src/qml/types/qqmldelegatemodel.cpp +++ b/src/qml/types/qqmldelegatemodel.cpp @@ -2390,11 +2390,13 @@ QQmlV4Handle QQmlDelegateModelGroup::get(int index) model->m_cacheMetaType->initializePrototype(); QV8Engine *v8 = model->m_cacheMetaType->v8Engine; QV4::ExecutionEngine *v4 = QV8Engine::getV4(v8); - QV4::Object *o = new (v4->memoryManager) QQmlDelegateModelItemObject(v4, cacheItem); - o->setPrototype(model->m_cacheMetaType->modelItemProto.value().asObject()); + QV4::Scope scope(v4); + QV4::ScopedObject o(scope, new (v4->memoryManager) QQmlDelegateModelItemObject(v4, cacheItem)); + QV4::ScopedObject p(scope, model->m_cacheMetaType->modelItemProto.value()); + o->setPrototype(p.getPointer()); ++cacheItem->scriptRef; - return QQmlV4Handle(QV4::Value::fromObject(o)); + return QQmlV4Handle(o.asValue()); } bool QQmlDelegateModelGroupPrivate::parseIndex(const QV4::Value &value, int *index, Compositor::Group *group) const @@ -3158,7 +3160,8 @@ public: static QV4::ReturnedValue getIndexed(QV4::Managed *m, uint index, bool *hasProperty) { QV4::ExecutionEngine *v4 = m->engine(); - QQmlDelegateModelGroupChangeArray *array = m->as<QQmlDelegateModelGroupChangeArray>(); + QV4::Scope scope(v4); + QV4::Scoped<QQmlDelegateModelGroupChangeArray> array(scope, m->as<QQmlDelegateModelGroupChangeArray>()); if (!array) v4->current->throwTypeError(); @@ -3170,14 +3173,14 @@ public: const QQmlChangeSet::Change &change = array->at(index); - QV4::Object *changeProto = engineData(v4->v8Engine)->changeProto.value().asObject(); - QQmlDelegateModelGroupChange *object = new (v4->memoryManager) QQmlDelegateModelGroupChange(v4); - object->setPrototype(changeProto); + QV4::ScopedObject changeProto(scope, engineData(v4->v8Engine)->changeProto.value()); + QV4::Scoped<QQmlDelegateModelGroupChange> object(scope, new (v4->memoryManager) QQmlDelegateModelGroupChange(v4)); + object->setPrototype(changeProto.getPointer()); object->change = change; if (hasProperty) *hasProperty = true; - return QV4::Value::fromObject(object).asReturnedValue(); + return object.asReturnedValue(); } static QV4::ReturnedValue get(QV4::Managed *m, const QV4::StringRef name, bool *hasProperty) diff --git a/src/qml/types/qquickworkerscript.cpp b/src/qml/types/qquickworkerscript.cpp index ef23a34db8..b955555a82 100644 --- a/src/qml/types/qquickworkerscript.cpp +++ b/src/qml/types/qquickworkerscript.cpp @@ -244,9 +244,13 @@ void QQuickWorkerScriptEnginePrivate::WorkerEngine::init() // Requires handle and context scope QV4::ReturnedValue QQuickWorkerScriptEnginePrivate::WorkerEngine::sendFunction(int id) { - QV4::FunctionObject *f = createsend.value().asFunctionObject(); - QV4::ExecutionContext *ctx = f->engine()->current; - QV4::Scope scope(ctx->engine); + QV4::ExecutionEngine *v4 = createsend.engine(); + if (!v4) + return QV4::Encode::undefined(); + + QV4::Scope scope(v4); + QV4::ScopedFunctionObject f(scope, createsend.value()); + QV4::ExecutionContext *ctx = v4->current; QV4::ScopedValue v(scope); try { @@ -315,12 +319,12 @@ QV4::ReturnedValue QQuickWorkerScriptEnginePrivate::getWorker(WorkerScript *scri QV4::Scoped<QV4::Object> api(scope, v4->newObject()); api->put(QV4::ScopedString(scope, v4->newString("sendMessage")), QV4::ScopedValue(scope, workerEngine->sendFunction(script->id))); - script->object.value().asObject()->put(QV4::ScopedString(scope, v4->newString("WorkerScript")), api); + w->QV4::Object::put(QV4::ScopedString(scope, v4->newString("WorkerScript")), api); w->setReadOnly(true); } - return script->object.value().asReturnedValue(); + return script->object.value(); } bool QQuickWorkerScriptEnginePrivate::event(QEvent *event) @@ -351,9 +355,10 @@ void QQuickWorkerScriptEnginePrivate::processMessage(int id, const QByteArray &d if (!script) return; - QV4::FunctionObject *f = workerEngine->onmessage.value().asFunctionObject(); - QV4::ExecutionContext *ctx = f->internalClass->engine->current; - QV4::Scope scope(ctx); + QV4::ExecutionEngine *v4 = QV8Engine::getV4(workerEngine); + QV4::Scope scope(v4); + QV4::ScopedFunctionObject f(scope, workerEngine->onmessage.value()); + QV4::ExecutionContext *ctx = v4->current; QV4::ScopedValue value(scope, QV4::Serialize::deserialize(data, workerEngine)); @@ -396,7 +401,7 @@ void QQuickWorkerScriptEnginePrivate::processLoad(int id, const QUrl &url) if (!activation) return; - QV4::Script program(v4, activation.getPointer(), sourceCode, url.toString()); + QV4::Script program(v4, activation, sourceCode, url.toString()); QV4::ExecutionContext *ctx = v4->current; try { |