diff --git a/generators/nim/glue.nim b/generators/nim/glue.nim index 31a203b..23a4372 100644 --- a/generators/nim/glue.nim +++ b/generators/nim/glue.nim @@ -1,3 +1,32 @@ +import macros + +proc getChildren(node: NimNode, nodeKind: NimNodeKind): seq[NimNode] = + var stack: seq[NimNode] = @[node] + result = @[] + + while stack.len() > 0: + let newNode = stack.pop() + for i in 0 ..< newNode.len(): + let child = newNode[i] + if child.kind == nodeKind: + result.add(child) + else: + stack.add(child) + +macro `@`*(objName: typed, fields: untyped): untyped = + + let objImpl = objName.getImpl() + let identDefs = objImpl.getChildren(nnkIdentDefs) + + result = newNimNode(nnkObjConstr).add(objImpl[0]) + + for i in 0..