summary refs log tree commit diff stats
path: root/tests/macros/tmacro5.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/macros/tmacro5.nim')
-rw-r--r--tests/macros/tmacro5.nim59
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