mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 08:54:53 +00:00
Remove side-effects from sysFatal with panics on (#20632)
This commit is contained in:
@@ -17,42 +17,43 @@ else:
|
||||
when hostOS == "standalone":
|
||||
include "$projectpath/panicoverride"
|
||||
|
||||
proc sysFatal(exceptn: typedesc, message: string) {.inline.} =
|
||||
func sysFatal(exceptn: typedesc, message: string) {.inline.} =
|
||||
panic(message)
|
||||
|
||||
proc sysFatal(exceptn: typedesc, message, arg: string) {.inline.} =
|
||||
func sysFatal(exceptn: typedesc, message, arg: string) {.inline.} =
|
||||
rawoutput(message)
|
||||
panic(arg)
|
||||
|
||||
elif (defined(nimQuirky) or defined(nimPanics)) and not defined(nimscript):
|
||||
import ansi_c
|
||||
|
||||
proc name(t: typedesc): string {.magic: "TypeTrait".}
|
||||
func name(t: typedesc): string {.magic: "TypeTrait".}
|
||||
|
||||
proc sysFatal(exceptn: typedesc, message, arg: string) {.inline, noreturn.} =
|
||||
func sysFatal(exceptn: typedesc, message, arg: string) {.inline, noreturn.} =
|
||||
when nimvm:
|
||||
# TODO when doAssertRaises works in CT, add a test for it
|
||||
raise (ref exceptn)(msg: message & arg)
|
||||
else:
|
||||
writeStackTrace()
|
||||
var buf = newStringOfCap(200)
|
||||
add(buf, "Error: unhandled exception: ")
|
||||
add(buf, message)
|
||||
add(buf, arg)
|
||||
add(buf, " [")
|
||||
add(buf, name exceptn)
|
||||
add(buf, "]\n")
|
||||
cstderr.rawWrite buf
|
||||
{.noSideEffect.}:
|
||||
writeStackTrace()
|
||||
var buf = newStringOfCap(200)
|
||||
add(buf, "Error: unhandled exception: ")
|
||||
add(buf, message)
|
||||
add(buf, arg)
|
||||
add(buf, " [")
|
||||
add(buf, name exceptn)
|
||||
add(buf, "]\n")
|
||||
cstderr.rawWrite buf
|
||||
quit 1
|
||||
|
||||
proc sysFatal(exceptn: typedesc, message: string) {.inline, noreturn.} =
|
||||
func sysFatal(exceptn: typedesc, message: string) {.inline, noreturn.} =
|
||||
sysFatal(exceptn, message, "")
|
||||
|
||||
else:
|
||||
proc sysFatal(exceptn: typedesc, message: string) {.inline, noreturn.} =
|
||||
func sysFatal(exceptn: typedesc, message: string) {.inline, noreturn.} =
|
||||
raise (ref exceptn)(msg: message)
|
||||
|
||||
proc sysFatal(exceptn: typedesc, message, arg: string) {.inline, noreturn.} =
|
||||
func sysFatal(exceptn: typedesc, message, arg: string) {.inline, noreturn.} =
|
||||
raise (ref exceptn)(msg: message & arg)
|
||||
|
||||
{.pop.}
|
||||
|
||||
8
tests/exception/t20613.nim
Normal file
8
tests/exception/t20613.nim
Normal file
@@ -0,0 +1,8 @@
|
||||
discard """
|
||||
matrix: "; --panics:on"
|
||||
"""
|
||||
|
||||
func test =
|
||||
if 0 > 10:
|
||||
raiseAssert "hey"
|
||||
test()
|
||||
Reference in New Issue
Block a user