From acdfd3c56012aa1ddac712407aa281a3f139da01 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Sun, 11 Jun 2023 21:29:10 +0100 Subject: [PATCH] Permit fromPreserve for subsets of dictionaries --- src/preserves.nim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/preserves.nim b/src/preserves.nim index 3c40733..c3de9b5 100644 --- a/src/preserves.nim +++ b/src/preserves.nim @@ -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