* Error -> Defect for defects The distinction between Error and Defect is subjective, context-dependent and somewhat arbitrary, so when looking at an exception, it's hard to guess what it is - this happens often when looking at a `raises` list _without_ opening the corresponding definition and digging through layers of inheritance. With the help of a little consistency in naming, it's at least possible to start disentangling the two error types and the standard lib can set a good example here.
39 lines
569 B
Nim
39 lines
569 B
Nim
discard """
|
|
output: '''
|
|
before
|
|
swallowed
|
|
before
|
|
swallowed B
|
|
'''
|
|
cmd: "nim c --gc:arc --exceptions:goto $file"
|
|
"""
|
|
|
|
# bug #13599
|
|
proc main() =
|
|
try:
|
|
echo "before"
|
|
raise newException(CatchableError, "foo")
|
|
except AssertionDefect:
|
|
echo "caught"
|
|
echo "after"
|
|
|
|
try:
|
|
main()
|
|
except:
|
|
echo "swallowed"
|
|
|
|
proc mainB() =
|
|
try:
|
|
echo "before"
|
|
raise newException(CatchableError, "foo")
|
|
# except CatchableError: # would work
|
|
except AssertionDefect:
|
|
echo "caught"
|
|
except:
|
|
raise
|
|
echo "after"
|
|
|
|
try:
|
|
mainB()
|
|
except:
|
|
echo "swallowed B"
|