summary refs log tree commit diff stats
path: root/tests/macros/tdumpast.nim
blob: 160e4e194088fb4746da257ee37220fe525965eb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Dump the contents of a PNimrodNode

import macros

template plus(a, b: expr): expr {.dirty} =
  a + b

macro call(e: expr): expr =
  result = newCall("foo", newStrLitNode("bar"))
  
macro dumpAST(n: stmt): stmt {.immediate.} =
  # 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())
  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