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" ]