blob: f3b1e2894b17330da1e01d42a7a7e98cf6f0166f (
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
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"
|