From 30c99a84409f52261b124affcd06ea04ee8e23cd Mon Sep 17 00:00:00 2001 From: Araq Date: Thu, 30 Mar 2017 12:53:32 +0200 Subject: [PATCH] fixes #5628 --- lib/system/excpt.nim | 5 ++-- tests/exception/tdont_overwrite_typename.nim | 29 ++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 tests/exception/tdont_overwrite_typename.nim diff --git a/lib/system/excpt.nim b/lib/system/excpt.nim index bae5de9d35..8ed1fbb38e 100644 --- a/lib/system/excpt.nim +++ b/lib/system/excpt.nim @@ -73,7 +73,8 @@ proc popSafePoint {.compilerRtl, inl.} = excHandler = excHandler.prev proc pushCurrentException(e: ref Exception) {.compilerRtl, inl.} = - e.parent = currException + #if e.parent.isNil: + # e.parent = currException currException = e proc popCurrentException {.compilerRtl, inl.} = @@ -279,7 +280,7 @@ proc raiseExceptionAux(e: ref Exception) = quitOrDebug() proc raiseException(e: ref Exception, ename: cstring) {.compilerRtl.} = - e.name = ename + if e.name.isNil: e.name = ename when hasSomeStackTrace: e.trace = "" rawWriteStackTrace(e.trace) diff --git a/tests/exception/tdont_overwrite_typename.nim b/tests/exception/tdont_overwrite_typename.nim new file mode 100644 index 0000000000..147ccc0010 --- /dev/null +++ b/tests/exception/tdont_overwrite_typename.nim @@ -0,0 +1,29 @@ +discard """ + output: '''Check passed +Check passed''' +""" + +# bug #5628 + +proc checkException(ex: ref Exception) = + doAssert(ex.name == "ValueError") + doAssert(ex.msg == "SecondException") + doAssert(ex.parent != nil) + doAssert(ex.parent.name == "KeyError") + doAssert(ex.parent.msg == "FirstException") + echo "Check passed" + +var e: ref Exception +try: + try: + raise newException(KeyError, "FirstException") + except: + raise newException(ValueError, "SecondException", getCurrentException()) +except: + e = getCurrentException() + +try: + checkException(e) # passes here + raise e +except ValueError: + checkException(getCurrentException()) # fails here