fixes #21231; template with module as parameter elides usage/checking of module name specifier (#22109)

* fixes #21231; template with module as parameter elides usage/checking of module name specifier

* add a test case
This commit is contained in:
ringabout
2023-06-21 22:30:55 +08:00
committed by GitHub
parent eb2f0353bc
commit ac7b8b678c
2 changed files with 13 additions and 0 deletions

View File

@@ -623,6 +623,9 @@ proc qualifiedLookUp*(c: PContext, n: PNode, flags: set[TLookupFlag]): PSym =
result = errorUndeclaredIdentifierHint(c, n[1], ident)
elif n[1].kind == nkSym:
result = n[1].sym
if result.owner != nil and result.owner != m and checkUndeclared in flags:
# dotExpr in templates can end up here
result = errorUndeclaredIdentifierHint(c, n[1], considerQuotedIdent(c, n[1]))
elif checkUndeclared in flags and
n[1].kind notin {nkOpenSymChoice, nkClosedSymChoice}:
localError(c.config, n[1].info, "identifier expected, but got: " &

10
tests/template/t21231.nim Normal file
View File

@@ -0,0 +1,10 @@
discard """
errormsg: "undeclared identifier: 'x'"
"""
var x: int
# bug #21231
template f(y: untyped) = echo y.x
for i in 1 .. 10:
x = i
f(system)