diff options
author | Clyybber <darkmine956@gmail.com> | 2020-08-11 22:28:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-11 22:28:49 +0200 |
commit | 2cea52ee7e7d0f118976df5311a84540cbea85cd (patch) | |
tree | 0f0fa5aea4a46c3ae74aab774eac568826ca229c | |
parent | 813f16a2a39f1375b241cf50845f641ea44d890e (diff) | |
download | Nim-2cea52ee7e7d0f118976df5311a84540cbea85cd.tar.gz |
Allow pragmas on parameters (#15178)
-rw-r--r-- | compiler/semtypes.nim | 4 | ||||
-rw-r--r-- | tests/template/tparams_gensymed.nim | 15 |
2 files changed, 17 insertions, 2 deletions
diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index c2aeadc21..6a1c1afc9 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -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 diff --git a/tests/template/tparams_gensymed.nim b/tests/template/tparams_gensymed.nim index cfd354a74..2a1fda41a 100644 --- a/tests/template/tparams_gensymed.nim +++ b/tests/template/tparams_gensymed.nim @@ -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) |