summary refs log tree commit diff stats
path: root/tests/run/tmacros1.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2011-11-19 15:45:51 +0100
committerAraq <rumpf_a@web.de>2011-11-19 15:45:51 +0100
commita274f3bf5be3fc35f1538e5aab0e32fb9ed2ff82 (patch)
tree95dc5bf7fe3716a3ab266f78094fccce38c94ccf /tests/run/tmacros1.nim
parentd0772feb08baaea12bfdad0a7c20a41733f977bd (diff)
downloadNim-a274f3bf5be3fc35f1538e5aab0e32fb9ed2ff82.tar.gz
got rid of 'accept' dir in the tests
Diffstat (limited to 'tests/run/tmacros1.nim')
-rwxr-xr-xtests/run/tmacros1.nim32
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/run/tmacros1.nim b/tests/run/tmacros1.nim
new file mode 100755
index 000000000..8cf2a5aa7
--- /dev/null
+++ b/tests/run/tmacros1.nim
@@ -0,0 +1,32 @@
+discard """
+  output: "Got: 'nnkIntLit' hi"
+"""
+
+import
+  macros, strutils
+
+macro outterMacro*(n: stmt): stmt =
+  var j : string = "hi"
+  proc innerProc(i: int): string =
+    echo "Using arg ! " & n.repr
+    result = "Got: '" & $n.kind & "' " & $j
+  if n.kind != TNimrodNodeKind.nnkMacroStmt:
+    error("Macro " & n[0].repr & " requires a block.")
+  var callNode = n[0]
+  expectKind(callNode, TNimrodNodeKind.nnkCall)
+  if callNode.len != 2 or callNode[1].kind != TNimrodNodeKind.nnkIdent:
+    error("Macro " & callNode.repr &
+      " requires the ident passed as parameter (eg: " & callNode.repr & 
+      "(the_name_you_want)): statements.")
+  result = newNimNode(TNimrodNodeKind.nnkStmtList)
+  var ass : PNimrodNode = newNimNode(TNimrodNodeKind.nnkAsgn)
+  ass.add(newIdentNode(callNode[1].ident))
+  ass.add(newStrLitNode(innerProc(4)))
+  result.add(ass)
+
+var str: string
+outterMacro(str):
+  "hellow"
+echo str
+
+