Permit fromPreserve for subsets of dictionaries
This commit is contained in:
parent
c087294b23
commit
acdfd3c560
|
@ -1055,7 +1055,7 @@ proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool =
|
||||||
result = result and fromPreserve(f, pr[i])
|
result = result and fromPreserve(f, pr[i])
|
||||||
inc i
|
inc i
|
||||||
of pkDictionary:
|
of pkDictionary:
|
||||||
if tupleLen(T) == pr.len:
|
if tupleLen(T) <= pr.len:
|
||||||
result = true
|
result = true
|
||||||
for key, val in fieldPairs(v):
|
for key, val in fieldPairs(v):
|
||||||
let pv = step(pr, toSymbol(key, E))
|
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:
|
if result and i <= pr.len:
|
||||||
result = result and fieldFromPreserve(key, val, pr.record[i])
|
result = result and fieldFromPreserve(key, val, pr.record[i])
|
||||||
inc i
|
inc i
|
||||||
result = result and (i == pr.len)
|
result = result and (i <= pr.len)
|
||||||
elif T.hasCustomPragma(preservesTuple):
|
elif T.hasCustomPragma(preservesTuple):
|
||||||
if pr.isSequence:
|
if pr.isSequence:
|
||||||
result = true
|
result = true
|
||||||
|
@ -1113,7 +1113,7 @@ proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool =
|
||||||
key, v.dot(key), val)
|
key, v.dot(key), val)
|
||||||
if not result: break
|
if not result: break
|
||||||
inc i
|
inc i
|
||||||
result = result and (i == pr.len)
|
result = result and (i <= pr.len)
|
||||||
elif T.hasCustomPragma(preservesOr):
|
elif T.hasCustomPragma(preservesOr):
|
||||||
for kind in typeof(T.orKind):
|
for kind in typeof(T.orKind):
|
||||||
v = T(orKind: kind)
|
v = T(orKind: kind)
|
||||||
|
@ -1137,7 +1137,7 @@ proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool =
|
||||||
key, v.dot(key), val)
|
key, v.dot(key), val)
|
||||||
if not result: break
|
if not result: break
|
||||||
inc i
|
inc i
|
||||||
result = result and (i == pr.len)
|
result = result and (i <= pr.len)
|
||||||
else:
|
else:
|
||||||
result = fromPreserveHook(v, pr)
|
result = fromPreserveHook(v, pr)
|
||||||
# a previous branch determined that the hook does not compile but
|
# a previous branch determined that the hook does not compile but
|
||||||
|
|
Loading…
Reference in New Issue