summary refs log tree commit diff stats
path: root/tests/macros/tmacrogenerics.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/macros/tmacrogenerics.nim')
-rw-r--r--tests/macros/tmacrogenerics.nim38
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