diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2015-08-14 01:51:25 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2015-08-14 01:51:25 +0200 |
commit | b3abcaf9e88b12aeb33809d462835bb84a156249 (patch) | |
tree | 60fb6390e17e57a388076108996c66921975d5b9 /tests | |
parent | ad245dbd77eb8c4b49d4c7df7d7458184aff07cf (diff) | |
parent | fe124ceadc887f0ae4aa09e9af4fe96b91df670a (diff) | |
download | Nim-b3abcaf9e88b12aeb33809d462835bb84a156249.tar.gz |
Merge pull request #3177 from zah/generic-types-in-macros
Generic types in macros
Diffstat (limited to 'tests')
-rw-r--r-- | tests/macros/tstaticparamsmacro.nim | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/macros/tstaticparamsmacro.nim b/tests/macros/tstaticparamsmacro.nim new file mode 100644 index 000000000..1ab638396 --- /dev/null +++ b/tests/macros/tstaticparamsmacro.nim @@ -0,0 +1,74 @@ +discard """ + msg: '''letters +aa +bb +numbers +11 +22 +AST a +[(11, 22), (33, 44)] +AST b +(e: [55, 66], f: [77, 88]) +55 +10 +20Test +20 +''' +""" + +import macros + +type + TConfig = tuple + letters: seq[string] + numbers:seq[int] + +const data: Tconfig = (@["aa", "bb"], @[11, 22]) + +macro mymacro(data: static[TConfig]): stmt = + echo "letters" + for s in items(data.letters): + echo s + echo "numbers" + for n in items(data.numbers): + echo n + +mymacro(data) + +type + Ta = seq[tuple[c:int, d:int]] + Tb = tuple[e:seq[int], f:seq[int]] + +const + a : Ta = @[(11, 22), (33, 44)] + b : Tb = (@[55,66], @[77, 88]) + +macro mA(data: static[Ta]): stmt = + echo "AST a \n", repr(data) + +macro mB(data: static[Tb]): stmt = + echo "AST b \n", repr(data) + echo data.e[0] + +mA(a) +mB(b) + +type + Foo[N: static[int], Z: static[string]] = object + +macro staticIntMacro(f: static[int]): stmt = echo f +staticIntMacro 10 + +var + x: Foo[20, "Test"] + +macro genericMacro[N; Z: static[string]](f: Foo[N, Z], ll = 3, zz = 12): stmt = + echo N, Z + +genericMacro x + +template genericTemplate[N, Z](f: Foo[N, Z], ll = 3, zz = 12): int = N + +static: + echo genericTemplate(x) + |