1# 2# 3# Nim's Runtime Library 4# (c) Copyright 2019 Andreas Rumpf 5# 6# See the file "copying.txt", included in this 7# distribution, for details about the copyright. 8# 9 10{.push profiler: off.} 11 12when defined(nimHasExceptionsQuery): 13 const gotoBasedExceptions = compileOption("exceptions", "goto") 14else: 15 const gotoBasedExceptions = false 16 17when hostOS == "standalone": 18 include "$projectpath/panicoverride" 19 20 proc sysFatal(exceptn: typedesc, message: string) {.inline.} = 21 panic(message) 22 23 proc sysFatal(exceptn: typedesc, message, arg: string) {.inline.} = 24 rawoutput(message) 25 panic(arg) 26 27elif (defined(nimQuirky) or defined(nimPanics)) and not defined(nimscript): 28 import ansi_c 29 30 proc name(t: typedesc): string {.magic: "TypeTrait".} 31 32 proc sysFatal(exceptn: typedesc, message, arg: string) {.inline, noreturn.} = 33 when nimvm: 34 # TODO when doAssertRaises works in CT, add a test for it 35 raise (ref exceptn)(msg: message & arg) 36 else: 37 writeStackTrace() 38 var buf = newStringOfCap(200) 39 add(buf, "Error: unhandled exception: ") 40 add(buf, message) 41 add(buf, arg) 42 add(buf, " [") 43 add(buf, name exceptn) 44 add(buf, "]\n") 45 cstderr.rawWrite buf 46 quit 1 47 48 proc sysFatal(exceptn: typedesc, message: string) {.inline, noreturn.} = 49 sysFatal(exceptn, message, "") 50 51else: 52 proc sysFatal(exceptn: typedesc, message: string) {.inline, noreturn.} = 53 raise (ref exceptn)(msg: message) 54 55 proc sysFatal(exceptn: typedesc, message, arg: string) {.inline, noreturn.} = 56 raise (ref exceptn)(msg: message & arg) 57 58{.pop.} 59