mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
fixes #5628
This commit is contained in:
@@ -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)
|
||||
|
||||
29
tests/exception/tdont_overwrite_typename.nim
Normal file
29
tests/exception/tdont_overwrite_typename.nim
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user