Trivially convert from Preserve[void] to Preserve[E]
This commit is contained in:
parent
92834a8968
commit
806c4118fc
|
@ -31,6 +31,8 @@ proc hash*(s: Symbol): Hash {.borrow.}
|
||||||
|
|
||||||
type
|
type
|
||||||
Preserve*[E = void] = object
|
Preserve*[E = void] = object
|
||||||
|
embedded*: bool
|
||||||
|
## Flag to mark embedded Preserves
|
||||||
case kind*: PreserveKind
|
case kind*: PreserveKind
|
||||||
of pkBoolean:
|
of pkBoolean:
|
||||||
bool*: bool
|
bool*: bool
|
||||||
|
@ -58,8 +60,6 @@ type
|
||||||
# TODO: Tables
|
# TODO: Tables
|
||||||
of pkEmbedded:
|
of pkEmbedded:
|
||||||
embed*: E
|
embed*: E
|
||||||
embedded*: bool
|
|
||||||
## Flag to mark embedded Preserves
|
|
||||||
|
|
||||||
DictEntry[E] = tuple[key: Preserve[E], val: Preserve[E]]
|
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:
|
elif T is E:
|
||||||
when E is void: {.error: "cannot embed void".}
|
when E is void: {.error: "cannot embed void".}
|
||||||
result = embed(x)
|
result = embed(x)
|
||||||
|
elif T is Preserve[void]:
|
||||||
|
result = cast[Preserve[E]](x)
|
||||||
elif compiles(toPreserveHook(x, E)):
|
elif compiles(toPreserveHook(x, E)):
|
||||||
result = toPreserveHook(x, E)
|
result = toPreserveHook(x, E)
|
||||||
elif T is enum:
|
elif T is enum:
|
||||||
|
|
Loading…
Reference in New Issue