From a2d115fbaffee282a1d32ed92c6700e6c3dd811b Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 12 Sep 2013 22:37:41 +0200 Subject: Convert most remaining return values from Value to ReturnedValue Change-Id: If8b0c3b91be50678693868c10fefc3678008834d Reviewed-by: Simon Hausmann --- src/qml/jsapi/qjsengine.cpp | 8 +++++--- src/qml/jsapi/qjsvalue.cpp | 38 ++++++++++++++++++++++++-------------- src/qml/jsapi/qjsvalue_p.h | 2 +- 3 files changed, 30 insertions(+), 18 deletions(-) (limited to 'src/qml/jsapi') 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 #include -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 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 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; } -- cgit v1.2.3