Remove threads and gcsafe where parsing is used
This commit is contained in:
parent
65cd9fa3e9
commit
b563de9ac4
|
@ -1,6 +1,6 @@
|
|||
# Package
|
||||
|
||||
version = "20230801"
|
||||
version = "20230805"
|
||||
author = "Emery Hemingway"
|
||||
description = "data model and serialization format"
|
||||
license = "Unlicense"
|
||||
|
|
|
@ -208,7 +208,7 @@ proc sortDict[E](pr: var Preserve[E]) =
|
|||
sort(pr.dict) do (x, y: DictEntry[E]) -> int:
|
||||
cmp(x.key, y.key)
|
||||
|
||||
proc cannonicalize*[E](pr: var Preserve[E]) {.gcsafe.} =
|
||||
proc cannonicalize*[E](pr: var Preserve[E]) =
|
||||
## Cannonicalize a compound Preserves value by total ordering.
|
||||
case pr.kind
|
||||
of pkSequence:
|
||||
|
@ -848,7 +848,7 @@ template unpreservable*() {.pragma.}
|
|||
## as its native type.
|
||||
## Unpreservability is asserted at runtime.
|
||||
|
||||
proc toPreserve*[T](x: T; E = void): Preserve[E] =
|
||||
proc toPreserve*[T](x: T; E = void): Preserve[E] {.gcsafe.} =
|
||||
## Serializes ``x`` to Preserves. Can be customized by defining
|
||||
## ``toPreserveHook(x: T; E: typedesc)`` in the calling scope.
|
||||
## Any ``toPreserveHook`` that does not compile will be discarded;
|
||||
|
@ -981,7 +981,7 @@ func containsNativeEmbeds[E](pr: Preserve[E]): bool =
|
|||
elif pr.kind == pkEmbedded:
|
||||
result = true
|
||||
|
||||
proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool =
|
||||
proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool {.gcsafe.} =
|
||||
## Inplace version of `preserveTo`. Returns ``true`` on
|
||||
## a complete match, otherwise returns ``false``.
|
||||
## Can be customized with `fromPreserveHook[E](x: T; var pr: Preserve[E]): bool`.
|
||||
|
@ -1327,7 +1327,7 @@ proc mapEmbeds*[A, B](pr: sink Preserve[A]; op: proc (v: A): B): Preserve[B] =
|
|||
result = embed op(pr.embed)
|
||||
cannonicalize(result)
|
||||
|
||||
proc contract*[E](pr: sink Preserve[E]; op: proc (v: E): Preserve[void]): Preserve[void] =
|
||||
proc contract*[E](pr: sink Preserve[E]; op: proc (v: E): Preserve[void] {.gcsafe.}): Preserve[void] {.gcsafe.} =
|
||||
## Convert `Preserve[E]` to `Preserve[void]` using an `E → Preserve[void]` procedure.
|
||||
if not pr.embedded:
|
||||
case pr.kind
|
||||
|
@ -1353,7 +1353,7 @@ proc contract*[E](pr: sink Preserve[E]; op: proc (v: E): Preserve[void]): Preser
|
|||
result = embed op(pr.embed)
|
||||
cannonicalize(result)
|
||||
|
||||
proc expand*[E](pr: sink Preserve[void]; op: proc (v: Preserve[void]): Preserve[E]): Preserve[E] =
|
||||
proc expand*[E](pr: sink Preserve[void]; op: proc (v: Preserve[void]): Preserve[E] {.gcsafe.}): Preserve[E] {.gcsafe.} =
|
||||
## Convert `Preserve[void]` to `Preserve[E]` using an `Preserve[void] → Preserve[E]` procedure.
|
||||
if pr.embedded:
|
||||
result = op(pr)
|
||||
|
|
|
@ -28,7 +28,7 @@ proc toPreserveHook*(js: JsonNode; E: typedesc): Preserve[E] =
|
|||
for i, e in js.elems:
|
||||
result.sequence[i] = toPreserveHook(e, E)
|
||||
|
||||
proc fromPreserveHook*[E](js: var JsonNode; prs: Preserve[E]): bool {.gcsafe.} =
|
||||
proc fromPreserveHook*[E](js: var JsonNode; prs: Preserve[E]): bool =
|
||||
runnableExamples:
|
||||
import std/json
|
||||
var js = JsonNode()
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
threads:off
|
|
@ -78,7 +78,7 @@ template unescape(buf: var seq[byte]; capture: string) =
|
|||
add(buf, byte capture[i])
|
||||
inc(i)
|
||||
|
||||
proc parsePreserves*(text: string): Preserve[void] {.gcsafe.} =
|
||||
proc parsePreserves*(text: string): Preserve[void] =
|
||||
## Parse a text-encoded Preserves `string` to a `Preserve` value.
|
||||
runnableExamples:
|
||||
assert parsePreserves"[ 1 2 3 ]" == [ 1, 2, 3 ].toPreserve
|
||||
|
@ -184,7 +184,7 @@ proc parsePreserves*(text: string): Preserve[void] {.gcsafe.} =
|
|||
assert(stack.len == 1)
|
||||
stack.pop.value
|
||||
|
||||
proc parsePreserves*(text: string; E: typedesc): Preserve[E] {.gcsafe.} =
|
||||
proc parsePreserves*(text: string; E: typedesc): Preserve[E] =
|
||||
## Parse a text-encoded Preserves `string` to a `Preserve[E]` value for embedded type `E`.
|
||||
when E is void: parsePreserves(text)
|
||||
else: mapEmbeds(parsePreserves(text), E)
|
||||
|
|
|
@ -59,7 +59,7 @@ template pushStack(n: Value) =
|
|||
proc toSymbolLit(s: string): Value =
|
||||
initRecord[void](toSymbol"lit", toSymbol s)
|
||||
|
||||
proc match(text: string; p: var ParseState) {.gcsafe.}
|
||||
proc match(text: string; p: var ParseState)
|
||||
|
||||
const parser = peg("Schema", p: ParseState):
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
threads:off
|
Loading…
Reference in New Issue