From 6bf9265d24c6243cd5cf9e10f7fe766fa5372396 Mon Sep 17 00:00:00 2001 From: metagn Date: Fri, 31 Jan 2025 10:44:44 +0300 Subject: [PATCH] add ambiguous identifier message to generic instantiations (#24646) fixes #24644 Another option is to include the symbol names and owners in the type listing as in #24645 but this is a bit verbose. (cherry picked from commit 0861dabfa70f40f00c5c95d58c344ad5e0fd19ec) --- compiler/semtypes.nim | 5 +++++ tests/errmsgs/tambtypegeneric.nim | 11 +++++++++++ 2 files changed, 16 insertions(+) create mode 100644 tests/errmsgs/tambtypegeneric.nim diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index 5f33df5c7d..cc16fd3c0e 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -1671,6 +1671,11 @@ proc semGeneric(c: PContext, n: PNode, s: PSym, prev: PType): PType = var err = "cannot instantiate " err.addTypeHeader(c.config, t) err.add "\ngot: <$1>\nbut expected: <$2>" % [describeArgs(c, n), describeArgs(c, t.n, 0)] + if m.firstMismatch.kind == kTypeMismatch and m.firstMismatch.arg < n.len: + let nArg = n[m.firstMismatch.arg] + if nArg.kind in nkSymChoices: + err.add "\n" + err.add ambiguousIdentifierMsg(nArg) localError(c.config, n.info, errGenerated, err) return newOrPrevType(tyError, prev, c) diff --git a/tests/errmsgs/tambtypegeneric.nim b/tests/errmsgs/tambtypegeneric.nim new file mode 100644 index 0000000000..ed42ff6cf9 --- /dev/null +++ b/tests/errmsgs/tambtypegeneric.nim @@ -0,0 +1,11 @@ +import "."/[mambtype1, mambtype2] +type H[K] = object +proc b(_: int) = # slightly different, still not useful, error message if `b` generic + proc r(): H[Y] = discard #[tt.Error + ^ cannot instantiate H [type declared in tambtypegeneric.nim(2, 6)] +got: +but expected: +ambiguous identifier: 'Y' -- use one of the following: + mambtype1.Y: Y + mambtype2.Y: Y]# +b(0)