--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
|
|
@ -1,5 +1,39 @@
|
|||
discard """
|
||||
output: "B1\nA1\n1\nB1\nB2\ncatch\nA1\n1\nB1\nA1\nA2\n2\nB1\nB2\ncatch\nA1\nA2\n0\nB1\nA1\n1\nB1\nB2\nA1\n1\nB1\nA1\nA2\n2\nB1\nB2\nA1\nA2\n3"
|
||||
output: '''
|
||||
B1
|
||||
A1
|
||||
1
|
||||
B1
|
||||
B2
|
||||
catch
|
||||
A1
|
||||
1
|
||||
B1
|
||||
A1
|
||||
A2
|
||||
2
|
||||
B1
|
||||
B2
|
||||
catch
|
||||
A1
|
||||
A2
|
||||
0
|
||||
B1
|
||||
A1
|
||||
1
|
||||
B1
|
||||
B2
|
||||
A1
|
||||
1
|
||||
B1
|
||||
A1
|
||||
A2
|
||||
2
|
||||
B1
|
||||
B2
|
||||
A1
|
||||
A2
|
||||
3'''
|
||||
"""
|
||||
|
||||
# More thorough test of return-in-finaly
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue