rewritten goto based exception handling; much cleaner implementation;… (#13677)
* rewritten goto based exception handling; much cleaner implementation; fixes #13668
This commit is contained in:
parent
b737bb4be0
commit
fe7b1dfb2a
4 changed files with 79 additions and 26 deletions
69
tests/destructor/tgotoexceptions8.nim
Normal file
69
tests/destructor/tgotoexceptions8.nim
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
discard """
|
||||
output: '''A
|
||||
B
|
||||
X
|
||||
inner finally
|
||||
Y
|
||||
outer finally
|
||||
msg1
|
||||
msg2
|
||||
finally2
|
||||
finally1'''
|
||||
cmd: "nim c --gc:arc $file"
|
||||
"""
|
||||
|
||||
# bug #13668
|
||||
|
||||
proc main =
|
||||
try:
|
||||
try:
|
||||
raise newException(IOError, "IOError")
|
||||
|
||||
except:
|
||||
echo "A"
|
||||
raise newException(CatchableError, "CatchableError")
|
||||
|
||||
except:
|
||||
echo "B"
|
||||
#discard
|
||||
|
||||
proc mainB =
|
||||
try:
|
||||
try:
|
||||
raise newException(IOError, "IOError")
|
||||
|
||||
except:
|
||||
echo "X"
|
||||
raise newException(CatchableError, "CatchableError")
|
||||
finally:
|
||||
echo "inner finally"
|
||||
|
||||
except:
|
||||
echo "Y"
|
||||
#discard
|
||||
finally:
|
||||
echo "outer finally"
|
||||
|
||||
main()
|
||||
mainB()
|
||||
|
||||
when true:
|
||||
#bug 7204
|
||||
proc nested_finally =
|
||||
try:
|
||||
raise newException(KeyError, "msg1")
|
||||
except KeyError as ex:
|
||||
echo ex.msg
|
||||
try:
|
||||
# pop exception
|
||||
raise newException(ValueError, "msg2") # push: exception stack (1 entry)
|
||||
except:
|
||||
echo getCurrentExceptionMsg()
|
||||
# pop exception (except)
|
||||
finally:
|
||||
echo "finally2"
|
||||
# pop exception (except KeyError as ex)
|
||||
finally:
|
||||
echo "finally1"
|
||||
|
||||
nested_finally()
|
||||
Loading…
Add table
Add a link
Reference in a new issue