File: t14511.nim

package info (click to toggle)
nim 2.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,911,644 kB
  • sloc: sh: 24,603; ansic: 1,761; python: 1,492; makefile: 1,013; sql: 298; asm: 141; xml: 13
file content (54 lines) | stat: -rw-r--r-- 1,474 bytes parent folder | download | duplicates (3)
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
discard """
  output: "true\n(y: XInt, a: 5)\n(y: XString, b: \"abc\")"
"""

import macros

block TEST_1:
  # https://github.com/nim-lang/Nim/issues/14511

  template myPragma() {.pragma.}

  type
    XType = enum
      XInt,
      XString,
      XUnused
    X = object
      case y {.myPragma.}: XType
        of XInt, XUnused:
          a: int
        else: # <-- Else case caused the "Error: index 1 not in 0 .. 0" error
          b: string

  var x: X = X(y: XInt, a: 5)
  echo x.y.hasCustomPragma(myPragma)
  echo x
  echo X(y: XString, b: "abc")


block TEST_2:
  template myDevice(val: string) {.pragma.}
  template myKey(val: string) {.pragma.}
  template myMouse(val: string) {.pragma.}

  type
    Device {.pure.} = enum Keyboard, Mouse
    Key = enum Key1, Key2
    Mouse = enum Mouse1, Mouse2

  type
    Obj = object of RootObj
      case device {.myDevice: "MyDevicePragmaStr".}: Device
      of Device.Keyboard:
        key {.myKey: "MyKeyPragmaStr".}: Key
      else: # <-- Else case caused the "Error: index 1 not in 0 .. 0" error
        mouse {.myMouse: "MyMousePragmaStr".}: Mouse

  var obj: Obj
  assert obj.device.hasCustomPragma(myDevice) == true
  assert obj.key.hasCustomPragma(myKey) == true
  assert obj.mouse.hasCustomPragma(myMouse) == true
  assert obj.device.getCustomPragmaVal(myDevice) == "MyDevicePragmaStr"
  assert obj.key.getCustomPragmaVal(myKey) == "MyKeyPragmaStr"
  assert obj.mouse.getCustomPragmaVal(myMouse) == "MyMousePragmaStr"