diff options
Diffstat (limited to 'tests/macros/tmacrogenerics.nim')
-rw-r--r-- | tests/macros/tmacrogenerics.nim | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/macros/tmacrogenerics.nim b/tests/macros/tmacrogenerics.nim new file mode 100644 index 000000000..c31b5564c --- /dev/null +++ b/tests/macros/tmacrogenerics.nim @@ -0,0 +1,38 @@ +discard """ + nimout: ''' +instantiation 1 with typeDesc[int] and typeDesc[float] +instantiation 2 with typeDesc[float] and typeDesc[string] +instantiation 3 with typeDesc[string] and typeDesc[string] +counter: 3 +''' + output: "int\nfloat\nint\nstring" +""" + +import typetraits, macros + +var counter {.compileTime.} = 0 + +macro makeBar(A, B: typedesc): typedesc = + inc counter + echo "instantiation ", counter, " with ", A.getTypeInst.repr, " and ", B.getTypeInst.repr + result = A + +type + Bar[T, U] = makeBar(T, U) + +var bb1: Bar[int, float] +var bb2: Bar[float, string] +var bb3: Bar[int, float] +var bb4: Bar[string, string] + +proc match(a: int) = echo "int" +proc match(a: string) = echo "string" +proc match(a: float) = echo "float" + +match(bb1) +match(bb2) +match(bb3) +match(bb4) + +static: + echo "counter: ", counter |