diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2012-11-28 11:00:23 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2012-11-28 12:31:20 +0100 |
commit | 4bd20c2ac36c59eb72acc71bc78ddbc058199666 (patch) | |
tree | ecf040f99ed7872ab578c4b3984204350c88ba4e /main.cpp | |
parent | 61460c785907049567120e07dcadd714fff93cdb (diff) |
Throw a SyntaxError instead of printing an error message.
Change-Id: I94ef8a4f2bea80bc3689b104e381a9dc134439fa
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'main.cpp')
-rw-r--r-- | main.cpp | 28 |
1 files changed, 25 insertions, 3 deletions
@@ -108,10 +108,32 @@ struct TestHarnessError: FunctionObject static void showException(QQmlJS::VM::ExecutionContext *ctx) { - if (QQmlJS::VM::ErrorObject *e = ctx->engine->exception.asErrorObject()) - std::cerr << "Uncaught exception: " << qPrintable(e->value.toString(ctx)->toQString()) << std::endl; - else + QQmlJS::VM::ErrorObject *e = ctx->engine->exception.asErrorObject(); + if (!e) { std::cerr << "Uncaught exception: " << qPrintable(ctx->engine->exception.toString(ctx)->toQString()) << std::endl; + return; + } + + if (QQmlJS::VM::SyntaxErrorObject *err = e->asSyntaxError()) { + QQmlJS::VM::DiagnosticMessage *msg = err->message(); + if (!msg) { + std::cerr << "Uncaught exception: Syntax error" << std::endl; + return; + } + + for (; msg; msg = msg->next) { + if (msg->fileName) + std::cerr << qPrintable(msg->fileName->toQString()); + std::cerr << ':' << msg->startLine << ':' << msg->startColumn << ": "; + if (msg->type == QQmlJS::VM::DiagnosticMessage::Error) + std::cerr << "error"; + else + std::cerr << "warning"; + std::cerr << ": " << qPrintable(msg->message->toQString()) << std::endl; + } + } else { + std::cerr << "Uncaught exception: " << qPrintable(e->value.toString(ctx)->toQString()) << std::endl; + } } #ifndef QMLJS_NO_LLVM |