summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-02-05 23:43:13 +0100
committerAraq <rumpf_a@web.de>2014-02-05 23:43:13 +0100
commitd912d1837963b11e1df622c7b41e39827f95599c (patch)
tree09c987c5474376e4cd34c226d0d367d29f7840a0 /tests
parentc097acedd30602fba903ed4ee132b5e5bae91017 (diff)
downloadNim-d912d1837963b11e1df622c7b41e39827f95599c.tar.gz
tyTypeDesc and tyRange always have 1 child; this might be tyNone but it is required for skipTypes
Diffstat (limited to 'tests')
-rw-r--r--tests/macros/tdebugstmt.nim29
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/macros/tdebugstmt.nim b/tests/macros/tdebugstmt.nim
new file mode 100644
index 000000000..865dc436a
--- /dev/null
+++ b/tests/macros/tdebugstmt.nim
@@ -0,0 +1,29 @@
+discard """
+  output: '''a[0]: 42
+a[1]: 45
+x: some string'''
+"""
+
+import macros
+
+macro debug(n: varargs[expr]): stmt =
+  # `n` is a Nimrod AST that contains the whole macro invocation
+  # this macro returns a list of statements:
+  result = newNimNode(nnkStmtList, n)
+  # iterate over any argument that is passed to this macro:
+  for i in 0..n.len-1:
+    # add a call to the statement list that writes the expression;
+    # `toStrLit` converts an AST to its string representation:
+    add(result, newCall("write", newIdentNode("stdout"), toStrLit(n[i])))
+    # add a call to the statement list that writes ": "
+    add(result, newCall("write", newIdentNode("stdout"), newStrLitNode(": ")))
+    # add a call to the statement list that writes the expressions value:
+    add(result, newCall("writeln", newIdentNode("stdout"), n[i]))
+
+var
+  a: array [0..10, int]
+  x = "some string"
+a[0] = 42
+a[1] = 45
+
+debug(a[0], a[1], x)