fix js stacktraces, unify all file,line,col formatting into a single function (#14230)
* fix https://github.com/timotheecour/Nim/issues/135 ; unify all file,line,col formatting into a single function
This commit is contained in:
parent
6b7b5fb4fa
commit
c28a057a6b
7 changed files with 68 additions and 46 deletions
|
|
@ -1,17 +1,17 @@
|
|||
when not declared(sysFatal):
|
||||
include "system/fatal"
|
||||
|
||||
import std/private/miscdollars
|
||||
# ---------------------------------------------------------------------------
|
||||
# helpers
|
||||
|
||||
type InstantiationInfo = tuple[filename: string, line: int, column: int]
|
||||
|
||||
proc `$`(x: int): string {.magic: "IntToStr", noSideEffect.}
|
||||
|
||||
proc `$`(info: InstantiationInfo): string =
|
||||
# The +1 is needed here
|
||||
# instead of overriding `$` (and changing its meaning), consider explicit name.
|
||||
info.filename & "(" & $info.line & ", " & $(info.column+1) & ")"
|
||||
result.toLocation(info.filename, info.line, info.column+1)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@
|
|||
# Exception handling code. Carefully coded so that tiny programs which do not
|
||||
# use the heap (and nor exceptions) do not include the GC or memory allocator.
|
||||
|
||||
import std/private/miscdollars
|
||||
|
||||
var
|
||||
errorMessageWriter*: (proc(msg: string) {.tags: [WriteIOEffect], benign,
|
||||
nimcall.})
|
||||
|
|
@ -240,11 +242,7 @@ proc auxWriteStackTrace(f: PFrame; s: var seq[StackTraceEntry]) =
|
|||
|
||||
template addFrameEntry(s: var string, f: StackTraceEntry|PFrame) =
|
||||
var oldLen = s.len
|
||||
add(s, f.filename)
|
||||
if f.line > 0:
|
||||
add(s, '(')
|
||||
add(s, $f.line)
|
||||
add(s, ')')
|
||||
s.toLocation(f.filename, f.line, 0)
|
||||
for k in 1..max(1, 25-(s.len-oldLen)): add(s, ' ')
|
||||
add(s, f.procname)
|
||||
when NimStackTraceMsgs:
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
#
|
||||
|
||||
include system/indexerrors
|
||||
import std/private/miscdollars
|
||||
|
||||
proc log*(s: cstring) {.importc: "console.log", varargs, nodecl.}
|
||||
|
||||
|
|
@ -70,7 +71,7 @@ proc getCurrentExceptionMsg*(): string =
|
|||
|
||||
proc auxWriteStackTrace(f: PCallFrame): string =
|
||||
type
|
||||
TempFrame = tuple[procname: cstring, line: int]
|
||||
TempFrame = tuple[procname: cstring, line: int, filename: cstring]
|
||||
var
|
||||
it = f
|
||||
i = 0
|
||||
|
|
@ -79,6 +80,7 @@ proc auxWriteStackTrace(f: PCallFrame): string =
|
|||
while it != nil and i <= high(tempFrames):
|
||||
tempFrames[i].procname = it.procname
|
||||
tempFrames[i].line = it.line
|
||||
tempFrames[i].filename = it.filename
|
||||
inc(i)
|
||||
inc(total)
|
||||
it = it.prev
|
||||
|
|
@ -92,10 +94,9 @@ proc auxWriteStackTrace(f: PCallFrame): string =
|
|||
add(result, $(total-i))
|
||||
add(result, " calls omitted) ...\n")
|
||||
for j in countdown(i-1, 0):
|
||||
result.toLocation($tempFrames[j].filename, tempFrames[j].line, 0)
|
||||
add(result, " at ")
|
||||
add(result, tempFrames[j].procname)
|
||||
if tempFrames[j].line > 0:
|
||||
add(result, ", line: ")
|
||||
add(result, $tempFrames[j].line)
|
||||
add(result, "\n")
|
||||
|
||||
proc rawWriteStackTrace(): string =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue