summary refs log tree commit diff stats
path: root/tests/bind/tbind.nim
blob: 49c37ae2e081c22f13efe2aeb7a017e94b67a059 (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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
discard """
output: '''
3
1
1
1
'''
"""


block tbind:
# Test the new ``bind`` keyword for templates

  proc p1(x: int8, y: int): int = return x + y

  template tempBind(x, y): untyped =
    bind p1
    p1(x, y)

  proc p1(x: int, y: int8): int = return x - y

  # This is tricky: the call to ``p1(1'i8, 2'i8)`` should not fail in line 6,
  # because it is not ambiguous there. But it is ambiguous after line 8.

  echo tempBind(1'i8, 2'i8) #OUT 3


import mbind3
echo genId() #OUT 1


import strtabs
block tbinoverload:
  template t() =
    block:
      bind newStringTable
      discard {"Content-Type": "text/html"}.newStringTable()

      discard {:}.newStringTable
  #discard {"Content-Type": "text/html"}.newStringTable()
  t()


block tmixin:
  type
    TFoo1 = object of RootObj
      v: int
    TFoo2 = object of TFoo1
      v2: int

  proc test(f: TFoo1) =
    echo "1"

  proc Foo[T](f: T) =
    mixin test
    test(f)

  var
    a: TFoo1
    b: TFoo2


  proc test(f: TFoo2) =
    echo "2"

  Foo(a)
  Foo(b)