mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-20 22:35:24 +00:00
reserve sysFatal for Defect (#22158)
Per manual, `panics:on` affects _only_ `Defect`:s - thus `sysFatal`
should not redirect any other exceptions.
Also, when `sysFatal` is used in `nimPanics` mode, it should use regular
exception handling pipeline to ensure exception hooks are called
consistently for all raised defects.
(cherry picked from commit 58c44312af)
This commit is contained in:
@@ -392,7 +392,7 @@ proc llRecv(q: PRawChannel, res: pointer, typ: PNimType) =
|
||||
q.ready = false
|
||||
if typ != q.elemType:
|
||||
releaseSys(q.lock)
|
||||
sysFatal(ValueError, "cannot receive message of wrong type")
|
||||
raise newException(ValueError, "cannot receive message of wrong type")
|
||||
rawRecv(q, res, typ)
|
||||
if q.maxItems > 0 and q.count == q.maxItems - 1:
|
||||
# Parent thread is awaiting in send. Wake it up.
|
||||
|
||||
@@ -16,19 +16,19 @@ const
|
||||
when hostOS == "standalone":
|
||||
include "$projectpath/panicoverride"
|
||||
|
||||
func sysFatal(exceptn: typedesc, message: string) {.inline.} =
|
||||
func sysFatal(exceptn: typedesc[Defect], message: string) {.inline.} =
|
||||
panic(message)
|
||||
|
||||
func sysFatal(exceptn: typedesc, message, arg: string) {.inline.} =
|
||||
func sysFatal(exceptn: typedesc[Defect], message, arg: string) {.inline.} =
|
||||
rawoutput(message)
|
||||
panic(arg)
|
||||
|
||||
elif (quirkyExceptions or defined(nimPanics)) and not defined(nimscript):
|
||||
elif quirkyExceptions and not defined(nimscript):
|
||||
import ansi_c
|
||||
|
||||
func name(t: typedesc): string {.magic: "TypeTrait".}
|
||||
|
||||
func sysFatal(exceptn: typedesc, message, arg: string) {.inline, noreturn.} =
|
||||
func sysFatal(exceptn: typedesc[Defect], message, arg: string) {.inline, noreturn.} =
|
||||
when nimvm:
|
||||
# TODO when doAssertRaises works in CT, add a test for it
|
||||
raise (ref exceptn)(msg: message & arg)
|
||||
@@ -45,14 +45,14 @@ elif (quirkyExceptions or defined(nimPanics)) and not defined(nimscript):
|
||||
cstderr.rawWrite buf
|
||||
rawQuit 1
|
||||
|
||||
func sysFatal(exceptn: typedesc, message: string) {.inline, noreturn.} =
|
||||
func sysFatal(exceptn: typedesc[Defect], message: string) {.inline, noreturn.} =
|
||||
sysFatal(exceptn, message, "")
|
||||
|
||||
else:
|
||||
func sysFatal(exceptn: typedesc, message: string) {.inline, noreturn.} =
|
||||
func sysFatal(exceptn: typedesc[Defect], message: string) {.inline, noreturn.} =
|
||||
raise (ref exceptn)(msg: message)
|
||||
|
||||
func sysFatal(exceptn: typedesc, message, arg: string) {.inline, noreturn.} =
|
||||
func sysFatal(exceptn: typedesc[Defect], message, arg: string) {.inline, noreturn.} =
|
||||
raise (ref exceptn)(msg: message & arg)
|
||||
|
||||
{.pop.}
|
||||
|
||||
Reference in New Issue
Block a user