aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsapi
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-09-12 22:37:41 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-18 13:13:55 +0200
commita2d115fbaffee282a1d32ed92c6700e6c3dd811b (patch)
tree7694e53751edd605d99d1d8eb19c9cd5d6d8188a /src/qml/jsapi
parent399f88f6b75bb842be8e9d3671ace5114e115542 (diff)
Convert most remaining return values from Value to ReturnedValue
Change-Id: If8b0c3b91be50678693868c10fefc3678008834d Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsapi')
-rw-r--r--src/qml/jsapi/qjsengine.cpp8
-rw-r--r--src/qml/jsapi/qjsvalue.cpp38
-rw-r--r--src/qml/jsapi/qjsvalue_p.h2
3 files changed, 30 insertions, 18 deletions
diff --git a/src/qml/jsapi/qjsengine.cpp b/src/qml/jsapi/qjsengine.cpp
index 7bc8b80396..0f291d7c98 100644
--- a/src/qml/jsapi/qjsengine.cpp
+++ b/src/qml/jsapi/qjsengine.cpp
@@ -327,8 +327,10 @@ QJSValue QJSEngine::newQObject(QObject *object)
{
Q_D(QJSEngine);
QV4::ExecutionEngine *v4 = QV8Engine::getV4(d);
+ QV4::Scope scope(v4);
QQmlEngine::setObjectOwnership(object, QQmlEngine::JavaScriptOwnership);
- return new QJSValuePrivate(v4, QV4::QObjectWrapper::wrap(v4, object));
+ QV4::ScopedValue v(scope, QV4::QObjectWrapper::wrap(v4, object));
+ return new QJSValuePrivate(v4, v);
}
/*!
@@ -353,7 +355,7 @@ QJSValue QJSEngine::globalObject() const
QJSValue QJSEngine::create(int type, const void *ptr)
{
Q_D(QJSEngine);
- return new QJSValuePrivate(d->m_v4Engine, d->metaTypeToJS(type, ptr));
+ return new QJSValuePrivate(d->m_v4Engine, QV4::Value::fromReturnedValue(d->metaTypeToJS(type, ptr)));
}
/*!
@@ -365,7 +367,7 @@ bool QJSEngine::convertV2(const QJSValue &value, int type, void *ptr)
QJSValuePrivate *vp = QJSValuePrivate::get(value);
QV8Engine *engine = vp->engine ? vp->engine->v8Engine : 0;
if (engine) {
- return engine->metaTypeFromJS(vp->getValue(engine->m_v4Engine), type, ptr);
+ return engine->metaTypeFromJS(QV4::Value::fromReturnedValue(vp->getValue(engine->m_v4Engine)), type, ptr);
} else {
switch (type) {
case QMetaType::Bool:
diff --git a/src/qml/jsapi/qjsvalue.cpp b/src/qml/jsapi/qjsvalue.cpp
index e596cb6303..ca2f398f2f 100644
--- a/src/qml/jsapi/qjsvalue.cpp
+++ b/src/qml/jsapi/qjsvalue.cpp
@@ -57,13 +57,13 @@
#include <private/qv4exception_p.h>
#include <private/qv4scopedvalue_p.h>
-QV4::Value QJSValuePrivate::getValue(QV4::ExecutionEngine *e)
+QV4::ReturnedValue QJSValuePrivate::getValue(QV4::ExecutionEngine *e)
{
if (!this->engine)
this->engine = e;
else if (this->engine != e) {
qWarning("JSValue can't be reassigned to another engine.");
- return QV4::Value::emptyValue();
+ return QV4::Value::emptyValue().asReturnedValue();
}
if (value.asString() == &string) {
value = QV4::Value::fromString(engine->newString(string.toQString()));
@@ -74,7 +74,7 @@ QV4::Value QJSValuePrivate::getValue(QV4::ExecutionEngine *e)
if (next)
next->prev = &this->next;
}
- return value;
+ return value.asReturnedValue();
}
/*!
@@ -514,7 +514,7 @@ QJSValue QJSValue::call(const QJSValueList &args)
qWarning("QJSValue::call() failed: cannot call function with argument created in a different engine");
return QJSValue();
}
- callData->args[i] = args.at(i).d->getValue(engine);
+ callData->args[i] = QV4::Value::fromReturnedValue(args.at(i).d->getValue(engine));
}
ScopedValue result(scope);
@@ -565,13 +565,13 @@ QJSValue QJSValue::callWithInstance(const QJSValue &instance, const QJSValueList
}
ScopedCallData callData(scope, args.size());
- callData->thisObject = instance.d->getValue(engine);
+ callData->thisObject = QV4::Value::fromReturnedValue(instance.d->getValue(engine));
for (int i = 0; i < args.size(); ++i) {
if (!args.at(i).d->checkEngine(engine)) {
qWarning("QJSValue::call() failed: cannot call function with argument created in a different engine");
return QJSValue();
}
- callData->args[i] = args.at(i).d->getValue(engine);
+ callData->args[i] = QV4::Value::fromReturnedValue(args.at(i).d->getValue(engine));
}
ScopedValue result(scope);
@@ -620,7 +620,7 @@ QJSValue QJSValue::callAsConstructor(const QJSValueList &args)
qWarning("QJSValue::callAsConstructor() failed: cannot construct function with argument created in a different engine");
return QJSValue();
}
- callData->args[i] = args.at(i).d->getValue(engine);
+ callData->args[i] = QV4::Value::fromReturnedValue(args.at(i).d->getValue(engine));
}
ScopedValue result(scope);
@@ -864,7 +864,12 @@ QJSValue QJSValue::property(quint32 arrayIndex) const
*/
void QJSValue::setProperty(const QString& name, const QJSValue& value)
{
- Object *o = d->value.asObject();
+ ExecutionEngine *engine = d->engine;
+ if (!engine)
+ return;
+ Scope scope(engine);
+
+ Scoped<Object> o(scope, d->value);
if (!o)
return;
@@ -873,7 +878,6 @@ void QJSValue::setProperty(const QString& name, const QJSValue& value)
return;
}
- ExecutionEngine *engine = d->engine;
String *s = engine->newString(name);
uint idx = s->asArrayIndex();
if (idx < UINT_MAX) {
@@ -884,7 +888,8 @@ void QJSValue::setProperty(const QString& name, const QJSValue& value)
QV4::ExecutionContext *ctx = engine->current;
s->makeIdentifier();
try {
- o->put(s, value.d->getValue(engine));
+ QV4::ScopedValue v(scope, value.d->getValue(engine));
+ o->put(s, v);
} catch (QV4::Exception &e) {
e.accept(ctx);
}
@@ -904,17 +909,22 @@ void QJSValue::setProperty(const QString& name, const QJSValue& value)
*/
void QJSValue::setProperty(quint32 arrayIndex, const QJSValue& value)
{
- Object *o = d->value.asObject();
+ ExecutionEngine *engine = d->engine;
+ if (!engine)
+ return;
+ Scope scope(engine);
+
+ Scoped<Object> o(scope, d->value);
if (!o)
return;
- ExecutionEngine *engine = d->engine;
QV4::ExecutionContext *ctx = engine->current;
+ QV4::ScopedValue v(scope, value.d->getValue(engine));
try {
if (arrayIndex != UINT_MAX)
- o->putIndexed(arrayIndex, value.d->getValue(engine));
+ o->putIndexed(arrayIndex, v);
else
- o->put(engine->id_uintMax, value.d->getValue(engine));
+ o->put(engine->id_uintMax, v);
} catch (QV4::Exception &e) {
e.accept(ctx);
}
diff --git a/src/qml/jsapi/qjsvalue_p.h b/src/qml/jsapi/qjsvalue_p.h
index 69046e84df..f99fed7c44 100644
--- a/src/qml/jsapi/qjsvalue_p.h
+++ b/src/qml/jsapi/qjsvalue_p.h
@@ -88,7 +88,7 @@ public:
value = QV4::Value::fromString(&string);
}
- QV4::Value getValue(QV4::ExecutionEngine *e);
+ QV4::ReturnedValue getValue(QV4::ExecutionEngine *e);
static QJSValuePrivate *get(const QJSValue &v) { return v.d; }