Skip to content

Commit 7b1fe38

Browse files
authored
improve error messages for bugs (#1090)
ref #1066 The `error` procs have been extensively used for error reporting. In these cases below, they are actually bugs instead of errors. We can also replace existing `doAssert` usages for bug reporting with `bug` procs. It corresponds to `internalError` in Nim
1 parent b9da714 commit 7b1fe38

File tree

4 files changed

+26
-14
lines changed

4 files changed

+26
-14
lines changed

src/nimony/derefs.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ proc takeParRi(c: var Context; n: var Cursor) =
6262
c.dest.add n
6363
inc n
6464
else:
65-
error "expected ')', but got: ", n
65+
bug "expected ')', but got: ", n
6666

6767
proc rootOf(n: Cursor; allowIndirection = false): SymId =
6868
var n = n

src/nimony/programs.nim

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,24 +134,36 @@ proc loadInterface*(suffix: string; iface: var Iface;
134134
mergeFilter(exportFilter, filter)
135135
exports.add (path, ensureMove exportFilter)
136136

137-
proc error*(msg: string; c: Cursor) {.noreturn.} =
137+
template reportImpl(msg: string; c: Cursor; level: string) =
138138
when defined(debug):
139139
writeStackTrace()
140-
write stdout, "[Error] "
140+
write stdout, level
141141
if isValid(c.info):
142142
write stdout, infoToStr(c.info)
143143
write stdout, " "
144144
write stdout, msg
145145
writeLine stdout, toString(c, false)
146146
quit 1
147147

148-
proc error*(msg: string) {.noreturn.} =
148+
template reportImpl(msg: string; level: string) =
149149
when defined(debug):
150150
writeStackTrace()
151-
write stdout, "[Error] "
151+
write stdout, level
152152
write stdout, msg
153153
quit 1
154154

155+
proc error*(msg: string; c: Cursor) {.noreturn.} =
156+
reportImpl(msg, c, "[Error] ")
157+
158+
proc error*(msg: string) {.noreturn.} =
159+
reportImpl(msg, "[Error] ")
160+
161+
proc bug*(msg: string; c: Cursor) {.noreturn.} =
162+
reportImpl(msg, c, "[Bug] ")
163+
164+
proc bug*(msg: string) {.noreturn.} =
165+
reportImpl(msg, "[Bug] ")
166+
155167
type
156168
LoadStatus* = enum
157169
LacksModuleName, LacksOffset, LacksPosition, LacksNothing
@@ -303,13 +315,13 @@ proc takeParRi*(dest: var TokenBuf; n: var Cursor) =
303315
dest.add n
304316
inc n
305317
else:
306-
error "expected ')', but got: ", n
318+
bug "expected ')', but got: ", n
307319

308320
proc skipParRi*(n: var Cursor) =
309321
if n.kind == ParRi:
310322
inc n
311323
else:
312-
error "expected ')', but got: ", n
324+
bug "expected ')', but got: ", n
313325

314326
template isLocalDecl*(s: SymId): bool =
315327
extractModule(pool.syms[s]) == ""

src/nimony/sem.nim

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -787,7 +787,7 @@ proc addFn(c: var SemContext; fn: FnCandidate; fnOrig: Cursor; m: var Match): Ma
787787
c.dest.add n
788788
inc n
789789
if n.kind != ParRi:
790-
error "broken `magic`: expected ')', but got: ", n
790+
bug "broken `magic`: expected ')', but got: ", n
791791
if result == NonMagicCall:
792792
c.dest.add symToken(fn.sym, fnOrig.info)
793793
else:
@@ -1112,7 +1112,7 @@ proc semBaseobj(c: var SemContext; it: var Item) =
11121112
# we will recompute it via `typematch` below:
11131113
inc it.n
11141114
else:
1115-
error("expected integer literal in `baseobj` construct")
1115+
bug("expected integer literal in `baseobj` construct")
11161116
var m = createMatch(addr c)
11171117

11181118
var arg = Item(n: it.n, typ: c.types.autoType)
@@ -2696,7 +2696,7 @@ proc semConceptType(c: var SemContext; n: var Cursor) =
26962696
declareConceptSelf c, n.info
26972697
skip n # skip dot or previous `Self` declaration
26982698
if n.stmtKind != StmtsS:
2699-
error "(stmts) expected, but got: ", n
2699+
bug "(stmts) expected, but got: ", n
27002700
takeToken c, n
27012701
let oldScopeKind = c.currentScope.kind
27022702
withNewScope c:
@@ -3481,7 +3481,7 @@ proc semLocal(c: var SemContext; n: var Cursor; kind: SymKind) =
34813481
n = it.n
34823482
patchType c, it.typ, beforeType
34833483
else:
3484-
assert false, "bug"
3484+
bug "semLocal"
34853485
c.addSym delayed
34863486
takeParRi c, n
34873487
if kind == LetY:
@@ -3957,7 +3957,7 @@ proc semProc(c: var SemContext; it: var Item; kind: SymKind; pass: PassKind) =
39573957
case pass
39583958
of checkGenericInst:
39593959
if it.n.stmtKind != StmtsS:
3960-
error "(stmts) expected, but got ", it.n
3960+
bug "(stmts) expected, but got ", it.n
39613961
c.openScope() # open body scope
39623962
takeToken c, it.n
39633963
var resId = SymId(0)
@@ -3978,7 +3978,7 @@ proc semProc(c: var SemContext; it: var Item; kind: SymKind; pass: PassKind) =
39783978

39793979
of checkBody:
39803980
if it.n.stmtKind != StmtsS:
3981-
error "(stmts) expected, but got ", it.n
3981+
bug "(stmts) expected, but got ", it.n
39823982
c.openScope() # open body scope
39833983
var resId = SymId(0)
39843984
if UntypedP in crucial.flags and c.routine.inGeneric > 0: # includes templates

src/nimony/sembasics.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ proc takeParRi*(c: var SemContext; n: var Cursor) =
394394
c.dest.add n
395395
inc n
396396
else:
397-
error "expected ')', but got: ", n
397+
bug "expected ')', but got: ", n
398398

399399
proc takeToken*(c: var SemContext; n: var Cursor) {.inline.} =
400400
c.dest.add n

0 commit comments

Comments
 (0)