File: tmacrogenerics.nim

package info (click to toggle)
nim 0.19.4-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 462,356 kB
  • sloc: sh: 11,089; ansic: 4,699; makefile: 706; python: 309; sql: 297; asm: 141; xml: 13
file content (37 lines) | stat: -rw-r--r-- 683 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
discard """
  file: "tmacrogenerics.nim"
  msg: '''
instantiation 1 with typedesc and typedesc
counter: 1
'''
  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.name, " and ", B.name
  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