summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2023-06-21 22:30:55 +0800
committerGitHub <noreply@github.com>2023-06-21 16:30:55 +0200
commitac7b8b678c9e8eff70bb8147d411664470a882fd (patch)
tree4759d2cf0287670aa6042f4de6c91f3f088f464a
parenteb2f0353bcf46cd250c6bdd7b754904feef3df8a (diff)
downloadNim-ac7b8b678c9e8eff70bb8147d411664470a882fd.tar.gz
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
-rw-r--r--compiler/lookups.nim3
-rw-r--r--tests/template/t21231.nim10
2 files changed, 13 insertions, 0 deletions
diff --git a/compiler/lookups.nim b/compiler/lookups.nim
index dce841e2f..17eedca92 100644
--- a/compiler/lookups.nim
+++ b/compiler/lookups.nim
@@ -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: " &
diff --git a/tests/template/t21231.nim b/tests/template/t21231.nim
new file mode 100644
index 000000000..51e96cdd6
--- /dev/null
+++ b/tests/template/t21231.nim
@@ -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)