123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 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"
|