mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-30 01:44:37 +00:00
34 lines
631 B
Nim
34 lines
631 B
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
|
|
|