From 14529c3fe1ffcfab8b8a0baa022f951e05bab578 Mon Sep 17 00:00:00 2001 From: Joey Yakimowich-Payne Date: Wed, 6 Jun 2018 17:29:40 +0900 Subject: [PATCH] Add nim glue for object construction --- generators/nim/glue.nim | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) 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..