Replace enum fields idents with syms (#14048)

* replace enum fields idents with syms
* Trigger build

Co-authored-by: cooldome <ariabushenko@bk.ru>
This commit is contained in:
cooldome
2020-04-21 19:12:32 +01:00
committed by GitHub
parent 218cbf0e09
commit 5db0bb744c
2 changed files with 13 additions and 1 deletions

View File

@@ -60,6 +60,10 @@
x.val = nil
```
- getImpl() on enum type symbols now returns field syms instead of idents. This helps
with writing typed macros. Old behavior for backwards compatiblity can be restored
with command line switch `--oldast`.
## Compiler changes
- Specific warnings can now be turned into errors via `--warningAsError[X]:on|off`.

View File

@@ -62,6 +62,7 @@ proc semEnum(c: PContext, n: PNode, prev: PType): PType =
counter, x: BiggestInt
e: PSym
base: PType
identToReplace: ptr PNode
counter = 0
base = nil
result = newOrPrevType(tyEnum, prev, c)
@@ -83,9 +84,11 @@ proc semEnum(c: PContext, n: PNode, prev: PType): PType =
of nkEnumFieldDef:
if n[i][0].kind == nkPragmaExpr:
e = newSymS(skEnumField, n[i][0][0], c)
identToReplace = addr n[i][0][0]
pragma(c, e, n[i][0][1], enumFieldPragmas)
else:
e = newSymS(skEnumField, n[i][0], c)
identToReplace = addr n[i][0]
var v = semConstExpr(c, n[i][1])
var strVal: PNode = nil
case skipTypes(v.typ, abstractInst-{tyTypeDesc}).kind
@@ -118,19 +121,24 @@ proc semEnum(c: PContext, n: PNode, prev: PType): PType =
e = n[i].sym
of nkIdent, nkAccQuoted:
e = newSymS(skEnumField, n[i], c)
identToReplace = addr n[i]
of nkPragmaExpr:
e = newSymS(skEnumField, n[i][0], c)
pragma(c, e, n[i][1], enumFieldPragmas)
identToReplace = addr n[i][0]
else:
illFormedAst(n[i], c.config)
e.typ = result
e.position = int(counter)
let symNode = newSymNode(e)
if optOldAst notin c.config.options and identToReplace != nil:
identToReplace[] = symNode
if e.position == 0: hasNull = true
if result.sym != nil and sfExported in result.sym.flags:
incl(e.flags, sfUsed)
incl(e.flags, sfExported)
if not isPure: strTableAdd(c.module.tab, e)
result.n.add newSymNode(e)
result.n.add symNode
styleCheckDef(c.config, e)
onDef(e.info, e)
if sfGenSym notin e.flags: