diff --git a/src/preserves.nim b/src/preserves.nim index 6dd0ccd..2ced976 100644 --- a/src/preserves.nim +++ b/src/preserves.nim @@ -882,12 +882,13 @@ proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool = var i: int for name, field in fieldPairs(v): when v.dot(name).hasCustomPragma(preservesTupleTail): - setLen(v.dot(name), pr.len - i) - var j: int - while result and i < pr.len: - result = result and fieldFromPreserve(name, v.dot(name)[j], pr.sequence[i]) - inc i - inc j + if pr.len >= i: + setLen(v.dot(name), pr.len - i) + var j: int + while result and i < pr.len: + result = result and fieldFromPreserve(name, v.dot(name)[j], pr.sequence[i]) + inc i + inc j else: if result and i < pr.len: result = result and fieldFromPreserve(name, field, pr.sequence[i])