about summary refs log tree commit diff stats
BranchCommit messageAuthorAge
hlthalt until exception when waiting for keyboardKartik K. Agaram19 months
mainfix other mandelbrot variantsKartik K. Agaram9 months
 
om> 2022-09-01 18:10:00 +0200 support cstring in `case` (#20130)' href='/ahoang/Nim/commit/tests/casestmt/tcstring.nim?h=devel&id=a95b6391fd353074daf2dbfed4d73e8d57f314ca'>a95b6391f ^
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



















































                                                                     
discard """
  targets: "c cpp js"
"""

type Result = enum none, a, b, c, d, e, f

proc foo1(x: cstring): Result =
  const y = cstring"hash"
  const arr = [cstring"it", cstring"finally"]
  result = none
  case x
  of "Andreas", "Rumpf": result = a
  of cstring"aa", "bb": result = b
  of "cc", y, "when": result = c
  of "will", arr, "be", "generated": result = d
  of nil: result = f

var results = [
  foo1("Rumpf"), foo1("Andreas"),
  foo1("aa"), foo1(cstring"bb"),
  foo1("cc"), foo1("hash"),
  foo1("finally"), foo1("generated"),
  foo1("no"), foo1("another no"),
  foo1(nil)]
doAssert results == [a, a, b, b, c, c, d, d, none, none, f], $results

proc foo2(x: cstring): Result =
  const y = cstring"hash"
  const arr = [cstring"it", cstring"finally"]
  doAssert not (compiles do:
    result = case x
    of "Andreas", "Rumpf": a
    of cstring"aa", "bb": b
    of "cc", y, "when": c
    of "will", arr, "be", "generated": d)
  case x
  of "Andreas", "Rumpf": a
  of cstring"aa", "bb": b
  of "cc", y, "when": c
  of "will", arr, "be", "generated": d
  of nil: f
  else: e

results = [
  foo2("Rumpf"), foo2("Andreas"),
  foo2("aa"), foo2(cstring"bb"),
  foo2("cc"), foo2("hash"),
  foo2("finally"), foo2("generated"),
  foo2("no"), foo2("another no"),
  foo2(nil)]

doAssert results == [a, a, b, b, c, c, d, d, e, e, f], $results