Deprecated pragma is now supported on enum fields (#10113)
* {.deprecated.} pragma is now supported for enum fields
* Add tests
* Simplify code
This commit is contained in:
parent
a6633b9658
commit
c5ad4c10cb
5 changed files with 63 additions and 12 deletions
|
|
@ -1765,7 +1765,7 @@ proc parseSection(p: var TParser, kind: TNodeKind,
|
|||
parMessage(p, errIdentifierExpected, p.tok)
|
||||
|
||||
proc parseEnum(p: var TParser): PNode =
|
||||
#| enum = 'enum' optInd (symbol optInd ('=' optInd expr COMMENT?)? comma?)+
|
||||
#| enum = 'enum' optInd (symbol optPragmas optInd ('=' optInd expr COMMENT?)? comma?)+
|
||||
result = newNodeP(nkEnumTy, p)
|
||||
getTok(p)
|
||||
addSon(result, p.emptyNode)
|
||||
|
|
@ -1775,25 +1775,35 @@ proc parseEnum(p: var TParser): PNode =
|
|||
while true:
|
||||
var a = parseSymbol(p)
|
||||
if a.kind == nkEmpty: return
|
||||
|
||||
var symPragma = a
|
||||
var pragma: PNode
|
||||
if p.tok.tokType == tkCurlyDotLe:
|
||||
pragma = optPragmas(p)
|
||||
symPragma = newNodeP(nkPragmaExpr, p)
|
||||
addSon(symPragma, a)
|
||||
addSon(symPragma, pragma)
|
||||
|
||||
if p.tok.indent >= 0 and p.tok.indent <= p.currInd:
|
||||
add(result, a)
|
||||
add(result, symPragma)
|
||||
break
|
||||
|
||||
if p.tok.tokType == tkEquals and p.tok.indent < 0:
|
||||
getTok(p)
|
||||
optInd(p, a)
|
||||
var b = a
|
||||
a = newNodeP(nkEnumFieldDef, p)
|
||||
addSon(a, b)
|
||||
addSon(a, parseExpr(p))
|
||||
optInd(p, symPragma)
|
||||
var b = symPragma
|
||||
symPragma = newNodeP(nkEnumFieldDef, p)
|
||||
addSon(symPragma, b)
|
||||
addSon(symPragma, parseExpr(p))
|
||||
if p.tok.indent < 0 or p.tok.indent >= p.currInd:
|
||||
rawSkipComment(p, a)
|
||||
rawSkipComment(p, symPragma)
|
||||
if p.tok.tokType == tkComma and p.tok.indent < 0:
|
||||
getTok(p)
|
||||
rawSkipComment(p, a)
|
||||
rawSkipComment(p, symPragma)
|
||||
else:
|
||||
if p.tok.indent < 0 or p.tok.indent >= p.currInd:
|
||||
rawSkipComment(p, a)
|
||||
addSon(result, a)
|
||||
rawSkipComment(p, symPragma)
|
||||
addSon(result, symPragma)
|
||||
if p.tok.indent >= 0 and p.tok.indent <= p.currInd or
|
||||
p.tok.tokType == tkEof:
|
||||
break
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue