diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-06-12 17:03:01 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2013-06-13 08:51:52 +0200 |
commit | ebc31ca3c4a6a49c274f82af52a2e1b6cace30b7 (patch) | |
tree | 5e80ad3dacc2aad47289d577994a58e875dce3d7 /src/qml/qml/qqmljavascriptexpression.cpp | |
parent | b8f92eef13b30a6ddf3a6e5dbf1a89b5e24cfdc7 (diff) |
Fix syntax error propagation
For syntax errors we use the DiagnosticMessage type in qv4context.cpp,
that contains detailed information about the error. We must catch that
error correctly in QQmlVME::run and report it to the engine.
Change-Id: I8f53c7db8dbdc6afa72396f3c25537690a6f5841
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/qml/qqmljavascriptexpression.cpp')
-rw-r--r-- | src/qml/qml/qqmljavascriptexpression.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/qml/qml/qqmljavascriptexpression.cpp b/src/qml/qml/qqmljavascriptexpression.cpp index 6670948efb..820e5002ed 100644 --- a/src/qml/qml/qqmljavascriptexpression.cpp +++ b/src/qml/qml/qqmljavascriptexpression.cpp @@ -46,6 +46,7 @@ #include <private/qv4value_p.h> #include <private/qv4functionobject_p.h> #include <private/qv4script_p.h> +#include <private/qv4errorobject_p.h> QT_BEGIN_NAMESPACE @@ -291,14 +292,24 @@ QQmlDelayedError *QQmlJavaScriptExpression::delayedError() void QQmlJavaScriptExpression::exceptionToError(const QV4::Exception &e, QQmlError &error) { - QV4::ExecutionEngine::StackTrace trace = e.stackTrace(); - if (!trace.isEmpty()) { - QV4::ExecutionEngine::StackFrame frame = trace.first(); - error.setUrl(QUrl(frame.source)); - error.setLine(frame.line); - error.setColumn(-1); + QV4::ErrorObject *errorObj = e.value().asErrorObject(); + if (errorObj && errorObj->subtype == QV4::ErrorObject::SyntaxError) { + QV4::DiagnosticMessage *msg = static_cast<QV4::SyntaxErrorObject*>(errorObj)->message(); + error.setUrl(QUrl(msg->fileName)); + error.setLine(msg->startLine); + error.setColumn(msg->startColumn); + error.setDescription(msg->message); + // ### FIXME: support msg->next + } else { + QV4::ExecutionEngine::StackTrace trace = e.stackTrace(); + if (!trace.isEmpty()) { + QV4::ExecutionEngine::StackFrame frame = trace.first(); + error.setUrl(QUrl(frame.source)); + error.setLine(frame.line); + error.setColumn(-1); + } + error.setDescription(e.value().toQString()); } - error.setDescription(e.value().toQString()); } QV4::PersistentValue |