Trivially convert from Preserve[void] to Preserve[E]

This commit is contained in:
Emery Hemingway 2022-12-07 13:10:14 -06:00
parent 92834a8968
commit 806c4118fc
1 changed files with 4 additions and 2 deletions

View File

@ -31,6 +31,8 @@ proc hash*(s: Symbol): Hash {.borrow.}
type
Preserve*[E = void] = object
embedded*: bool
## Flag to mark embedded Preserves
case kind*: PreserveKind
of pkBoolean:
bool*: bool
@ -58,8 +60,6 @@ type
# TODO: Tables
of pkEmbedded:
embed*: E
embedded*: bool
## Flag to mark embedded Preserves
DictEntry[E] = tuple[key: Preserve[E], val: Preserve[E]]
@ -749,6 +749,8 @@ proc toPreserve*[T](x: T; E = void): Preserve[E] =
elif T is E:
when E is void: {.error: "cannot embed void".}
result = embed(x)
elif T is Preserve[void]:
result = cast[Preserve[E]](x)
elif compiles(toPreserveHook(x, E)):
result = toPreserveHook(x, E)
elif T is enum: