aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/util
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-10-21 09:57:58 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-29 10:38:59 +0100
commitaf22149dd8daf593182fec978f15dc1667c9cf8d (patch)
tree17334ae83a3015fd6ca535fb9d2e97b40e1da825 /src/qml/util
parent2b996ca17fbc36029af3900933b6fcc1418afb6a (diff)
Avoid side effects when en exception has been thrown.
We don't want to check for exceptions after every single line on our runtime methods. A better way to handle this is to add the check in all methods that have direct side effects (as e.g. writing to a property of the JS stack). We also need to return whereever we throw an exception. To simplify the code, ExecutionContext::throwXxx methods now return a ReturnedValue (always undefined) for convenience. Change-Id: Ide6c804f819c731a3f14c6c43121d08029c9fb90 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/util')
-rw-r--r--src/qml/util/qqmladaptormodel.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/qml/util/qqmladaptormodel.cpp b/src/qml/util/qqmladaptormodel.cpp
index 39ebd6bd4c..e8efd46039 100644
--- a/src/qml/util/qqmladaptormodel.cpp
+++ b/src/qml/util/qqmladaptormodel.cpp
@@ -68,7 +68,7 @@ static QV4::ReturnedValue get_index(QV4::SimpleCallContext *ctx)
QV4::Scope scope(ctx);
QV4::Scoped<QQmlDelegateModelItemObject> o(scope, ctx->callData->thisObject.as<QQmlDelegateModelItemObject>());
if (!o)
- ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
+ return ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
return QV4::Encode(o->item->index);
}
@@ -200,7 +200,7 @@ public:
QV4::Scope scope(ctx);
QV4::Scoped<QQmlDelegateModelItemObject> o(scope, ctx->callData->thisObject.as<QQmlDelegateModelItemObject>());
if (!o)
- ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
+ return ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
const QQmlAdaptorModel *const model = static_cast<QQmlDMCachedModelData *>(o->item)->type->model;
if (o->item->index >= 0 && *model) {
@@ -344,7 +344,7 @@ QV4::ReturnedValue QQmlDMCachedModelData::get_property(QV4::SimpleCallContext *c
QV4::Scope scope(ctx);
QV4::Scoped<QQmlDelegateModelItemObject> o(scope, ctx->callData->thisObject.as<QQmlDelegateModelItemObject>());
if (!o)
- ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
+ return ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
QQmlDMCachedModelData *modelData = static_cast<QQmlDMCachedModelData *>(o->item);
if (o->item->index == -1) {
@@ -364,9 +364,9 @@ QV4::ReturnedValue QQmlDMCachedModelData::set_property(QV4::SimpleCallContext *c
QV4::Scope scope(ctx);
QV4::Scoped<QQmlDelegateModelItemObject> o(scope, ctx->callData->thisObject.as<QQmlDelegateModelItemObject>());
if (!o)
- ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
+ return ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
if (!ctx->callData->argc)
- ctx->throwTypeError();
+ return ctx->throwTypeError();
if (o->item->index == -1) {
QQmlDMCachedModelData *modelData = static_cast<QQmlDMCachedModelData *>(o->item);
@@ -584,7 +584,7 @@ public:
QV4::Scope scope(ctx);
QV4::Scoped<QQmlDelegateModelItemObject> o(scope, ctx->callData->thisObject.as<QQmlDelegateModelItemObject>());
if (!o)
- ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
+ return ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
return ctx->engine->v8Engine->fromVariant(static_cast<QQmlDMListAccessorData *>(o->item)->cachedData);
}
@@ -594,9 +594,9 @@ public:
QV4::Scope scope(ctx);
QV4::Scoped<QQmlDelegateModelItemObject> o(scope, ctx->callData->thisObject.as<QQmlDelegateModelItemObject>());
if (!o)
- ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
+ return ctx->throwTypeError(QStringLiteral("Not a valid VisualData object"));
if (!ctx->callData->argc)
- ctx->throwTypeError();
+ return ctx->throwTypeError();
static_cast<QQmlDMListAccessorData *>(o->item)->setModelData(ctx->engine->v8Engine->toVariant(ctx->callData->args[0], QVariant::Invalid));
return QV4::Encode::undefined();