Nim/tests/destructor/tgotoexceptions8.nim
Andreas Rumpf fe7b1dfb2a
rewritten goto based exception handling; much cleaner implementation;… (#13677)
* rewritten goto based exception handling; much cleaner implementation; fixes #13668
2020-03-17 23:18:43 +01:00

69 lines
1.1 KiB
Nim

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()