Careful with those variable length tuples

This commit is contained in:
Emery Hemingway 2021-12-24 00:38:02 +01:00
parent e25e06efba
commit ba4d567791
1 changed files with 7 additions and 6 deletions

View File

@ -882,12 +882,13 @@ proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool =
var i: int var i: int
for name, field in fieldPairs(v): for name, field in fieldPairs(v):
when v.dot(name).hasCustomPragma(preservesTupleTail): when v.dot(name).hasCustomPragma(preservesTupleTail):
setLen(v.dot(name), pr.len - i) if pr.len >= i:
var j: int setLen(v.dot(name), pr.len - i)
while result and i < pr.len: var j: int
result = result and fieldFromPreserve(name, v.dot(name)[j], pr.sequence[i]) while result and i < pr.len:
inc i result = result and fieldFromPreserve(name, v.dot(name)[j], pr.sequence[i])
inc j inc i
inc j
else: else:
if result and i < pr.len: if result and i < pr.len:
result = result and fieldFromPreserve(name, field, pr.sequence[i]) result = result and fieldFromPreserve(name, field, pr.sequence[i])