diff options
Diffstat (limited to 'tests/accept/compile/tdumpast.nim')
-rw-r--r-- | tests/accept/compile/tdumpast.nim | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/accept/compile/tdumpast.nim b/tests/accept/compile/tdumpast.nim new file mode 100644 index 000000000..fb31af0ec --- /dev/null +++ b/tests/accept/compile/tdumpast.nim @@ -0,0 +1,35 @@ +# Dump the contents of a PNimrodNode + +import macros + +proc dumpit(n: PNimrodNode): string {.compileTime.} = + if n == nil: return "nil" + result = $n.kind + add(result, "(") + case n.kind + of nnkEmpty: nil # same as nil node in this representation + of nnkNilLit: add(result, "nil") + of nnkCharLit..nnkInt64Lit: add(result, $n.intVal) + of nnkFloatLit..nnkFloat64Lit: add(result, $n.floatVal) + of nnkStrLit..nnkTripleStrLit: add(result, $n.strVal) + of nnkIdent: add(result, $n.ident) + of nnkSym, nnkNone: assert false + else: + add(result, dumpit(n[0])) + for j in 1..n.len-1: + add(result, ", ") + add(result, dumpit(n[j])) + add(result, ")") + +macro dumpAST(n: stmt): stmt = + # dump AST as a side-effect and return the inner node + echo dumpit(n) + result = n[1] + +dumpAST: + proc add(x, y: int): int = + return x + y + + proc sub(x, y: int): int = return x - y + + |