process non-language pragma nodes in generics (#24254)

fixes #18649, refs #24183

Same as in #24183 for templates, we now process pragma nodes in generics
so that macro symbols are captured and the pragma arguments are checked,
but ignoring language pragma keywords.

A difference is that we cannot process call nodes as is, we have to
process their children individually so that the early untyped
macro/template instantiation in generics does not kick in.

(cherry picked from commit d72b848d17)
This commit is contained in:
metagn
2024-10-08 00:18:45 +03:00
committed by narimiran
parent 336549c49d
commit b8efee444c
4 changed files with 37 additions and 1 deletions

View File

@@ -0,0 +1,3 @@
macro aMacro*(u:untyped):untyped =
echo "in macro"
result = u

View File

@@ -0,0 +1,6 @@
import mpragma1
proc p*[T]() =
proc inner() {.aMacro.} =
discard
inner()
discard

View File

@@ -0,0 +1,10 @@
discard """
nimout: '''
in macro
'''
"""
# issue #18649
import mpragma2
p[string]()