From 80a6005f55a23b0d0e065e8d5754c5e2cf4eb965 Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Wed, 8 May 2024 23:10:48 +0800 Subject: [PATCH] fixes #22409; don't check style for enumFieldSymChoice in the function (#23580) fixes #22409 (cherry picked from commit 1ad4e80060f22275b2f443bd8630e2573619e487) --- compiler/semexprs.nim | 6 +++--- compiler/sigmatch.nim | 2 +- compiler/suggest.nim | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index 69f7efa970..436b6d0b1f 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -2966,7 +2966,7 @@ proc getNilType(c: PContext): PType = result.align = c.config.target.ptrSize.int16 c.nilTypeCache = result -proc enumFieldSymChoice(c: PContext, n: PNode, s: PSym): PNode = +proc enumFieldSymChoice(c: PContext, n: PNode, s: PSym; flags: TExprFlags): PNode = var o: TOverloadIter var i = 0 var a = initOverloadIter(o, c, n) @@ -2979,7 +2979,7 @@ proc enumFieldSymChoice(c: PContext, n: PNode, s: PSym): PNode = if i <= 1: if sfGenSym notin s.flags: result = newSymNode(s, info) - markUsed(c, info, s) + markUsed(c, info, s, efInCall notin flags) onUse(info, s) else: result = n @@ -3069,7 +3069,7 @@ proc semExpr(c: PContext, n: PNode, flags: TExprFlags = {}, expectedType: PType if optOwnedRefs in c.config.globalOptions: result.typ = makeVarType(c, result.typ, tyOwned) of skEnumField: - result = enumFieldSymChoice(c, n, s) + result = enumFieldSymChoice(c, n, s, flags) else: result = semSym(c, n, s, flags) if expectedType != nil and isSymChoice(result): diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index 488b494e80..96dd44d766 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -94,7 +94,7 @@ type const isNilConversion = isConvertible # maybe 'isIntConv' fits better? -proc markUsed*(c: PContext; info: TLineInfo, s: PSym) +proc markUsed*(c: PContext; info: TLineInfo, s: PSym; checkStyle = true) 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 636c7457c6..7d2b067aee 100644 --- a/compiler/suggest.nim +++ b/compiler/suggest.nim @@ -642,7 +642,7 @@ proc markOwnerModuleAsUsed(c: PContext; s: PSym) = else: inc i -proc markUsed(c: PContext; info: TLineInfo; s: PSym) = +proc markUsed(c: PContext; info: TLineInfo; s: PSym; checkStyle = true) = let conf = c.config incl(s.flags, sfUsed) if s.kind == skEnumField and s.owner != nil: @@ -659,7 +659,8 @@ proc markUsed(c: PContext; info: TLineInfo; s: PSym) = if sfError in s.flags: userError(conf, info, s) when defined(nimsuggest): suggestSym(c.graph, info, s, c.graph.usageSym, false) - styleCheckUse(c, info, s) + if checkStyle: + styleCheckUse(c, info, s) markOwnerModuleAsUsed(c, s) proc safeSemExpr*(c: PContext, n: PNode): PNode =