summary refs log tree commit diff stats
path: root/tests/macros/tdumpast2.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/macros/tdumpast2.nim')
-rw-r--r--tests/macros/tdumpast2.nim36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/macros/tdumpast2.nim b/tests/macros/tdumpast2.nim
new file mode 100644
index 000000000..c4c591b2a
--- /dev/null
+++ b/tests/macros/tdumpast2.nim
@@ -0,0 +1,36 @@
+# Dump the contents of a NimNode
+
+import macros
+
+proc dumpit(n: NimNode): string {.compileTime.} =
+  if n == nil: return "nil"
+  result = $n.kind
+  add(result, "(")
+  case n.kind
+  of nnkEmpty: discard # 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): untyped =
+  # dump AST as a side-effect and return the inner node
+  let n = callsite()
+  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
+
+