honor --declaredLocs in more places, including type mismatch errors; also show kind with --declaredLocs (#15673)
* honor --declaredLocs in more places, including type mismatch errors * fix tests * show declaration location also when type mismatch names clash
This commit is contained in:
parent
218acfe367
commit
0fb878324e
7 changed files with 40 additions and 24 deletions
|
|
@ -124,13 +124,22 @@ proc isFloatLit*(t: PType): bool {.inline.} =
|
|||
result = t.kind == tyFloat and t.n != nil and t.n.kind == nkFloatLit
|
||||
|
||||
proc addDeclaredLoc*(result: var string, conf: ConfigRef; sym: PSym) =
|
||||
# result.add " [declared in " & conf$sym.info & "]"
|
||||
result.add " [declared in " & toFileLineCol(conf, sym.info) & "]"
|
||||
result.add " [$1 declared in $2]" % [sym.kind.toHumanStr, toFileLineCol(conf, sym.info)]
|
||||
|
||||
proc addDeclaredLocMaybe*(result: var string, conf: ConfigRef; sym: PSym) =
|
||||
if optDeclaredLocs in conf.globalOptions:
|
||||
if optDeclaredLocs in conf.globalOptions and sym != nil:
|
||||
addDeclaredLoc(result, conf, sym)
|
||||
|
||||
proc addDeclaredLoc(result: var string, conf: ConfigRef; typ: PType) =
|
||||
let typ = typ.skipTypes(abstractInst - {tyRange})
|
||||
result.add " [$1" % typ.kind.toHumanStr
|
||||
if typ.sym != nil:
|
||||
result.add " declared in " & toFileLineCol(conf, typ.sym.info)
|
||||
result.add "]"
|
||||
|
||||
proc addDeclaredLocMaybe*(result: var string, conf: ConfigRef; typ: PType) =
|
||||
if optDeclaredLocs in conf.globalOptions: addDeclaredLoc(result, conf, typ)
|
||||
|
||||
proc addTypeHeader*(result: var string, conf: ConfigRef; typ: PType; prefer: TPreferedDesc = preferMixed; getDeclarationPath = true) =
|
||||
result.add typeToString(typ, prefer)
|
||||
if getDeclarationPath: result.addDeclaredLoc(conf, typ.sym)
|
||||
|
|
@ -1473,12 +1482,19 @@ proc skipHiddenSubConv*(n: PNode; idgen: IdGenerator): PNode =
|
|||
|
||||
proc typeMismatch*(conf: ConfigRef; info: TLineInfo, formal, actual: PType) =
|
||||
if formal.kind != tyError and actual.kind != tyError:
|
||||
let named = typeToString(formal)
|
||||
let actualStr = typeToString(actual)
|
||||
let formalStr = typeToString(formal)
|
||||
let desc = typeToString(formal, preferDesc)
|
||||
let x = if named == desc: named else: named & " = " & desc
|
||||
var msg = "type mismatch: got <" &
|
||||
typeToString(actual) & "> " &
|
||||
"but expected '" & x & "'"
|
||||
let x = if formalStr == desc: formalStr else: formalStr & " = " & desc
|
||||
let verbose = actualStr == formalStr or optDeclaredLocs in conf.globalOptions
|
||||
var msg = "type mismatch:"
|
||||
if verbose: msg.add "\n"
|
||||
msg.add " got <$1>" % actualStr
|
||||
if verbose:
|
||||
msg.addDeclaredLoc(conf, actual)
|
||||
msg.add "\n"
|
||||
msg.add " but expected '$1'" % x
|
||||
if verbose: msg.addDeclaredLoc(conf, formal)
|
||||
|
||||
if formal.kind == tyProc and actual.kind == tyProc:
|
||||
case compatibleEffects(formal, actual)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue