--exception:goto switch for deterministic exception handling (#12977)
This implements "deterministic" exception handling for Nim based on goto instead of setjmp. This means raising an exception is much cheaper than in C++'s table based implementations. Supports hard realtime systems. Default for --gc:arc and the C target because it's generally a good idea and arc is all about deterministic behavior. Note: This implies that fatal runtime traps are not catchable anymore! This needs to be documented.
This commit is contained in:
parent
8a63caca07
commit
c3344862b0
23 changed files with 640 additions and 183 deletions
|
|
@ -3105,7 +3105,7 @@ when not defined(js):
|
|||
when defined(nimV2):
|
||||
type
|
||||
TNimNode {.compilerproc.} = object # to keep the code generator simple
|
||||
DestructorProc = proc (p: pointer) {.nimcall, benign.}
|
||||
DestructorProc = proc (p: pointer) {.nimcall, benign, raises: [].}
|
||||
TNimType {.compilerproc.} = object
|
||||
destructor: pointer
|
||||
size: int
|
||||
|
|
@ -3120,6 +3120,12 @@ when not defined(js):
|
|||
|
||||
{.pop.}
|
||||
|
||||
when not defined(js) and not defined(nimscript):
|
||||
proc writeStackTrace*() {.tags: [], gcsafe, raises: [].}
|
||||
## Writes the current stack trace to ``stderr``. This is only works
|
||||
## for debug builds. Since it's usually used for debugging, this
|
||||
## is proclaimed to have no IO effect!
|
||||
|
||||
when not declared(sysFatal):
|
||||
include "system/fatal"
|
||||
|
||||
|
|
@ -3693,10 +3699,6 @@ when not defined(JS): #and not defined(nimscript):
|
|||
proc unsetControlCHook*()
|
||||
## Reverts a call to setControlCHook.
|
||||
|
||||
proc writeStackTrace*() {.tags: [], gcsafe.}
|
||||
## Writes the current stack trace to ``stderr``. This is only works
|
||||
## for debug builds. Since it's usually used for debugging, this
|
||||
## is proclaimed to have no IO effect!
|
||||
when hostOS != "standalone":
|
||||
proc getStackTrace*(): string {.gcsafe.}
|
||||
## Gets the current stack trace. This only works for debug builds.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue