summary refs log tree commit diff stats
path: root/tests/macros/tcasestmtmacro.nim
blob: 32019a92a6c0b31956335925983f28612b42e7fc (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
discard """
  output: '''
yes
'''
"""

import macros

macro `case`(n: tuple): untyped =
  result = newTree(nnkIfStmt)
  let selector = n[0]
  for i in 1 ..< n.len:
    let it = n[i]
    case it.kind
    of nnkElse, nnkElifBranch, nnkElifExpr, nnkElseExpr:
      result.add it
    of nnkOfBranch:
      for j in 0..it.len-2:
        let cond = newCall("==", selector, it[j])
        result.add newTree(nnkElifBranch, cond, it[^1])
    else:
      error "custom 'case' for tuple cannot handle this node", it

var correct = false

case ("foo", 78)
of ("foo", 78):
  correct = true
  echo "yes"
of ("bar", 88): echo "no"
else: discard

doAssert correct