Open cgdae opened 2 years ago
When cppyy reads a bitfield it seems to give the wrong value, apparently because it is including all higher bits.
And setting an individual bitfield seems to set the whole bitfield's word value.
This is with cppyy-2.3.0.
Here's a reproducer:
import cppyy cppyy.cppdef(''' struct Foo { unsigned int a : 1; unsigned int b : 2; unsigned int c : 4; unsigned int d : 1; unsigned int e : 8; unsigned int f :16; Foo() : a(1), b(0), c(0), d(0), e(0x33), f(0x5555) {} }; ''') f = cppyy.gbl.Foo(); print( f'a=0x{f.a:x}') print( f'b=0x{f.b:x}') print( f'c=0x{f.c:x}') print( f'd=0x{f.d:x}') print( f'e=0x{f.e:x}') print( f'f=0x{f.f:x}') f.c = 0xf0 print('After setting f.c to 0xf0:') print( f'a=0x{f.a:x}') print( f'b=0x{f.b:x}') print( f'c=0x{f.c:x}') print( f'd=0x{f.d:x}') print( f'e=0x{f.e:x}') print( f'f=0x{f.f:x}')
I'd expect this to output something like:
a=0x1 b=0x0 c=0x0 d=0x0 e=0x33 f=0x5555 After setting f.c to 0xf0: a=0x1 b=0x0 c=0xf0 d=0x0 e=0x33 f=0x5555
But i get:
a=0x55553301 b=0x55553301 c=0x55553301 d=0x55553301 e=0x555533 f=0x5555 After setting f.c to 0xf0: a=0xf0 b=0xf0 c=0xf0 d=0xf0 e=0x0 f=0x0
Thanks.
You're the first to ask about bitfields. :) Had to come one day. I'll have a look and see how they can be supported.
When cppyy reads a bitfield it seems to give the wrong value, apparently because it is including all higher bits.
And setting an individual bitfield seems to set the whole bitfield's word value.
This is with cppyy-2.3.0.
Here's a reproducer:
I'd expect this to output something like:
But i get:
Thanks.