diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-09-13 21:54:21 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-18 13:14:10 +0200 |
commit | e4e90923c93adfafb23c81be7359e8df2a500b4f (patch) | |
tree | 36be927b72606c4f37326089ff3c6261f484c92b /src/qml/qml | |
parent | 9dcc12d52343960400192c817f54a16f7e1f8247 (diff) |
Convert some methods to use Returned<>
Change-Id: I631606cb5ab3b35b72104e70092a5200dd235fbc
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/qml')
-rw-r--r-- | src/qml/qml/qqmlcontextwrapper.cpp | 6 | ||||
-rw-r--r-- | src/qml/qml/qqmlvaluetypewrapper.cpp | 10 | ||||
-rw-r--r-- | src/qml/qml/qqmlxmlhttprequest.cpp | 27 | ||||
-rw-r--r-- | src/qml/qml/v8/qqmlbuiltinfunctions.cpp | 23 | ||||
-rw-r--r-- | src/qml/qml/v8/qv4domerrors_p.h | 6 |
5 files changed, 51 insertions, 21 deletions
diff --git a/src/qml/qml/qqmlcontextwrapper.cpp b/src/qml/qml/qqmlcontextwrapper.cpp index 50d1f32c10..153743aa58 100644 --- a/src/qml/qml/qqmlcontextwrapper.cpp +++ b/src/qml/qml/qqmlcontextwrapper.cpp @@ -274,8 +274,9 @@ ReturnedValue QmlContextWrapper::get(Managed *m, String *name, bool *hasProperty void QmlContextWrapper::put(Managed *m, String *name, const Value &value) { - QmlContextWrapper *wrapper = m->as<QmlContextWrapper>(); ExecutionEngine *v4 = m->engine(); + QV4::Scope scope(v4); + QV4::Scoped<QmlContextWrapper> wrapper(scope, m->as<QmlContextWrapper>()); if (!wrapper) v4->current->throwTypeError(); @@ -283,7 +284,8 @@ void QmlContextWrapper::put(Managed *m, String *name, const Value &value) if (wrapper && wrapper->readOnly) { QString error = QLatin1String("Invalid write to global property \"") + name->toQString() + QLatin1Char('"'); - v4->current->throwError(Value::fromString(v4->current->engine->newString(error))); + Scoped<String> e(scope, v4->current->engine->newString(error)); + v4->current->throwError(e); } Object::put(m, name, value); diff --git a/src/qml/qml/qqmlvaluetypewrapper.cpp b/src/qml/qml/qqmlvaluetypewrapper.cpp index 88704d58b3..f89ce15a57 100644 --- a/src/qml/qml/qqmlvaluetypewrapper.cpp +++ b/src/qml/qml/qqmlvaluetypewrapper.cpp @@ -327,14 +327,15 @@ ReturnedValue QmlValueTypeWrapper::get(Managed *m, String *name, bool *hasProper void QmlValueTypeWrapper::put(Managed *m, String *name, const Value &value) { - QmlValueTypeWrapper *r = m->as<QmlValueTypeWrapper>(); ExecutionEngine *v4 = m->engine(); + Scope scope(v4); + Scoped<QmlValueTypeWrapper> r(scope, m->as<QmlValueTypeWrapper>()); if (!r) v4->current->throwTypeError(); QByteArray propName = name->toQString().toUtf8(); if (r->objectType == QmlValueTypeWrapper::Reference) { - QmlValueTypeReference *reference = static_cast<QmlValueTypeReference *>(r); + QmlValueTypeReference *reference = static_cast<QmlValueTypeReference *>(r.getPointer()); QMetaProperty writebackProperty = reference->object->metaObject()->property(reference->property); if (!reference->object || !writebackProperty.isWritable() || !readReferenceValue(reference)) @@ -353,7 +354,8 @@ void QmlValueTypeWrapper::put(Managed *m, String *name, const Value &value) if (!f->bindingKeyFlag) { // assigning a JS function to a non-var-property is not allowed. QString error = QLatin1String("Cannot assign JavaScript function to value-type property"); - v4->current->throwError(r->v8->toString(error)); + Scoped<String> e(scope, r->v8->toString(error)); + v4->current->throwError(e); } QQmlContextData *context = r->v8->callingContext(); @@ -400,7 +402,7 @@ void QmlValueTypeWrapper::put(Managed *m, String *name, const Value &value) } else { Q_ASSERT(r->objectType == QmlValueTypeWrapper::Copy); - QmlValueTypeCopy *copy = static_cast<QmlValueTypeCopy *>(r); + QmlValueTypeCopy *copy = static_cast<QmlValueTypeCopy *>(r.getPointer()); int index = r->type->metaObject()->indexOfProperty(propName.constData()); if (index == -1) diff --git a/src/qml/qml/qqmlxmlhttprequest.cpp b/src/qml/qml/qqmlxmlhttprequest.cpp index b7447aee07..dc98bd176e 100644 --- a/src/qml/qml/qqmlxmlhttprequest.cpp +++ b/src/qml/qml/qqmlxmlhttprequest.cpp @@ -70,8 +70,10 @@ using namespace QV4; #ifndef QT_NO_XMLSTREAMREADER -#define V4THROW_REFERENCE(string) \ - ctx->throwError(Value::fromObject(ctx->engine->newReferenceErrorObject(QStringLiteral(string)))) +#define V4THROW_REFERENCE(string) { \ + Scoped<Object> error(scope, ctx->engine->newReferenceErrorObject(QStringLiteral(string))); \ + ctx->throwError(error); \ + } QT_BEGIN_NAMESPACE @@ -1658,6 +1660,7 @@ void QQmlXMLHttpRequestCtor::setupProto() // XMLHttpRequest methods ReturnedValue QQmlXMLHttpRequestCtor::method_open(SimpleCallContext *ctx) { + Scope scope(ctx); QQmlXMLHttpRequestWrapper *w = ctx->thisObject.as<QQmlXMLHttpRequestWrapper>(); if (!w) V4THROW_REFERENCE("Not an XMLHttpRequest object"); @@ -1706,6 +1709,8 @@ ReturnedValue QQmlXMLHttpRequestCtor::method_open(SimpleCallContext *ctx) ReturnedValue QQmlXMLHttpRequestCtor::method_setRequestHeader(SimpleCallContext *ctx) { + Scope scope(ctx); + QQmlXMLHttpRequestWrapper *w = ctx->thisObject.as<QQmlXMLHttpRequestWrapper>(); if (!w) V4THROW_REFERENCE("Not an XMLHttpRequest object"); @@ -1752,6 +1757,8 @@ ReturnedValue QQmlXMLHttpRequestCtor::method_setRequestHeader(SimpleCallContext ReturnedValue QQmlXMLHttpRequestCtor::method_send(SimpleCallContext *ctx) { + Scope scope(ctx); + QQmlXMLHttpRequestWrapper *w = ctx->thisObject.as<QQmlXMLHttpRequestWrapper>(); if (!w) V4THROW_REFERENCE("Not an XMLHttpRequest object"); @@ -1772,6 +1779,8 @@ ReturnedValue QQmlXMLHttpRequestCtor::method_send(SimpleCallContext *ctx) ReturnedValue QQmlXMLHttpRequestCtor::method_abort(SimpleCallContext *ctx) { + Scope scope(ctx); + QQmlXMLHttpRequestWrapper *w = ctx->thisObject.as<QQmlXMLHttpRequestWrapper>(); if (!w) V4THROW_REFERENCE("Not an XMLHttpRequest object"); @@ -1782,6 +1791,8 @@ ReturnedValue QQmlXMLHttpRequestCtor::method_abort(SimpleCallContext *ctx) ReturnedValue QQmlXMLHttpRequestCtor::method_getResponseHeader(SimpleCallContext *ctx) { + Scope scope(ctx); + QQmlXMLHttpRequestWrapper *w = ctx->thisObject.as<QQmlXMLHttpRequestWrapper>(); if (!w) V4THROW_REFERENCE("Not an XMLHttpRequest object"); @@ -1802,6 +1813,8 @@ ReturnedValue QQmlXMLHttpRequestCtor::method_getResponseHeader(SimpleCallContext ReturnedValue QQmlXMLHttpRequestCtor::method_getAllResponseHeaders(SimpleCallContext *ctx) { + Scope scope(ctx); + QQmlXMLHttpRequestWrapper *w = ctx->thisObject.as<QQmlXMLHttpRequestWrapper>(); if (!w) V4THROW_REFERENCE("Not an XMLHttpRequest object"); @@ -1823,6 +1836,8 @@ ReturnedValue QQmlXMLHttpRequestCtor::method_getAllResponseHeaders(SimpleCallCon // XMLHttpRequest properties ReturnedValue QQmlXMLHttpRequestCtor::method_get_readyState(SimpleCallContext *ctx) { + Scope scope(ctx); + QQmlXMLHttpRequestWrapper *w = ctx->thisObject.as<QQmlXMLHttpRequestWrapper>(); if (!w) V4THROW_REFERENCE("Not an XMLHttpRequest object"); @@ -1833,6 +1848,8 @@ ReturnedValue QQmlXMLHttpRequestCtor::method_get_readyState(SimpleCallContext *c ReturnedValue QQmlXMLHttpRequestCtor::method_get_status(SimpleCallContext *ctx) { + Scope scope(ctx); + QQmlXMLHttpRequestWrapper *w = ctx->thisObject.as<QQmlXMLHttpRequestWrapper>(); if (!w) V4THROW_REFERENCE("Not an XMLHttpRequest object"); @@ -1850,6 +1867,8 @@ ReturnedValue QQmlXMLHttpRequestCtor::method_get_status(SimpleCallContext *ctx) ReturnedValue QQmlXMLHttpRequestCtor::method_get_statusText(SimpleCallContext *ctx) { + Scope scope(ctx); + QQmlXMLHttpRequestWrapper *w = ctx->thisObject.as<QQmlXMLHttpRequestWrapper>(); if (!w) V4THROW_REFERENCE("Not an XMLHttpRequest object"); @@ -1869,6 +1888,8 @@ ReturnedValue QQmlXMLHttpRequestCtor::method_get_statusText(SimpleCallContext *c ReturnedValue QQmlXMLHttpRequestCtor::method_get_responseText(SimpleCallContext *ctx) { + Scope scope(ctx); + QQmlXMLHttpRequestWrapper *w = ctx->thisObject.as<QQmlXMLHttpRequestWrapper>(); if (!w) V4THROW_REFERENCE("Not an XMLHttpRequest object"); @@ -1885,6 +1906,8 @@ ReturnedValue QQmlXMLHttpRequestCtor::method_get_responseText(SimpleCallContext ReturnedValue QQmlXMLHttpRequestCtor::method_get_responseXML(SimpleCallContext *ctx) { + Scope scope(ctx); + QQmlXMLHttpRequestWrapper *w = ctx->thisObject.as<QQmlXMLHttpRequestWrapper>(); if (!w) V4THROW_REFERENCE("Not an XMLHttpRequest object"); diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp index 2a75bf9834..6389ad2715 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp +++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp @@ -949,29 +949,30 @@ See \l {Dynamic QML Object Creation from JavaScript} for more information on usi */ ReturnedValue QtObject::method_createQmlObject(SimpleCallContext *ctx) { + Scope scope(ctx); if (ctx->argumentCount < 2 || ctx->argumentCount > 3) V4THROW_ERROR("Qt.createQmlObject(): Invalid arguments"); struct Error { - static Value create(QV8Engine *engine, const QList<QQmlError> &errors) { + static ReturnedValue create(QV4::ExecutionEngine *v4, const QList<QQmlError> &errors) { + Scope scope(v4); QString errorstr = QLatin1String("Qt.createQmlObject(): failed to create object: "); - QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine); - QV4::ArrayObject *qmlerrors = v4->newArrayObject(); + QV4::Scoped<ArrayObject> qmlerrors(scope, v4->newArrayObject()); for (int ii = 0; ii < errors.count(); ++ii) { const QQmlError &error = errors.at(ii); errorstr += QLatin1String("\n ") + error.toString(); QV4::Object *qmlerror = v4->newObject(); qmlerror->put(v4->newString("lineNumber"), QV4::Value::fromInt32(error.line())); qmlerror->put(v4->newString("columnNumber"), QV4::Value::fromInt32(error.column())); - qmlerror->put(v4->newString("fileName"), engine->toString(error.url().toString())); - qmlerror->put(v4->newString("message"), engine->toString(error.description())); + qmlerror->put(v4->newString("fileName"), Value::fromString(v4->newString(error.url().toString()))); + qmlerror->put(v4->newString("message"), Value::fromString(v4->newString(error.description()))); qmlerrors->putIndexed(ii, QV4::Value::fromObject(qmlerror)); } - QV4::Object *errorObject = v4->newErrorObject(engine->toString(errorstr)); - errorObject->put(v4->newString("qmlErrors"), Value::fromObject(qmlerrors)); - return Value::fromObject(errorObject); + Scoped<Object> errorObject(scope, v4->newErrorObject(Value::fromString(v4->newString(errorstr)))); + errorObject->put(v4->newString("qmlErrors"), qmlerrors.asValue()); + return errorObject.asReturnedValue(); } }; @@ -1009,7 +1010,8 @@ ReturnedValue QtObject::method_createQmlObject(SimpleCallContext *ctx) component.setData(qml.toUtf8(), url); if (component.isError()) { - ctx->throwError(Error::create(v8engine, component.errors())); + ScopedValue v(scope, Error::create(ctx->engine, component.errors())); + ctx->throwError(v); return QV4::Encode::undefined(); } @@ -1033,7 +1035,8 @@ ReturnedValue QtObject::method_createQmlObject(SimpleCallContext *ctx) component.completeCreate(); if (component.isError()) { - ctx->throwError(Error::create(v8engine, component.errors())); + ScopedValue v(scope, Error::create(ctx->engine, component.errors())); + ctx->throwError(v); return QV4::Encode::undefined(); } diff --git a/src/qml/qml/v8/qv4domerrors_p.h b/src/qml/qml/v8/qv4domerrors_p.h index ed38886e15..ce6fb9edea 100644 --- a/src/qml/qml/v8/qv4domerrors_p.h +++ b/src/qml/qml/v8/qv4domerrors_p.h @@ -77,10 +77,10 @@ QT_BEGIN_NAMESPACE #define DOMEXCEPTION_TYPE_MISMATCH_ERR 17 #define V4THROW_DOM(error, string) { \ - QV4::Value v = QV4::Value::fromString(ctx, QStringLiteral(string)); \ - QV4::Object *ex = ctx->engine->newErrorObject(v); \ + QV4::ScopedValue v(scope, QV4::Value::fromString(ctx, QStringLiteral(string))); \ + QV4::Scoped<Object> ex(scope, ctx->engine->newErrorObject(v)); \ ex->put(ctx->engine->newIdentifier(QStringLiteral("code")), QV4::Value::fromInt32(error)); \ - ctx->throwError(QV4::Value::fromObject(ex)); \ + ctx->throwError(ex); \ } namespace QV4 { |