fixes #5628
This commit is contained in:
parent
2740bcddaa
commit
30c99a8440
2 changed files with 32 additions and 2 deletions
|
|
@ -73,7 +73,8 @@ proc popSafePoint {.compilerRtl, inl.} =
|
||||||
excHandler = excHandler.prev
|
excHandler = excHandler.prev
|
||||||
|
|
||||||
proc pushCurrentException(e: ref Exception) {.compilerRtl, inl.} =
|
proc pushCurrentException(e: ref Exception) {.compilerRtl, inl.} =
|
||||||
e.parent = currException
|
#if e.parent.isNil:
|
||||||
|
# e.parent = currException
|
||||||
currException = e
|
currException = e
|
||||||
|
|
||||||
proc popCurrentException {.compilerRtl, inl.} =
|
proc popCurrentException {.compilerRtl, inl.} =
|
||||||
|
|
@ -279,7 +280,7 @@ proc raiseExceptionAux(e: ref Exception) =
|
||||||
quitOrDebug()
|
quitOrDebug()
|
||||||
|
|
||||||
proc raiseException(e: ref Exception, ename: cstring) {.compilerRtl.} =
|
proc raiseException(e: ref Exception, ename: cstring) {.compilerRtl.} =
|
||||||
e.name = ename
|
if e.name.isNil: e.name = ename
|
||||||
when hasSomeStackTrace:
|
when hasSomeStackTrace:
|
||||||
e.trace = ""
|
e.trace = ""
|
||||||
rawWriteStackTrace(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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue