preserves_schema_nim: use field0,1,..N for anonymous fields
This commit is contained in:
parent
67b470078c
commit
cd2dde6d71
|
@ -1,6 +1,6 @@
|
||||||
# Package
|
# Package
|
||||||
|
|
||||||
version = "20230410"
|
version = "20230503"
|
||||||
author = "Emery Hemingway"
|
author = "Emery Hemingway"
|
||||||
description = "data model and serialization format"
|
description = "data model and serialization format"
|
||||||
license = "Unlicense"
|
license = "Unlicense"
|
||||||
|
|
|
@ -415,12 +415,12 @@ proc identDef(scm: Schema; l: PNode; ts: TypeSpec): PNode =
|
||||||
proc label(pat: Pattern): string =
|
proc label(pat: Pattern): string =
|
||||||
raiseAssert "need to derive record label for " & $pat
|
raiseAssert "need to derive record label for " & $pat
|
||||||
|
|
||||||
proc label(na: NamedPattern): string =
|
proc label(na: NamedPattern; index: int): string =
|
||||||
case na.orKind
|
case na.orKind
|
||||||
of NamedPatternKind.named:
|
of NamedPatternKind.named:
|
||||||
string na.named.name
|
string na.named.name
|
||||||
of NamedPatternKind.anonymous:
|
of NamedPatternKind.anonymous:
|
||||||
"data" # TODO
|
"field" & $index
|
||||||
|
|
||||||
proc idStr(sp: SimplePattern): string =
|
proc idStr(sp: SimplePattern): string =
|
||||||
if sp.orKind == SimplepatternKind.lit:
|
if sp.orKind == SimplepatternKind.lit:
|
||||||
|
@ -523,9 +523,9 @@ proc addField(recList: PNode; loc: Location; known: var TypeTable; sp: SimplePat
|
||||||
|
|
||||||
proc addFields(recList: PNode; loc: Location; known: var TypeTable; cp: CompoundPattern; parentName: string): PNode {.discardable.} =
|
proc addFields(recList: PNode; loc: Location; known: var TypeTable; cp: CompoundPattern; parentName: string): PNode {.discardable.} =
|
||||||
let scm = loc.schema
|
let scm = loc.schema
|
||||||
template addField(np: NamedPattern) =
|
template addField(np: NamedPattern; index: int) =
|
||||||
let
|
let
|
||||||
label = np.label
|
label = label(np, index)
|
||||||
id = label.toFieldIdent
|
id = label.toFieldIdent
|
||||||
pattern = np.pattern
|
pattern = np.pattern
|
||||||
if pattern.isRef or pattern.isSimple:
|
if pattern.isRef or pattern.isSimple:
|
||||||
|
@ -542,9 +542,9 @@ proc addFields(recList: PNode; loc: Location; known: var TypeTable; cp: Compound
|
||||||
# recList.add identDef(scm, ident(label), nimTypeOf(loc, known, cp, ""))
|
# recList.add identDef(scm, ident(label), nimTypeOf(loc, known, cp, ""))
|
||||||
raiseassert "unexpected record of fields " #& $cp.rec
|
raiseassert "unexpected record of fields " #& $cp.rec
|
||||||
of CompoundPatternKind.tuple:
|
of CompoundPatternKind.tuple:
|
||||||
for np in cp.tuple.patterns: addField(np)
|
for i, np in cp.tuple.patterns: addField(np, i)
|
||||||
of CompoundPatternKind.tuplePrefix:
|
of CompoundPatternKind.tuplePrefix:
|
||||||
for np in cp.tuplePrefix.fixed: addField(np)
|
for i, np in cp.tuplePrefix.fixed: addField(np, i)
|
||||||
let variableType = nimTypeOf(loc, known, cp.tuplePrefix.variable)
|
let variableType = nimTypeOf(loc, known, cp.tuplePrefix.variable)
|
||||||
recList.add identDef(
|
recList.add identDef(
|
||||||
scm,
|
scm,
|
||||||
|
@ -559,7 +559,7 @@ proc addFields(recList: PNode; loc: Location; known: var TypeTable; cp: Compound
|
||||||
proc addFields(recList: PNode; loc: Location; known: var TypeTable; pat: Pattern; parentName: string): PNode {.discardable.} =
|
proc addFields(recList: PNode; loc: Location; known: var TypeTable; pat: Pattern; parentName: string): PNode {.discardable.} =
|
||||||
case pat.orKind
|
case pat.orKind
|
||||||
of PatternKind.SimplePattern:
|
of PatternKind.SimplePattern:
|
||||||
addField(recList, loc, known, pat.simplePattern, "data")
|
addField(recList, loc, known, pat.simplePattern, "field0")
|
||||||
of PatternKind.CompoundPattern:
|
of PatternKind.CompoundPattern:
|
||||||
discard addFields(recList, loc, known, pat.compoundPattern, parentName)
|
discard addFields(recList, loc, known, pat.compoundPattern, parentName)
|
||||||
reclist
|
reclist
|
||||||
|
|
Loading…
Reference in New Issue