Compare commits

...

2 Commits

Author SHA1 Message Date
Emery Hemingway 6e0834316f Fix code-gen for embedded literals 2023-10-26 15:32:35 +01:00
Emery Hemingway 71acd4c951 Regenerate schema 2023-10-26 15:29:28 +01:00
3 changed files with 30 additions and 29 deletions

View File

@ -1,6 +1,6 @@
# Package
version = "20231021"
version = "20231026"
author = "Emery Hemingway"
description = "data model and serialization format"
license = "Unlicense"

View File

@ -4,7 +4,7 @@
## This module implements Nim code generation from Preserves schemas.
# This module imports code that it generates! After making any changes here
# the schema module must be regenerated!
# nim c --path:.. -r ./preserves_schema_nim ../../../preserves/schema/schema.bin
# nim c --path:../../../nim --path:.. -r ./preserves_schema_nim ../../../preserves/schema/schema.bin
import std/[hashes, strutils, sets, tables]
@ -400,7 +400,7 @@ proc toStrLit(loc: Location; sp: SimplePattern): PNode =
var (loc, def) = deref(loc, sp.ref)
result = toStrLit(loc, def)
of SimplePatternKind.embedded:
result = PNode(kind: nkStrLit, strVal: "#!" & $sp.embedded.interface)
result = PNode(kind: nkStrLit, strVal: "#!" & toStrLit(loc, sp.embedded.interface).strVal)
else: raiseAssert $sp
proc toFieldIdent(s: string): PNode =

View File

