diff options
Diffstat (limited to 'lib/system.nim')
-rw-r--r-- | lib/system.nim | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/system.nim b/lib/system.nim index 2b2ce7008..2f95b45f0 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -4117,3 +4117,17 @@ template doAssertRaises*(exception, code: untyped): typed = raiseAssert(astToStr(exception) & " wasn't raised, another error was raised instead by:\n"& astToStr(code)) + +when defined(cpp) and appType != "lib" and not defined(js) and + not defined(nimscript) and hostOS != "standalone": + proc setTerminate(handler: proc() {.noconv.}) + {.importc: "std::set_terminate", header: "<exception>".} + setTerminate proc() {.noconv.} = + # Remove ourself as a handler, reinstalling the default handler. + setTerminate(nil) + + let ex = getCurrentException() + let trace = ex.getStackTrace() + stderr.write trace & "Error: unhandled exception: " & ex.msg & + " [" & $ex.name & "]\n" + quit 1 |