diff options
-rw-r--r-- | lib/system/excpt.nim | 4 | ||||
-rw-r--r-- | tests/destructor/tgotoexceptions4.nim | 40 |
2 files changed, 42 insertions, 2 deletions
diff --git a/lib/system/excpt.nim b/lib/system/excpt.nim index e241879c2..931f3f640 100644 --- a/lib/system/excpt.nim +++ b/lib/system/excpt.nim @@ -452,8 +452,8 @@ proc raiseExceptionAux(e: sink(ref Exception)) {.nodestroy.} = # XXX This check should likely also be done in the setjmp case below. if e != currException: pushCurrentException(e) - when gotoBasedExceptions: - inc nimInErrorMode + when gotoBasedExceptions: + inc nimInErrorMode else: if excHandler != nil: pushCurrentException(e) diff --git a/tests/destructor/tgotoexceptions4.nim b/tests/destructor/tgotoexceptions4.nim new file mode 100644 index 000000000..918169084 --- /dev/null +++ b/tests/destructor/tgotoexceptions4.nim @@ -0,0 +1,40 @@ +discard """ + cmd: "nim c --gc:arc --exceptions:goto $file" + output: '''caught in gun +caught in fun +caughtsome msgMyExcept +in finally +caught1''' +""" + +when true: + # bug #13070 + type MyExcept = object of CatchableError + proc gun() = + try: + raise newException(MyExcept, "some msg") + except Exception as eab: + echo "caught in gun" + raise eab + + proc fun() = + try: + gun() + except Exception as e: + echo "caught in fun" + echo("caught", e.msg, e.name) + finally: + echo "in finally" + fun() + +when true: + # bug #13072 + type MyExceptB = object of CatchableError + proc gunB() = + raise newException(MyExceptB, "some msg") + proc funB() = + try: + gunB() + except CatchableError: + echo "caught1" + funB() |