mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 01:14:41 +00:00
Allow pragmas on parameters (#15178)
This commit is contained in:
@@ -1234,7 +1234,7 @@ proc semProcTypeNode(c: PContext, n, genericParams: PNode,
|
||||
if typ == nil:
|
||||
typ = def.typ
|
||||
if isEmptyContainer(typ):
|
||||
localError(c.config, a.info, "cannot infer the type of parameter '" & a[0].ident.s & "'")
|
||||
localError(c.config, a.info, "cannot infer the type of parameter '" & $a[0] & "'")
|
||||
|
||||
if typ.kind == tyTypeDesc:
|
||||
# consider a proc such as:
|
||||
@@ -1265,7 +1265,7 @@ proc semProcTypeNode(c: PContext, n, genericParams: PNode,
|
||||
continue
|
||||
|
||||
for j in 0..<a.len-2:
|
||||
var arg = newSymG(skParam, a[j], c)
|
||||
var arg = newSymG(skParam, if a[j].kind == nkPragmaExpr: a[j][0] else: a[j], c)
|
||||
if not hasType and not hasDefault and kind notin {skTemplate, skMacro}:
|
||||
let param = strTableGet(c.signatures, arg.name)
|
||||
if param != nil: typ = param.typ
|
||||
|
||||
@@ -15,6 +15,7 @@ wth
|
||||
0
|
||||
(total: 6)
|
||||
S1
|
||||
5
|
||||
'''
|
||||
"""
|
||||
# bug #1915
|
||||
@@ -321,3 +322,17 @@ block: #Gensymmed sym sharing forward decl
|
||||
newProc(sym, body = newStmtList()),
|
||||
)
|
||||
genGenMacro
|
||||
|
||||
# inject pragma on params
|
||||
|
||||
template test(procname, body: untyped): untyped =
|
||||
proc procname(data {.inject.}: var int = 0) =
|
||||
body
|
||||
|
||||
test(hello):
|
||||
echo data
|
||||
data = 3
|
||||
|
||||
var data = 5
|
||||
|
||||
hello(data)
|
||||
|
||||
Reference in New Issue
Block a user