diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2019-02-18 15:23:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-18 15:23:05 +0100 |
commit | 2deb1e354fb7eba063c125579af04911f14382ed (patch) | |
tree | d27830529923022bd975fac7b23a606b7d1fcb28 /lib | |
parent | 1d66222901f0812bf5ffd5fc4e8175acb1948c9e (diff) | |
download | Nim-2deb1e354fb7eba063c125579af04911f14382ed.tar.gz |
fixes #10702 (#10705)
* --define:nimQuirky exception handling for Nim; in preparation of a blog post * make it work with latest system.nim * make code more readable * fixes #10702
Diffstat (limited to 'lib')
-rw-r--r-- | lib/system.nim | 20 | ||||
-rw-r--r-- | lib/system/excpt.nim | 2 |
2 files changed, 21 insertions, 1 deletions
diff --git a/lib/system.nim b/lib/system.nim index d92848d40..268d6ccd3 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -3015,6 +3015,9 @@ template newException*(exceptn: typedesc, message: string; when hostOS == "standalone": include "$projectpath/panicoverride" +when not defined(js) and not defined(nimscript): + include "system/ansi_c" + when not declared(sysFatal): {.push profiler: off.} when hostOS == "standalone": @@ -3024,6 +3027,22 @@ when not declared(sysFatal): proc sysFatal(exceptn: typedesc, message, arg: string) {.inline.} = rawoutput(message) panic(arg) + elif defined(nimQuirky) and not defined(nimscript): + proc name(t: typedesc): string {.magic: "TypeTrait".} + + proc sysFatal(exceptn: typedesc, message, arg: string) {.inline, noReturn.} = + var buf = newStringOfCap(200) + add(buf, "Error: unhandled exception: ") + add(buf, message) + add(buf, arg) + add(buf, " [") + add(buf, name exceptn) + add(buf, "]") + cstderr.rawWrite buf + quit 1 + + proc sysFatal(exceptn: typedesc, message: string) {.inline, noReturn.} = + sysFatal(exceptn, message, "") else: proc sysFatal(exceptn: typedesc, message: string) {.inline, noReturn.} = var e: ref exceptn @@ -3170,7 +3189,6 @@ when not defined(JS): #and not defined(nimscript): {.pop.} when not defined(nimscript): - include "system/ansi_c" include "system/memory" proc zeroMem(p: pointer, size: Natural) = diff --git a/lib/system/excpt.nim b/lib/system/excpt.nim index dbdd038a4..93fd693e0 100644 --- a/lib/system/excpt.nim +++ b/lib/system/excpt.nim @@ -354,6 +354,8 @@ proc raiseExceptionAux(e: ref Exception) = raiseCounter.inc # skip zero at overflow e.raiseId = raiseCounter {.emit: "`e`->raise();".} + elif defined(nimQuirky): + pushCurrentException(e) else: if excHandler != nil: if not excHandler.hasRaiseAction or excHandler.raiseAction(e): |