diff options
author | Araq <rumpf_a@web.de> | 2014-02-05 23:43:13 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2014-02-05 23:43:13 +0100 |
commit | d912d1837963b11e1df622c7b41e39827f95599c (patch) | |
tree | 09c987c5474376e4cd34c226d0d367d29f7840a0 /tests | |
parent | c097acedd30602fba903ed4ee132b5e5bae91017 (diff) | |
download | Nim-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.nim | 29 |
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) |