aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main.cpp9
-rw-r--r--qv4isel_llvm.cpp4
2 files changed, 9 insertions, 4 deletions
diff --git a/main.cpp b/main.cpp
index f5f51c3016..bdd5b37dd9 100644
--- a/main.cpp
+++ b/main.cpp
@@ -169,15 +169,18 @@ int evaluateCompiledCode(const QStringList &files)
globalObject->setProperty(ctx, vm.identifier(QStringLiteral("print")),
QQmlJS::VM::Value::fromObject(new builtins::Print(ctx)));
- code(ctx);
-
- if (ctx->hasUncaughtException) {
+ void * buf = __qmljs_create_exception_handler(ctx);
+ if (setjmp(*(jmp_buf *)buf)) {
if (VM::ErrorObject *e = ctx->result.asErrorObject())
std::cerr << "Uncaught exception: " << qPrintable(e->value.toString(ctx)->toQString()) << std::endl;
else
std::cerr << "Uncaught exception: " << qPrintable(ctx->result.toString(ctx)->toQString()) << std::endl;
+ return -2;
}
+
+ code(ctx);
}
+
return 0;
}
diff --git a/qv4isel_llvm.cpp b/qv4isel_llvm.cpp
index 040111f5ac..9e35e6ef56 100644
--- a/qv4isel_llvm.cpp
+++ b/qv4isel_llvm.cpp
@@ -935,7 +935,9 @@ void LLVMInstructionSelection::genCallName(IR::Call *e, llvm::Value *result)
_llvmValue = llvm::UndefValue::get(_valueTy);
return;
- Q_UNREACHABLE();
+ default:
+ Q_UNREACHABLE();
+ }
} else {
llvm::Value *name = getIdentifier(*base->id);