Permit fromPreserve for subsets of dictionaries

This commit is contained in:
Emery Hemingway 2023-06-11 21:29:10 +01:00
parent c087294b23
commit acdfd3c560
1 changed files with 4 additions and 4 deletions

View File

@ -1055,7 +1055,7 @@ proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool =
result = result and fromPreserve(f, pr[i])
inc i
of pkDictionary:
if tupleLen(T) == pr.len:
if tupleLen(T) <= pr.len:
result = true
for key, val in fieldPairs(v):
let pv = step(pr, toSymbol(key, E))
@ -1084,7 +1084,7 @@ proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool =
if result and i <= pr.len:
result = result and fieldFromPreserve(key, val, pr.record[i])
inc i
result = result and (i == pr.len)
result = result and (i <= pr.len)
elif T.hasCustomPragma(preservesTuple):
if pr.isSequence:
result = true
@ -1113,7 +1113,7 @@ proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool =
key, v.dot(key), val)
if not result: break
inc i
result = result and (i == pr.len)
result = result and (i <= pr.len)
elif T.hasCustomPragma(preservesOr):
for kind in typeof(T.orKind):
v = T(orKind: kind)
@ -1137,7 +1137,7 @@ proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool =
key, v.dot(key), val)
if not result: break
inc i
result = result and (i == pr.len)
result = result and (i <= pr.len)
else:
result = fromPreserveHook(v, pr)
# a previous branch determined that the hook does not compile but