type
E = enum
a = 0
b = 1
c = 2
d = 8
EventFlag* {.size: sizeof(cint), pure.} = enum
exposure = 1
pointerMotion = 2
pointerMotionHint = 3
buttonMotion = 4
button1Motion = 5
button2Motion = 6
button3Motion = 7
buttonPress = 8
buttonRelease = 9
keyPress = 10
EventMask* {.size: sizeof(cint).} = set[EventFlag]
echo cast[int]({E.a})
echo cast[int]({E.b})
echo cast[int]({E.c})
echo cast[int]({E.d})
echo cast[int]({EventFlag.buttonPress})
$ nim c -r t.nim
1
2
4
256
128
Did you expect number 128 for last output line? Well I expected 256.
Seems if we use sets of enums for mask in wrapper code, we have to ensure that lowest enum is zero. And insert a dummy zero if necessary.
EventFlag* {.size: sizeof(cint), pure.} = enum
dummy = 0
exposure = 1
pointerMotion = 2