File tree Expand file tree Collapse file tree 2 files changed +37
-8
lines changed Expand file tree Collapse file tree 2 files changed +37
-8
lines changed Original file line number Diff line number Diff line change @@ -341,6 +341,13 @@ impl Member {
341
341
342
342
let ignore = ignore || access == Access :: None ;
343
343
344
+ // compute the offset
345
+ let offset = if order == Order :: Lsb {
346
+ offset
347
+ } else {
348
+ base_bits - offset - bits
349
+ } ;
350
+
344
351
if bits > 0 && !ignore {
345
352
// overflow check
346
353
if offset + bits > base_bits {
@@ -358,13 +365,6 @@ impl Member {
358
365
Access :: None => ( quote ! ( ) , quote ! ( ) ) ,
359
366
} ;
360
367
361
- // compute the offset
362
- let offset = if order == Order :: Lsb {
363
- offset
364
- } else {
365
- base_bits - offset - bits
366
- } ;
367
-
368
368
// auto-conversion from zero
369
369
if default. is_empty ( ) {
370
370
if !from. is_empty ( ) {
@@ -427,7 +427,8 @@ impl Member {
427
427
let repr_into = & self . repr_into ;
428
428
let repr_from = & self . repr_from ;
429
429
let bits = self . bits as u32 ;
430
- quote ! {
430
+
431
+ quote ! {
431
432
let mask = #base_ty:: MAX >> ( #base_ty:: BITS - #bits) ;
432
433
this. 0 = #repr_from( #repr_into( this. 0 ) | ( ( ( #default as #base_ty) & mask) << #offset) ) ;
433
434
}
Original file line number Diff line number Diff line change @@ -565,3 +565,31 @@ fn default_without_setter() {
565
565
reserved : bool
566
566
}
567
567
}
568
+
569
+ #[ test]
570
+ fn default_msb_padding_default_value ( ) {
571
+ #[ bitfield( u8 , order = Msb ) ]
572
+ struct MyMsbByte {
573
+ #[ bits( 4 , default = 0b1111 ) ]
574
+ __padding : usize ,
575
+ #[ bits( 4 , default = 0b1010 ) ]
576
+ kind : usize ,
577
+ }
578
+ let my_byte_msb = MyMsbByte :: new ( ) ;
579
+ let val: u8 = my_byte_msb. into ( ) ;
580
+ assert_eq ! ( val, 0b1111_1010 ) ;
581
+ }
582
+
583
+ #[ test]
584
+ fn default_lsb_padding_default_value ( ) {
585
+ #[ bitfield( u8 , order = Lsb ) ]
586
+ struct MyMsbByte {
587
+ #[ bits( 4 , default = 0b1111 ) ]
588
+ __padding : usize ,
589
+ #[ bits( 4 , default = 0b1010 ) ]
590
+ kind : usize ,
591
+ }
592
+ let my_byte_msb = MyMsbByte :: new ( ) ;
593
+ let val: u8 = my_byte_msb. into ( ) ;
594
+ assert_eq ! ( val, 0b1010_1111 ) ;
595
+ }
You can’t perform that action at this time.
0 commit comments