aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/types
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-09-23 15:52:10 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-26 09:05:16 +0200
commit12fd2ccd3fa2dc0133b5a3fb89f9fdf5cf721232 (patch)
tree880acb9c7c0d8289185b6aebe4339f439c707a0e /src/qml/types
parent2e4f66caa8a5f9e887dbdb4e3f2ae5c9be9a7005 (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.cpp19
-rw-r--r--src/qml/types/qquickworkerscript.cpp23
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 {