Files
Nim/tests/macros/tdumpast.nim
2020-02-11 21:33:06 +01:00

51 lines
1.0 KiB
Nim

# Dump the contents of a NimNode
import macros
template plus(a, b: untyped): untyped {.dirty} =
a + b
macro call(e: untyped): untyped =
result = newCall("foo", newStrLitNode("bar"))
macro dumpAST(n: untyped): untyped =
# dump AST as a side-effect and return the inner node
let n = callsite()
echo n.lispRepr
echo n.treeRepr
var plusAst = getAst(plus(1, 2))
echo plusAst.lispRepr
var callAst = getAst(call(4))
echo callAst.lispRepr
var e = parseExpr("foo(bar + baz)")
echo e.lispRepr
result = n[1]
dumpAST:
proc add(x, y: int): int =
return x + y
proc sub(x, y: int): int = return x - y
macro fun() =
let n = quote do:
1+1 == 2
doAssert n.repr == "1 + 1 == 2", n.repr
fun()
macro fun2(): untyped =
let n = quote do:
1 + 2 * 3 == 1 + 6
doAssert n.repr == "1 + 2 * 3 == 1 + 6", n.repr
fun2()
macro fun3(): untyped =
let n = quote do:
int | float | array | seq | object | ptr | pointer | float32
doAssert n.repr == "int | float | array | seq | object | ptr | pointer | float32", n.repr
fun3()