diff options
author | Araq <rumpf_a@web.de> | 2011-11-19 15:45:51 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2011-11-19 15:45:51 +0100 |
commit | a274f3bf5be3fc35f1538e5aab0e32fb9ed2ff82 (patch) | |
tree | 95dc5bf7fe3716a3ab266f78094fccce38c94ccf /tests/run/tmacros1.nim | |
parent | d0772feb08baaea12bfdad0a7c20a41733f977bd (diff) | |
download | Nim-a274f3bf5be3fc35f1538e5aab0e32fb9ed2ff82.tar.gz |
got rid of 'accept' dir in the tests
Diffstat (limited to 'tests/run/tmacros1.nim')
-rwxr-xr-x | tests/run/tmacros1.nim | 32 |
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 + + |