From 32fce5df8d8c03d1f76f05532a915316f03016ad Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Thu, 18 Feb 2021 23:07:52 +0200 Subject: [PATCH] Revert "Support when statements in records that reuse the same field name in different branches" This reverts commit 4e2ffe3f6df5b753d7b11fef83cc5ee14f296c1c. --- serialization/object_serialization.nim | 12 ++++---- tests/test_object_serialization.nim | 38 ++++++-------------------- 2 files changed, 13 insertions(+), 37 deletions(-) diff --git a/serialization/object_serialization.nim b/serialization/object_serialization.nim index e82de13..ae201e0 100644 --- a/serialization/object_serialization.nim +++ b/serialization/object_serialization.nim @@ -101,7 +101,6 @@ macro enumAllSerializedFieldsImpl(T: type, body: untyped): untyped = let fieldType = field.typ - FieldTypeSym = getTypeInst(fieldType) fieldIdent = field.name realFieldName = newLit($fieldIdent.skipPragma) serializedFieldName = field.readPragma("serializedFieldName") @@ -133,15 +132,14 @@ macro enumAllSerializedFieldsImpl(T: type, body: untyped): untyped = result.add quote do: block: when compiles(type(`field`)): + `fieldNameDefs` + type FieldType {.inject, used.} = type(`field`) - when FieldType is `FieldTypeSym`: - `fieldNameDefs` + template fieldCaseDiscriminator: auto {.used.} = `discriminator` + template fieldCaseBranches: auto {.used.} = `branches` - template fieldCaseDiscriminator: auto {.used.} = `discriminator` - template fieldCaseBranches: auto {.used.} = `branches` - - `body` + `body` i += 1 diff --git a/tests/test_object_serialization.nim b/tests/test_object_serialization.nim index c0a2586..1ca35cd 100644 --- a/tests/test_object_serialization.nim +++ b/tests/test_object_serialization.nim @@ -4,41 +4,19 @@ import ../serialization/object_serialization, ../serialization/testing/generic_suite -type - Untrusted = object - Trusted = object - - Signature = object - p: int - k: float - - TrustedSignature = object - data: string - - SignatureHolder[TrustLevel] = object - when TrustLevel is Trusted: - sig: TrustedSignature - origin: string - else: - sig: Signature - -func collectFields(T: type): seq[string] = - enumAllSerializedFields(T): - result.add(name(FieldType) & " " & fieldName & fieldCaseDiscriminator) - suite "object serialization": - test "custom fields order": - check collectFields(Simple) == @["Meter distance", "int x", "string y"] - - test "tuples handling": + setup: var fieldsList = newSeq[string]() + test "custom fields order": + enumAllSerializedFields(Simple): + fieldsList.add(name(FieldType) & " " & fieldName & fieldCaseDiscriminator) + + check fieldsList == @["Meter distance", "int x", "string y"] + + test "tuples handling": enumAllSerializedFields(HoldsTuples): fieldsList.add(fieldName & ": " & $isTuple(FieldType)) check fieldsList == @["t1: true", "t2: true", "t3: true"] - test "when statements": - check collectFields(SignatureHolder[Trusted]) == @["TrustedSignature sig", "string origin"] - check collectFields(SignatureHolder[Untrusted]) == @["Signature sig"] -