@@ -124,13 +124,22 @@ proc isFloatLit*(t: PType): bool {.inline.} =
124124 result = t.kind == tyFloat and t.n != nil and t.n.kind == nkFloatLit
125125
126126proc addDeclaredLoc * (result: var string , conf: ConfigRef ; sym: PSym ) =
127- # result.add " [declared in " & conf$sym.info & "]"
128- result .add " [declared in " & toFileLineCol (conf, sym.info) & " ]"
127+ result .add " [$1 declared in $2]" % [sym.kind.toHumanStr, toFileLineCol (conf, sym.info)]
129128
130129proc addDeclaredLocMaybe * (result: var string , conf: ConfigRef ; sym: PSym ) =
131- if optDeclaredLocs in conf.globalOptions:
130+ if optDeclaredLocs in conf.globalOptions and sym != nil :
132131 addDeclaredLoc (result , conf, sym)
133132
133+ proc addDeclaredLoc (result: var string , conf: ConfigRef ; typ: PType ) =
134+ let typ = typ.skipTypes (abstractInst - {tyRange})
135+ result .add " [$1" % typ.kind.toHumanStr
136+ if typ.sym != nil :
137+ result .add " declared in " & toFileLineCol (conf, typ.sym.info)
138+ result .add " ]"
139+
140+ proc addDeclaredLocMaybe * (result: var string , conf: ConfigRef ; typ: PType ) =
141+ if optDeclaredLocs in conf.globalOptions: addDeclaredLoc (result , conf, typ)
142+
134143proc addTypeHeader * (result: var string , conf: ConfigRef ; typ: PType ; prefer: TPreferedDesc = preferMixed; getDeclarationPath = true ) =
135144 result .add typeToString (typ, prefer)
136145 if getDeclarationPath: result .addDeclaredLoc (conf, typ.sym)
@@ -1473,12 +1482,19 @@ proc skipHiddenSubConv*(n: PNode; idgen: IdGenerator): PNode =
14731482
14741483proc typeMismatch * (conf: ConfigRef ; info: TLineInfo , formal, actual: PType ) =
14751484 if formal.kind != tyError and actual.kind != tyError:
1476- let named = typeToString (formal)
1485+ let actualStr = typeToString (actual)
1486+ let formalStr = typeToString (formal)
14771487 let desc = typeToString (formal, preferDesc)
1478- let x = if named == desc: named else : named & " = " & desc
1479- var msg = " type mismatch: got <" &
1480- typeToString (actual) & " > " &
1481- " but expected '" & x & " '"
1488+ let x = if formalStr == desc: formalStr else : formalStr & " = " & desc
1489+ let verbose = actualStr == formalStr or optDeclaredLocs in conf.globalOptions
1490+ var msg = " type mismatch:"
1491+ if verbose: msg.add " \n "
1492+ msg.add " got <$1>" % actualStr
1493+ if verbose:
1494+ msg.addDeclaredLoc (conf, actual)
1495+ msg.add " \n "
1496+ msg.add " but expected '$1'" % x
1497+ if verbose: msg.addDeclaredLoc (conf, formal)
14821498
14831499 if formal.kind == tyProc and actual.kind == tyProc:
14841500 case compatibleEffects (formal, actual)
0 commit comments