From c3344862b0d6061cc1581f29c81b29b75c78615a Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Wed, 1 Jan 2020 10:01:49 +0100 Subject: --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. --- lib/system/refs_v2.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/system/refs_v2.nim') 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: -- cgit 1.4.1-2-gfad0