summary refs log tree commit diff stats
path: root/tests/compile/tisop.nim
blob: 509cc4e95ebd60080612eae721d15f6a84d9e8b6 (plain) (blame)
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
38
39
40
41
42
import typetraits

type
  TRecord = (tuple) or (object)
  
  TFoo[T, U] = object
    x: int

    when T is string:
      y: float
    else:
      y: string

    when U is TRecord:
      z: float

  E = enum A, B, C

macro m(t: typedesc): typedesc =
  if t is enum:
    result = string
  else:
    result = int

var f: TFoo[int, int]
static: assert(f.y.type.name == "string")

when compiles(f.z):
  {.error: "Foo should not have a `z` field".}

proc p(a, b) =
  when a.type is int:
    static: assert false

  var f: TFoo[m(a.type), b.type]
  static:
    assert f.x.type.name == "int"
    assert f.y.type.name == "float"
    assert f.z.type.name == "float"

p(A, f)