Symbol constructor

This commit is contained in:
Emery Hemingway 2021-06-08 12:00:28 +02:00
parent bfb0825721
commit b5940cfe22
1 changed files with 10 additions and 7 deletions

View File

@ -37,10 +37,14 @@ type
of pkEmbedded:
embedded*: T
proc label*[T](prs: Preserve[T]): Preserve[T] =
proc symbol*[T](s: string): Preserve[void] {.inline.} =
## Symbol constructor.
Preserve[T](kind: pkSymbol, symbol: s)
proc label*[T](prs: Preserve[T]): Preserve[T] {.inline.} =
prs.record[0]
proc fields*[T](prs: Preserve[T]): seq[Preserve[T]] =
proc fields*[T](prs: Preserve[T]): seq[Preserve[T]] {.inline.} =
prs.record[1..prs.record.high]
iterator fields*[T](prs: Preserve[T]): seq[Preserve[T]] =
@ -365,9 +369,8 @@ proc parsePreserve*(s: Stream): Preserve[void] =
let len = s.readVarint()
result.bytes = cast[seq[byte]](s.readStr(len))
of 0xb3:
result = Preserve[void](kind: pkSymbol)
let len = s.readVarint()
result.symbol = s.readStr(len)
result = symbol[void](s.readStr(len))
of 0xb4:
result = Preserve[void](kind: pkRecord)
while s.peekUint8() != endMarker:
@ -447,10 +450,10 @@ proc toPreserve*(js: JsonNode): Preserve[void] =
result = Preserve[void](kind: pkDouble, double: js.fnum)
of JBool:
result = case js.bval
of false: Preserve[void](kind: pkSymbol, symbol: "false")
of true: Preserve[void](kind: pkSymbol, symbol: "true")
of false: symbol[void]"false"
of true: symbol[void]"true"
of JNull:
result = Preserve[void](kind: pkSymbol, symbol: "null")
result = symbol[void]"null"
of JObject:
result = Preserve[void](kind: pkDictionary)
for key, val in js.fields.pairs: