summary refs log blame commit diff stats
path: root/tests/macros/tdebugstmt.nim
blob: 865dc436a9cc51c384131f9f6cf48b5b87184315 (plain) (tree)




























                                                                              
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)