toPreserves: unpack preservesTupleTail on records

This commit is contained in:
Emery Hemingway 2024-01-18 22:23:35 +02:00
parent ba0857c32b
commit 5e1e97e4df
2 changed files with 8 additions and 4 deletions

View File

@ -1,6 +1,6 @@
# Package # Package
version = "20240116" version = "20240118"
author = "Emery Hemingway" author = "Emery Hemingway"
description = "data model and serialization format" description = "data model and serialization format"
license = "Unlicense" license = "Unlicense"

View File

@ -417,8 +417,12 @@ proc toPreserves*[T](x: T): Value {.gcsafe.} =
hasVariant = true hasVariant = true
elif T.hasCustomPragma(preservesRecord): elif T.hasCustomPragma(preservesRecord):
result = Value(kind: pkRecord) result = Value(kind: pkRecord)
for k, v in x.fieldPairs: for label, field in x.fieldPairs:
var pr = fieldToPreserve(k, v) when x.dot(label).hasCustomPragma(preservesTupleTail):
for e in field.items:
result.record.add(toPreserves(e))
else:
var pr = fieldToPreserve(label, field)
result.record.add(pr) result.record.add(pr)
result.record.add(toSymbol(T.getCustomPragmaVal(preservesRecord))) result.record.add(toSymbol(T.getCustomPragmaVal(preservesRecord)))
elif T.hasCustomPragma(preservesTuple): elif T.hasCustomPragma(preservesTuple):