Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement