diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/system/excpt.nim | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/system/excpt.nim b/lib/system/excpt.nim index 7d5f5af7f..20ca143ca 100644 --- a/lib/system/excpt.nim +++ b/lib/system/excpt.nim @@ -381,6 +381,8 @@ proc raiseExceptionAux(e: ref Exception) = xadd(buf, s, s.len) var buf: array[0..2000, char] var L = 0 + if e.trace.len != 0: + add(buf, $e.trace) # gc allocation add(buf, "Error: unhandled exception: ") add(buf, e.msg) add(buf, " [") @@ -394,7 +396,7 @@ proc raiseExceptionAux(e: ref Exception) = showErrorMessage(tbuf()) quitOrDebug() -proc raiseException(e: ref Exception, ename: cstring) {.compilerRtl.} = +proc raiseExceptionEx(e: ref Exception, ename, procname, filename: cstring, line: int) {.compilerRtl.} = if e.name.isNil: e.name = ename when hasSomeStackTrace: if e.trace.len == 0: @@ -403,8 +405,14 @@ proc raiseException(e: ref Exception, ename: cstring) {.compilerRtl.} = e.trace.add reraisedFrom(reraisedFromBegin) auxWriteStackTrace(framePtr, e.trace) e.trace.add reraisedFrom(reraisedFromEnd) + else: + if procname != nil and filename != nil: + e.trace.add StackTraceEntry(procname: procname, filename: filename, line: line) raiseExceptionAux(e) +proc raiseException(e: ref Exception, ename: cstring) {.compilerRtl.} = + raiseExceptionEx(e, ename, nil, nil, 0) + proc reraiseException() {.compilerRtl.} = if currException == nil: sysFatal(ReraiseError, "no exception to reraise") |