mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-19 01:18:32 +00:00
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:
@@ -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`.
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user