diff options
Diffstat (limited to 'tests/macros/tmacro5.nim')
-rw-r--r-- | tests/macros/tmacro5.nim | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/macros/tmacro5.nim b/tests/macros/tmacro5.nim new file mode 100644 index 000000000..39324e497 --- /dev/null +++ b/tests/macros/tmacro5.nim @@ -0,0 +1,59 @@ +import macros,json + +var decls{.compileTime.}: seq[PNimrodNode] = @[] +var impls{.compileTime.}: seq[PNimrodNode] = @[] + +macro importImpl_forward(name, returns): stmt {.immediate.} = + result = newNimNode(nnkEmpty) + var func_name = newNimNode(nnkAccQuoted) + func_name.add newIdentNode("import") + func_name.add name + + var res = newNimNode(nnkProcDef) + res.add newNimNode(nnkPostfix) + res[0].add newIdentNode("*") + res[0].add func_name + res.add newNimNode(nnkEmpty) + res.add newNimNode(nnkEmpty) + res.add newNimNode(nnkFormalParams) + res[3].add returns + var p1 = newNimNode(nnkIdentDefs) + p1.add newIdentNode("dat") + p1.add newIdentNOde("PJsonNode") + p1.add newNimNode(nnkEmpty) + res[3].add p1 + var p2 = newNimNode(nnkIdentDefs) + p2.add newIdentNode("errors") + p2.add newNimNode(nnkVarTy) + p2.add newNimNode(nnkEmpty) + p2[1].add newNimNode(nnkBracketExpr) + p2[1][0].add newIdentNode("seq") + p2[1][0].add newIdentNode("string") + res[3].add p2 + + res.add newNimNode(nnkEmpty) + res.add newNimNode(nnkEmpty) + res.add newNimNode(nnkEmpty) + + decls.add res + echo(repr(res)) + +macro importImpl(name, returns: expr, body: stmt): stmt {.immediate.} = + #var res = getAST(importImpl_forward(name, returns)) + discard getAST(importImpl_forward(name, returns)) + var res = copyNimTree(decls[decls.high]) + res[6] = body + echo repr(res) + impls.add res + +macro okayy:stmt = + result = newNimNode(nnkStmtList) + for node in decls: result.add node + for node in impls: result.add node + +importimpl(Item, int): + echo 42 +importImpl(Foo, int16): + echo 77 + +okayy \ No newline at end of file |