blob: 9882ad90d2cdd089c2b3a520e9429aea712d4c95 (
plain) (
tree)
|
|
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
|