summary refs log tree commit diff stats
path: root/lib/system/refs_v2.nim
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2020-01-01 10:01:49 +0100
committerGitHub <noreply@github.com>2020-01-01 10:01:49 +0100
commitc3344862b0d6061cc1581f29c81b29b75c78615a (patch)
tree75661179ec450bb4e2783603c09f4304dfe42a45 /lib/system/refs_v2.nim
parent8a63caca07349742d071dcd3a7d3e3055fe617cf (diff)
downloadNim-c3344862b0d6061cc1581f29c81b29b75c78615a.tar.gz
--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.
Diffstat (limited to 'lib/system/refs_v2.nim')
-rw-r--r--lib/system/refs_v2.nim2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/system/refs_v2.nim b/lib/system/refs_v2.nim
index 6fd34fca6..e07c33086 100644
--- a/lib/system/refs_v2.nim
+++ b/lib/system/refs_v2.nim
@@ -111,7 +111,7 @@ proc nimRawDispose(p: pointer) {.compilerRtl.} =
 template dispose*[T](x: owned(ref T)) = nimRawDispose(cast[pointer](x))
 #proc dispose*(x: pointer) = nimRawDispose(x)
 
-proc nimDestroyAndDispose(p: pointer) {.compilerRtl.} =
+proc nimDestroyAndDispose(p: pointer) {.compilerRtl, raises: [].} =
   let d = cast[ptr PNimType](p)[].destructor
   if d != nil: cast[DestructorProc](d)(p)
   when false: