summary refs log blame commit diff stats
path: root/tests/accept/compile/tdumpast.nim
blob: fb31af0ec83311d08ee44ed3a4072b08e07f3725 (plain) (tree)


































                                                             
# 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