From a99dafab420bcbbffee35e9bd847a9014eafaffe Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Wed, 27 May 2020 11:30:56 +0300 Subject: [PATCH] Handle another corner case in recordFields --- stew/shims/macros.nim | 4 +++- tests/test_macros.nim | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/stew/shims/macros.nim b/stew/shims/macros.nim index 8fc4541..b8df6cb 100644 --- a/stew/shims/macros.nim +++ b/stew/shims/macros.nim @@ -160,6 +160,8 @@ proc collectFieldsInHierarchy(result: var seq[FieldDescription], objectType: NimNode) = var objectType = objectType + objectType.expectKind {nnkObjectTy, nnkRefTy} + if objectType.kind == nnkRefTy: objectType = objectType[0] @@ -173,7 +175,7 @@ proc collectFieldsInHierarchy(result: var seq[FieldDescription], baseType = getImpl(baseType) baseType.expectKind nnkTypeDef baseType = baseType[2] - baseType.expectKind nnkObjectTy + baseType.expectKind {nnkObjectTy, nnkRefTy} collectFieldsInHierarchy result, baseType let recList = objectType[2] diff --git a/tests/test_macros.nim b/tests/test_macros.nim index ebb31d2..b223c2e 100644 --- a/tests/test_macros.nim +++ b/tests/test_macros.nim @@ -17,6 +17,9 @@ type DerivedType = ref object of BaseType derivedField: int + DerivedFromRefType = ref object of DerivedType + anotherDerivedField: string + macro getFieldsLists(T: type): untyped = result = newTree(nnkBracket) @@ -29,10 +32,11 @@ macro getFieldsLists(T: type): untyped = result.add newLit($f.name) static: - doAssert getFieldsLists(DerivedType) == [ + doAssert getFieldsLists(DerivedFromRefType) == [ "baseField", "baseCaseField", "baseA", - "derivedField" + "derivedField", + "anotherDerivedField" ]