diff options
author | Andrii Riabushenko <cdome@bk.ru> | 2018-12-11 23:35:46 +0000 |
---|---|---|
committer | Andrii Riabushenko <cdome@bk.ru> | 2018-12-11 23:35:46 +0000 |
commit | df0f0f28589c6aad9fc34a924194aa9932120e6e (patch) | |
tree | 0637ab6b024e33530b5b57ca56fcf6054b587bc8 | |
parent | cd81f368d184dae6268ccf5f4bdc771a661f4ac1 (diff) | |
download | Nim-df0f0f28589c6aad9fc34a924194aa9932120e6e.tar.gz |
custom pragmas in pragma blocks
-rw-r--r-- | compiler/pragmas.nim | 4 | ||||
-rw-r--r-- | compiler/semstmts.nim | 12 |
2 files changed, 7 insertions, 9 deletions
diff --git a/compiler/pragmas.nim b/compiler/pragmas.nim index 247f6ad54..f67e74f11 100644 --- a/compiler/pragmas.nim +++ b/compiler/pragmas.nim @@ -1111,8 +1111,8 @@ proc singlePragma(c: PContext, sym: PSym, n: PNode, i: var int, else: sym.flags.incl sfUsed of wLiftLocals: discard else: invalidPragma(c, it) - elif sym != nil and sym.kind in {skVar, skLet, skParam, skField, skProc, - skFunc, skConverter, skMethod, skType}: + elif sym == nil or (sym != nil and sym.kind in {skVar, skLet, skParam, + skField, skProc, skFunc, skConverter, skMethod, skType}): n.sons[i] = semCustomPragma(c, it) elif sym != nil: illegalCustomPragma(c, it, sym) diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 04fe91cfb..aec03b492 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -1876,18 +1876,16 @@ proc setLine(n: PNode, info: TLineInfo) = n.info = info proc semPragmaBlock(c: PContext, n: PNode): PNode = + checkSonsLen(n, 2, c.config) let pragmaList = n.sons[0] pragma(c, nil, pragmaList, exprPragmas) - result = semExpr(c, n.sons[1]) - n.sons[1] = result + n[1] = semExpr(c, n[1]) + result = n + result.typ = n[1].typ for i in 0 ..< pragmaList.len: case whichPragma(pragmaList.sons[i]) of wLine: setLine(result, pragmaList.sons[i].info) - of wLocks, wGcSafe, wNosideeffect: - result = n - result.typ = n.sons[1].typ - of wNoRewrite: - incl(result.flags, nfNoRewrite) + of wNoRewrite: incl(result.flags, nfNoRewrite) else: discard proc semStaticStmt(c: PContext, n: PNode): PNode = |