Validate pragmas attached to for variables (#8749)

Fixes #8741
This commit is contained in:
LemonBoy
2018-08-23 21:43:10 +02:00
committed by Andreas Rumpf
parent 30621c4a89
commit b1c2416abd
3 changed files with 13 additions and 0 deletions

View File

@@ -71,6 +71,7 @@ const
letPragmas* = varPragmas
procTypePragmas* = {FirstCallConv..LastCallConv, wVarargs, wNosideeffect,
wThread, wRaises, wLocks, wTags, wGcSafe}
forVarPragmas* = {wInject, wGensym}
allRoutinePragmas* = methodPragmas + iteratorPragmas + lambdaPragmas
proc getPragmaVal*(procAst: PNode; name: TSpecialWord): PNode =

View File

@@ -567,6 +567,8 @@ proc symForVar(c: PContext, n: PNode): PSym =
let m = if n.kind == nkPragmaExpr: n.sons[0] else: n
result = newSymG(skForVar, m, c)
styleCheckDef(c.config, result)
if n.kind == nkPragmaExpr:
pragma(c, result, n.sons[1], forVarPragmas)
proc semForVars(c: PContext, n: PNode): PNode =
result = n

10
tests/pragmas/t8741.nim Normal file
View File

@@ -0,0 +1,10 @@
discard """
line: 9
errormsg: "attempting to call undeclared routine: 'foobar'"
"""
for a {.gensym, inject.} in @[1,2,3]:
discard
for a {.foobar.} in @[1,2,3]:
discard