Compare commits
3 Commits
e8d1bf2c57
...
ddc26f0c71
Author | SHA1 | Date |
---|---|---|
Emery Hemingway | ddc26f0c71 | |
Emery Hemingway | f32e783e0b | |
Emery Hemingway | a3c55238f5 |
|
@ -635,6 +635,18 @@ template preservesRecord*(label: string) {.pragma.}
|
|||
## Serialize this object or tuple as a record.
|
||||
## See ``toPreserve``.
|
||||
|
||||
proc hasPreservesRecordPragma*(T: typedesc): bool =
|
||||
## Test if a type has a `{.preservesRecord: "…".}` pragma attached.
|
||||
hasCustomPragma(T, preservesRecord)
|
||||
|
||||
proc recordLabel*(T: typedesc): string =
|
||||
## Get the record label set by a pragma on a type.
|
||||
runnableExamples:
|
||||
type Foo {.preservesRecord: "bar".} = object
|
||||
n: int
|
||||
assert recordLabel(Foo) == "bar"
|
||||
T.getCustomPragmaVal(preservesRecord)
|
||||
|
||||
template preservesTuple*() {.pragma.}
|
||||
## Serialize this object or tuple as a tuple.
|
||||
## See ``toPreserve``.
|
||||
|
@ -643,10 +655,18 @@ template preservesTupleTail*() {.pragma.}
|
|||
## Serialize this object field to the end of its containing tuple.
|
||||
## See ``toPreserve``.
|
||||
|
||||
proc hasPreservesTuplePragma*(T: typedesc): bool =
|
||||
## Test if a type has a `preservesTuple` pragma attached.
|
||||
hasCustomPragma(T, preservesTuple)
|
||||
|
||||
template preservesDictionary*() {.pragma.}
|
||||
## Serialize this object or tuple as a dictionary.
|
||||
## See ``toPreserve``.
|
||||
|
||||
proc hasPreservesDictionaryPragma*(T: typedesc): bool =
|
||||
## Test if a type has a `preservesDictionary` pragma attached.
|
||||
hasCustomPragma(T, preservesDictionary)
|
||||
|
||||
template preservesOr*() {.pragma.}
|
||||
## Serialize this object as an ``or`` alternative.
|
||||
## See ``toPreserve``.
|
||||
|
@ -785,6 +805,10 @@ proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool =
|
|||
assert(fromPreserve(foo, parsePreserves("""<foo 1 2>""")))
|
||||
assert(foo.x == 1)
|
||||
assert(foo.y == 2)
|
||||
when T is E:
|
||||
if not pr.embedded and pr.kind == pkEmbedded:
|
||||
v = pr.embed
|
||||
return true
|
||||
when T is Preserve[E]:
|
||||
v = pr
|
||||
result = true
|
||||
|
|
|
@ -10,7 +10,7 @@ import std/[hashes, sequtils, strutils, sets, tables]
|
|||
|
||||
import compiler/[ast, idents, renderer, lineinfos]
|
||||
|
||||
import ../preserves, ./schema, ./parse
|
||||
import ../preserves, ./schema
|
||||
|
||||
type
|
||||
Bundle = schema.Bundle[void]
|
||||
|
@ -487,8 +487,7 @@ proc addFields(recList: PNode; scm: Schema; known: var TypeTable; cp: CompoundPa
|
|||
proc addFields(recList: PNode; scm: Schema; known: var TypeTable; pat: Pattern; parentName: string): PNode {.discardable.} =
|
||||
case pat.orKind
|
||||
of PatternKind.SimplePattern:
|
||||
raiseAssert "addFields called with SimplePattern " #& $pat.simplePattern
|
||||
# addField(recList, scm, known, pat.simplePattern, "data")
|
||||
addField(recList, scm, known, pat.simplePattern, "data")
|
||||
of PatternKind.CompoundPattern:
|
||||
discard addFields(recList, scm, known, pat.compoundPattern, parentName)
|
||||
reclist
|
||||
|
|
|
@ -6,7 +6,7 @@ from std/os import absolutePath, isAbsolute, getCurrentDir, parentDir
|
|||
|
||||
import npeg
|
||||
|
||||
import ../preserves, ./schema, ./parse, ./pegs
|
||||
import ../preserves, ./schema, ./pegs
|
||||
|
||||
type
|
||||
Value = Preserve[void]
|
||||
|
|
Loading…
Reference in New Issue