@@ -246,10 +246,18 @@ proc presentFailedCandidates(c: PContext, n: PNode, errors: CandidateErrors):
246
246
candidates.add (getProcHeader (c.config, err.sym, prefer))
247
247
candidates.addDeclaredLocMaybe (c.config, err.sym)
248
248
candidates.add (" \n " )
249
- let nArg = if err.firstMismatch.arg < n.len: n[err.firstMismatch.arg] else : nil
249
+ const genericParamMismatches = {kGenericParamTypeMismatch, kExtraGenericParam, kMissingGenericParam}
250
+ let isGenericMismatch = err.firstMismatch.kind in genericParamMismatches
251
+ var argList = n
252
+ if isGenericMismatch and n[0 ].kind == nkBracketExpr:
253
+ argList = n[0 ]
254
+ let nArg =
255
+ if err.firstMismatch.arg < argList.len:
256
+ argList[err.firstMismatch.arg]
257
+ else :
258
+ nil
250
259
let nameParam = if err.firstMismatch.formal != nil : err.firstMismatch.formal.name.s else : " "
251
260
if n.len > 1 :
252
- const genericParamMismatches = {kGenericParamTypeMismatch, kExtraGenericParam, kMissingGenericParam}
253
261
if verboseTypeMismatch notin c.config.legacyFeatures:
254
262
case err.firstMismatch.kind
255
263
of kUnknownNamedParam:
@@ -309,7 +317,7 @@ proc presentFailedCandidates(c: PContext, n: PNode, errors: CandidateErrors):
309
317
var wanted = err.firstMismatch.formal.typ
310
318
if wanted.kind == tyGenericParam and wanted.genericParamHasConstraints:
311
319
wanted = wanted.genericConstraint
312
- let got = arg.typ
320
+ let got = arg.typ. skipTypes ({tyTypeDesc})
313
321
doAssert err.firstMismatch.formal != nil
314
322
doAssert wanted != nil
315
323
doAssert got != nil
@@ -350,34 +358,27 @@ proc presentFailedCandidates(c: PContext, n: PNode, errors: CandidateErrors):
350
358
of kMissingGenericParam:
351
359
candidates.add (" \n missing generic parameter: " & nameParam)
352
360
of kTypeMismatch, kGenericParamTypeMismatch, kVarNeeded:
353
- var arg: PNode = nArg
354
- let genericMismatch = err.firstMismatch.kind == kGenericParamTypeMismatch
355
- if genericMismatch:
356
- let pos = err.firstMismatch.arg
357
- doAssert n[0 ].kind == nkBracketExpr and pos < n[0 ].len
358
- arg = n[0 ][pos]
359
- else :
360
- arg = nArg
361
- doAssert arg != nil
361
+ doAssert nArg != nil
362
362
var wanted = err.firstMismatch.formal.typ
363
- if genericMismatch and wanted.kind == tyGenericParam and
363
+ if isGenericMismatch and wanted.kind == tyGenericParam and
364
364
wanted.genericParamHasConstraints:
365
365
wanted = wanted.genericConstraint
366
366
doAssert err.firstMismatch.formal != nil
367
367
candidates.add (" \n required type for " & nameParam & " : " )
368
368
candidates.addTypeDeclVerboseMaybe (c.config, wanted)
369
369
candidates.add " \n but expression '"
370
370
if err.firstMismatch.kind == kVarNeeded:
371
- candidates.add renderNotLValue (arg )
371
+ candidates.add renderNotLValue (nArg )
372
372
candidates.add " ' is immutable, not 'var'"
373
373
else :
374
- candidates.add renderTree (arg )
374
+ candidates.add renderTree (nArg )
375
375
candidates.add " ' is of type: "
376
- let got = arg.typ
376
+ var got = nArg.typ
377
+ if isGenericMismatch: got = got.skipTypes ({tyTypeDesc})
377
378
candidates.addTypeDeclVerboseMaybe (c.config, got)
378
- if arg .kind in nkSymChoices:
379
+ if nArg .kind in nkSymChoices:
379
380
candidates.add " \n "
380
- candidates.add ambiguousIdentifierMsg (arg , indent = 2 )
381
+ candidates.add ambiguousIdentifierMsg (nArg , indent = 2 )
381
382
doAssert wanted != nil
382
383
if got != nil :
383
384
if got.kind == tyProc and wanted.kind == tyProc:
0 commit comments