@ -1,5 +1,6 @@
import ../preserves, std/tables
import
preserves, std/tables
type
Ref* {.preservesRecord: "ref".} = object
@ -7,26 +8,26 @@ type
`name`*: Symbol
ModulePath* = seq[Symbol]
Bundle* {.preservesRecord: "bundle".} = ref object
Bundle* {.acyclic, preservesRecord: "bundle".} = ref object
`modules`*: Modules
CompoundPatternKind* {.pure.} = enum
`rec`, `tuple`, `tuplePrefix`, `dict`
CompoundPatternRec* {.preservesRecord: "rec".} = ref object
CompoundPatternRec* {.acyclic, preservesRecord: "rec".} = ref object
`label`*: NamedPattern
`fields`*: NamedPattern
CompoundPatternTuple* {.preservesRecord: "tuple".} = ref object
CompoundPatternTuple* {.acyclic, preservesRecord: "tuple".} = ref object
`patterns`*: seq[NamedPattern]
CompoundPatternTuplePrefix* {.preservesRecord: "tuplePrefix".} = ref object
CompoundPatternTuplePrefix* {.acyclic, preservesRecord: "tuplePrefix".} = ref object
`fixed`*: seq[NamedPattern]
`variable`*: NamedSimplePattern
CompoundPatternDict* {.preservesRecord: "dict".} = ref object
CompoundPatternDict* {.acyclic, preservesRecord: "dict".} = ref object
`entries`*: DictionaryEntries
`CompoundPattern`* {.preservesOr.} = ref object
`CompoundPattern`* {.acyclic, preservesOr.} = ref object
case orKind*: CompoundPatternKind
of CompoundPatternKind.`rec`:
`rec`*: CompoundPatternRec
@ -60,7 +61,7 @@ type
DictionaryEntries* = Table[Preserve[void], NamedSimplePattern]
NamedPatternKind* {.pure.} = enum
`named`, `anonymous`
`NamedPattern`* {.preservesOr.} = ref object
`NamedPattern`* {.acyclic, preservesOr.} = ref object
case orKind*: NamedPatternKind
of NamedPatternKind.`named`:
`named`*: Binding
@ -74,23 +75,23 @@ type
SimplePatternAtom* {.preservesRecord: "atom".} = object
`atomKind`*: AtomKind
SimplePatternEmbedded* {.preservesRecord: "embedded".} = ref object
SimplePatternEmbedded* {.acyclic, preservesRecord: "embedded".} = ref object
`interface`*: SimplePattern
SimplePatternLit* {.preservesRecord: "lit".} = object
`value`*: Preserve[void]
SimplePatternSeqof* {.preservesRecord: "seqof".} = ref object
SimplePatternSeqof* {.acyclic, preservesRecord: "seqof".} = ref object
`pattern`*: SimplePattern
SimplePatternSetof* {.preservesRecord: "setof".} = ref object
SimplePatternSetof* {.acyclic, preservesRecord: "setof".} = ref object
`pattern`*: SimplePattern
SimplePatternDictof* {.preservesRecord: "dictof".} = ref object
SimplePatternDictof* {.acyclic, preservesRecord: "dictof".} = ref object
`key`*: SimplePattern
`value`*: SimplePattern
`SimplePattern`* {.preservesOr.} = ref object
`SimplePattern`* {.acyclic, preservesOr.} = ref object
case orKind*: SimplePatternKind
of SimplePatternKind.`any`:
`any`* {.preservesLiteral: "any".}: bool
@ -119,7 +120,7 @@ type
NamedSimplePatternKind* {.pure.} = enum
`named`, `anonymous`
`NamedSimplePattern`* {.preservesOr.} = ref object
`NamedSimplePattern`* {.acyclic, preservesOr.} = ref object
case orKind*: NamedSimplePatternKind
of NamedSimplePatternKind.`named`:
`named`*: Binding
@ -130,23 +131,23 @@ type
DefinitionKind* {.pure.} = enum
`or`, `and`, `Pattern`
DefinitionOrField0* {.preservesTuple.} = ref object
DefinitionOrField0* {.acyclic, preservesTuple.} = ref object
`pattern0`*: NamedAlternative
`pattern1`*: NamedAlternative
`patternN`* {.preservesTupleTail.}: seq[NamedAlternative]
DefinitionOr* {.preservesRecord: "or".} = ref object
DefinitionOr* {.acyclic, preservesRecord: "or".} = ref object
`field0`*: DefinitionOrField0
DefinitionAndField0* {.preservesTuple.} = ref object
DefinitionAndField0* {.acyclic, preservesTuple.} = ref object
`pattern0`*: NamedPattern
`pattern1`*: NamedPattern
`patternN`* {.preservesTupleTail.}: seq[NamedPattern]
DefinitionAnd* {.preservesRecord: "and".} = ref object
DefinitionAnd* {.acyclic, preservesRecord: "and".} = ref object
`field0`*: DefinitionAndField0
`Definition`* {.preservesOr.} = ref object
`Definition`* {.acyclic, preservesOr.} = ref object
case orKind*: DefinitionKind
of DefinitionKind.`or`:
`or`*: DefinitionOr
@ -158,21 +159,21 @@ type
`pattern`*: Pattern
NamedAlternative* {.preservesTuple.} = ref object
NamedAlternative* {.acyclic, preservesTuple.} = ref object
`variantLabel`*: string
`pattern`*: Pattern
SchemaField0* {.preservesDictionary.} = ref object
`version`* {.preservesLiteral: "1".}: tuple[]
`embeddedType`*: EmbeddedTypeName
SchemaField0* {.acyclic, preservesDictionary.} = ref object
`definitions`*: Definitions
`embeddedType`*: EmbeddedTypeName
`version`* {.preservesLiteral: "1".}: tuple[]
Schema* {.preservesRecord: "schema".} = ref object
Schema* {.acyclic, preservesRecord: "schema".} = ref object
`field0`*: SchemaField0
PatternKind* {.pure.} = enum
`SimplePattern`, `CompoundPattern`
`Pattern`* {.preservesOr.} = ref object
`Pattern`* {.acyclic, preservesOr.} = ref object
case orKind*: PatternKind
of PatternKind.`SimplePattern`:
`simplepattern`*: SimplePattern
@ -181,7 +182,7 @@ type
`compoundpattern`*: CompoundPattern
Binding* {.preservesRecord: "named".} = ref object
Binding* {.acyclic, preservesRecord: "named".} = ref object
`name`*: Symbol
`pattern`*: SimplePattern