aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmljavascriptexpression.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-06-12 17:03:01 +0200
committerLars Knoll <lars.knoll@digia.com>2013-06-13 08:51:52 +0200
commitebc31ca3c4a6a49c274f82af52a2e1b6cace30b7 (patch)
tree5e80ad3dacc2aad47289d577994a58e875dce3d7 /src/qml/qml/qqmljavascriptexpression.cpp
parentb8f92eef13b30a6ddf3a6e5dbf1a89b5e24cfdc7 (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.cpp25
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