aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmljavascriptexpression.cpp
diff options
context:
space:
mode:
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