summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesper K. Pedersen <jesper.pedersen@kdab.com>2013-04-25 17:26:14 +0200
committerJesper K. Pedersen <jesper.pedersen@kdab.com>2013-04-30 06:53:33 +0200
commitfee8bd788e7ee8c2c90fd2ebc49c22e7a1b6672d (patch)
tree2088d649b4448406d12919bfd75f84d0e028fe38
parent74ac0a518fcb79f14ab655ce68d424c034f6b846 (diff)
improve error handling
Change-Id: Id134d873cb1171c9f8b5cad90254828d93776cbd Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
-rw-r--r--scriptmanager.cpp2
-rw-r--r--scriptrunner.cpp11
-rw-r--r--scriptrunner.h3
3 files changed, 12 insertions, 4 deletions
diff --git a/scriptmanager.cpp b/scriptmanager.cpp
index 95f1130..be3f780 100644
--- a/scriptmanager.cpp
+++ b/scriptmanager.cpp
@@ -143,7 +143,7 @@ void ScriptManager::runFile(const QString &fileName)
Utils::NormalMessageFormat);
ErrorMessage message = m_runner->runScript(fileName);
if (message.hasError)
- Core::MessageManager::instance()->printToOutputPane(tr("Error at line %1: %2\n").arg(message.line).arg(message.message),
+ Core::MessageManager::instance()->printToOutputPane(tr("Error in %1 at line %3: %4\n").arg(message.fileName).arg(message.line).arg(message.message),
Utils::ErrorMessageFormat);
else
Core::MessageManager::instance()->printToOutputPane(tr("The script exited normally\n"),
diff --git a/scriptrunner.cpp b/scriptrunner.cpp
index 411da03..0d99d42 100644
--- a/scriptrunner.cpp
+++ b/scriptrunner.cpp
@@ -69,6 +69,10 @@ ScriptRunner::~ScriptRunner()
// Path to the topmost script loaded.
static QString currentPath;
+// The backtrace does unfortunately not include the file in which an error occurred,
+// we therefore need this variable to store this information.
+static QString errorFileName;
+
static QScriptValue run(QScriptEngine* engine, const QString& fileName, bool recursive)
{
QFile file(fileName);
@@ -88,6 +92,8 @@ static QScriptValue run(QScriptEngine* engine, const QString& fileName, bool rec
}
QScriptValue result = engine->evaluate(sourceCode, fileName);
+ if (engine->hasUncaughtException() && errorFileName.isNull() )
+ errorFileName = fileName;
return result;
}
@@ -111,6 +117,7 @@ static QScriptValue load(QScriptContext *context, QScriptEngine *engine)
ErrorMessage ScriptRunner::runScript(const QString fileName)
{
+ errorFileName = QString();
currentPath = QFileInfo(fileName).absolutePath();
ensureEngineInitialized();
@@ -125,8 +132,8 @@ ErrorMessage ScriptRunner::runScript(const QString fileName)
if (editorManager->currentEditor())
editorManager->currentEditor()->widget()->setFocus(Qt::OtherFocusReason);
- if ( failed)
- return ErrorMessage(m_engine->uncaughtExceptionLineNumber(), result.toString());
+ if (failed)
+ return ErrorMessage(errorFileName, m_engine->uncaughtExceptionLineNumber(), result.toString());
return ErrorMessage();
}
diff --git a/scriptrunner.h b/scriptrunner.h
index 9d1dc5e..86dea44 100644
--- a/scriptrunner.h
+++ b/scriptrunner.h
@@ -43,9 +43,10 @@ namespace Internal {
struct ErrorMessage {
ErrorMessage() : hasError(false) {}
- ErrorMessage(int line, const QString& message) : hasError(true), line(line), message(message) {}
+ ErrorMessage(const QString& fileName, int line, const QString& message) : hasError(true), fileName(fileName), line(line), message(message) {}
bool hasError;
+ QString fileName;
int line;
QString message;
};