diff --git a/compiler/semcall.nim b/compiler/semcall.nim index 8d119d4b35..ae240f18e1 100644 --- a/compiler/semcall.nim +++ b/compiler/semcall.nim @@ -683,9 +683,11 @@ proc semResolvedCall(c: PContext, x: var TCandidate, assert x.state == csMatch var finalCallee = x.calleeSym let info = getCallLineInfo(n) + markUsed(c, info, finalCallee, isGenericInstance = false) + onUse(info, finalCallee) assert finalCallee.ast != nil if x.hasFauxMatch: - markUsed(c, info, finalCallee) + markUsed(c, info, finalCallee, isGenericInstance = true) onUse(info, finalCallee) result = x.call result[0] = newSymNode(finalCallee, getCallLineInfo(result[0])) @@ -721,7 +723,7 @@ proc semResolvedCall(c: PContext, x: var TCandidate, x.call.add tn else: internalAssert c.config, false - markUsed(c, info, finalCallee) + markUsed(c, info, finalCallee, isGenericInstance = true) onUse(info, finalCallee) result = x.call @@ -789,7 +791,9 @@ proc explicitGenericSym(c: PContext, n: PNode, s: PSym): PNode = var newInst = generateInstance(c, s, m.bindings, n.info) newInst.typ.flags.excl tfUnresolved let info = getCallLineInfo(n) - markUsed(c, info, newInst) + markUsed(c, info, s, isGenericInstance = false) + onUse(info, s) + markUsed(c, info, newInst, isGenericInstance = true) onUse(info, newInst) result = newSymNode(newInst, info) diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index 242dd4ec6f..df1b1804ad 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -96,7 +96,7 @@ type const isNilConversion = isConvertible # maybe 'isIntConv' fits better? -proc markUsed*(c: PContext; info: TLineInfo, s: PSym; checkStyle = true) +proc markUsed*(c: PContext; info: TLineInfo, s: PSym; checkStyle = true; isGenericInstance = false) proc markOwnerModuleAsUsed*(c: PContext; s: PSym) template hasFauxMatch*(c: TCandidate): bool = c.fauxMatch != tyNone diff --git a/compiler/suggest.nim b/compiler/suggest.nim index a5213086bd..611b813d35 100644 --- a/compiler/suggest.nim +++ b/compiler/suggest.nim @@ -696,7 +696,9 @@ proc markOwnerModuleAsUsed(c: PContext; s: PSym) = else: inc i -proc markUsed(c: PContext; info: TLineInfo; s: PSym; checkStyle = true) = +proc markUsed(c: PContext; info: TLineInfo; s: PSym; checkStyle = true; isGenericInstance = false) = + if isGenericInstance: + return let conf = c.config incl(s.flags, sfUsed) if s.kind == skEnumField and s.owner != nil: diff --git a/nimsuggest/tests/tgenerics.nim b/nimsuggest/tests/tgenerics.nim index ce26c3d26e..7f490321c0 100644 --- a/nimsuggest/tests/tgenerics.nim +++ b/nimsuggest/tests/tgenerics.nim @@ -14,5 +14,5 @@ main() discard """ $nimsuggest --tester $file >def $1 -def;;skProc;;tgenerics.printHelloValue.printHelloValue;;proc (hello: Hello[system.float]){.gcsafe, raises: [].};;$file;;5;;5;;"";;100 +def;;skProc;;tgenerics.printHelloValue;;proc (hello: Hello[printHelloValue.T]);;$file;;5;;5;;"";;100 """ diff --git a/nimsuggest/tests/tv3_generics.nim b/nimsuggest/tests/tv3_generics.nim index 4876f522f8..2bfb2ca1d6 100644 --- a/nimsuggest/tests/tv3_generics.nim +++ b/nimsuggest/tests/tv3_generics.nim @@ -14,5 +14,5 @@ main() discard """ $nimsuggest --v3 --tester $file >def $1 -def;;skProc;;tv3_generics.printHelloValue.printHelloValue;;proc (hello: Hello[system.float]){.gcsafe, raises: [].};;$file;;5;;5;;"";;100 +def;;skProc;;tv3_generics.printHelloValue;;proc (hello: Hello[printHelloValue.T]);;$file;;5;;5;;"";;100 """