import std/macros func identName(identDefs: NimNode): NimNode = identDefs.expectKind(nnkIdentDefs) identDefs[0] func identType(identDefs: NimNode): NimNode = identDefs.expectKind(nnkIdentDefs) identDefs[^2] func `identType=`(identDefs: NimNode, identType: NimNode) = identDefs.expectKind(nnkIdentDefs) identDefs[^2] = identType func insertRef(function: NimNode) = function.expectKind(nnkFuncDef) var paramType = function.params[1].identType if paramType.kind == nnkVarTy: paramType = paramType[0] function.params[1].identType = newNimNode(nnkRefTy, paramType).add(paramType) func paramNames(function: NimNode): seq[NimNode] = function.expectKind(nnkFuncDef) for i in 1..