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