user defined pragmas work for generics instantiated in different modules

This commit is contained in:
Araq 2014-11-06 00:21:39 +01:00
commit ee9c70e034
2 changed files with 12 additions and 4 deletions

View file

@ -601,6 +601,9 @@ proc singlePragma(c: PContext, sym: PSym, n: PNode, i: int,
if c.instCounter > 100: if c.instCounter > 100:
globalError(it.info, errRecursiveDependencyX, userPragma.name.s) globalError(it.info, errRecursiveDependencyX, userPragma.name.s)
pragma(c, sym, userPragma.ast, validPragmas) pragma(c, sym, userPragma.ast, validPragmas)
# ensure the pragma is also remember for generic instantiations in other
# modules:
n.sons[i] = userPragma.ast
dec c.instCounter dec c.instCounter
else: else:
var k = whichKeyword(key.ident) var k = whichKeyword(key.ident)
@ -883,8 +886,13 @@ proc hasPragma*(n: PNode, pragma: TSpecialWord): bool =
return false return false
proc pragma(c: PContext, sym: PSym, n: PNode, validPragmas: TSpecialWords) = proc pragmaRec(c: PContext, sym: PSym, n: PNode, validPragmas: TSpecialWords) =
if n == nil: return if n == nil: return
for i in countup(0, sonsLen(n) - 1): for i in countup(0, sonsLen(n) - 1):
if singlePragma(c, sym, n, i, validPragmas): break if n.sons[i].kind == nkPragma: pragmaRec(c, sym, n.sons[i], validPragmas)
elif singlePragma(c, sym, n, i, validPragmas): break
proc pragma(c: PContext, sym: PSym, n: PNode, validPragmas: TSpecialWords) =
if n == nil: return
pragmaRec(c, sym, n, validPragmas)
implicitPragmas(c, sym, n, validPragmas) implicitPragmas(c, sym, n, validPragmas)