aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-09-13 21:54:21 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-18 13:14:10 +0200
commite4e90923c93adfafb23c81be7359e8df2a500b4f (patch)
tree36be927b72606c4f37326089ff3c6261f484c92b /src/qml/qml
parent9dcc12d52343960400192c817f54a16f7e1f8247 (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.cpp6
-rw-r--r--src/qml/qml/qqmlvaluetypewrapper.cpp10
-rw-r--r--src/qml/qml/qqmlxmlhttprequest.cpp27
-rw-r--r--src/qml/qml/v8/qqmlbuiltinfunctions.cpp23
-rw-r--r--src/qml/qml/v8/qv4domerrors_p.h6
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 {