import macros
macro mkmac(a, b, c: untyped): untyped =
result = newStmtList()
result.add quote do:
`a` * (`b` + `c`)
macro mkmacro(fn: static[string]): untyped =
result = newStmtList()
var body = newStmtList()
body.add("write".newCall("stdout".ident, "TEST\n".newStrLitNode))
var bra = nnkBracket.newTree
bra.add(3.newIntLitNode)
bra.add(7.newIntLitNode)
bra.add(1.newIntLitNode)
let seq = bra.prefix("@")
let seqLit = @[3, 7, 1].newLit
body.add("echo".newCall(nnkInFix.newTree("==".ident, seq, seqLit)))
let ast: NimNode = getAst mkmac("x".ident, "y".ident, "z".ident)
body.add(newAssignment("result".ident, ast))
result.add(newProc(fn.ident.postfix("*"),
["int".ident,
newIdentDefs("x".ident, "int".ident),
newIdentDefs("y".ident, "int".ident),
newIdentDefs("z".ident, "int".ident)],
body, nnkProcDef, newEmptyNode()))
let hoge: int = 3
mkmacro "fuga"
echo hoge.fuga(4, 1)