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
    

Reply via email to