@@ -145,14 +145,10 @@ pub fn render(
145
145
let open = Punct :: new ( '{' , Spacing :: Alone ) ;
146
146
let close = Punct :: new ( '}' , Spacing :: Alone ) ;
147
147
148
- if can_read {
148
+ if can_read && !r_impl_items . is_empty ( ) {
149
149
mod_items. extend ( quote ! {
150
- impl R #open
150
+ impl R #open #r_impl_items #close
151
151
} ) ;
152
-
153
- mod_items. extend ( r_impl_items) ;
154
-
155
- close. to_tokens ( & mut mod_items) ;
156
152
}
157
153
158
154
if can_write {
@@ -163,11 +159,11 @@ pub fn render(
163
159
mod_items. extend ( w_impl_items) ;
164
160
165
161
mod_items. extend ( quote ! {
166
- #[ doc = "Writes raw bits to the register." ]
167
- pub unsafe fn bits( & mut self , bits: #rty) -> & mut Self {
168
- self . 0 . bits( bits) ;
169
- self
170
- }
162
+ #[ doc = "Writes raw bits to the register." ]
163
+ pub unsafe fn bits( & mut self , bits: #rty) -> & mut Self {
164
+ self . 0 . bits( bits) ;
165
+ self
166
+ }
171
167
} ) ;
172
168
173
169
close. to_tokens ( & mut mod_items) ;
@@ -455,7 +451,7 @@ pub fn fields(
455
451
let pc = & v. pc ;
456
452
457
453
if has_reserved_variant {
458
- quote ! { #i => Val ( #name_pc_a:: #pc) , }
454
+ quote ! { #i => Some ( #name_pc_a:: #pc) , }
459
455
} else {
460
456
quote ! { #i => #name_pc_a:: #pc, }
461
457
}
@@ -465,35 +461,33 @@ pub fn fields(
465
461
466
462
if has_reserved_variant {
467
463
arms. extend ( quote ! {
468
- i => Res ( i ) ,
469
- } ) ;
464
+ _ => None ,
465
+ } ) ;
470
466
} else if 1 << width. to_ty_width ( ) ? != variants. len ( ) {
471
467
arms. extend ( quote ! {
472
- _ => unreachable!( ) ,
473
- } ) ;
468
+ _ => unreachable!( ) ,
469
+ } ) ;
474
470
}
475
471
476
472
if has_reserved_variant {
477
473
enum_items. extend ( quote ! {
478
- ///Get enumerated values variant
479
- #inline
480
- pub fn variant( & self ) -> crate :: Variant <#fty, #name_pc_a> {
481
- use crate :: Variant :: * ;
482
- match self . bits {
483
- #arms
484
- }
485
- }
486
- } ) ;
474
+ ///Get enumerated values variant
475
+ #inline
476
+ pub fn variant( & self ) -> Option <#name_pc_a> {
477
+ match self . bits {
478
+ #arms
479
+ }
480
+ }
481
+ } ) ;
487
482
} else {
488
483
enum_items. extend ( quote ! {
489
484
///Get enumerated values variant
490
485
#inline
491
486
pub fn variant( & self ) -> #name_pc_a {
492
- match self . bits {
493
- #arms
494
- }
495
- }
496
- } ) ;
487
+ match self . bits {
488
+ #arms
489
+ }
490
+ } } ) ;
497
491
}
498
492
499
493
for v in & variants {
@@ -511,12 +505,12 @@ pub fn fields(
511
505
512
506
let doc = format ! ( "Checks if the value of the field is `{}`" , pc) ;
513
507
enum_items. extend ( quote ! {
514
- #[ doc = #doc]
515
- #inline
516
- pub fn #is_variant( & self ) -> bool {
517
- * * self == #name_pc_a:: #pc
518
- }
519
- } ) ;
508
+ #[ doc = #doc]
509
+ #inline
510
+ pub fn #is_variant( & self ) -> bool {
511
+ * * self == #name_pc_a:: #pc
512
+ }
513
+ } ) ;
520
514
}
521
515
}
522
516
@@ -595,21 +589,19 @@ pub fn fields(
595
589
if !variants. is_empty ( ) {
596
590
if unsafety. is_some ( ) {
597
591
proxy_items. extend ( quote ! {
598
- ///Writes `variant` to the field
599
- #inline
600
- pub fn variant( self , variant: #name_pc_aw) -> & ' a mut W {
601
- unsafe {
602
- self . #bits( variant. into( ) )
592
+ ///Writes `variant` to the field
593
+ #inline
594
+ pub fn variant( self , variant: #name_pc_aw) -> & ' a mut W {
595
+ unsafe { self . #bits( variant. into( ) ) }
603
596
}
604
- }
605
597
} ) ;
606
598
} else {
607
599
proxy_items. extend ( quote ! {
608
- ///Writes `variant` to the field
609
- #inline
610
- pub fn variant( self , variant: #name_pc_aw) -> & ' a mut W {
611
- self . #bits( variant. into( ) )
612
- }
600
+ ///Writes `variant` to the field
601
+ #inline
602
+ pub fn variant( self , variant: #name_pc_aw) -> & ' a mut W {
603
+ self . #bits( variant. into( ) )
604
+ }
613
605
} ) ;
614
606
}
615
607
@@ -619,11 +611,11 @@ pub fn fields(
619
611
620
612
let doc = util:: escape_brackets ( util:: respace ( & v. doc ) . as_ref ( ) ) ;
621
613
proxy_items. extend ( quote ! {
622
- #[ doc = #doc]
623
- #inline
624
- pub fn #sc( self ) -> & ' a mut W {
625
- self . variant( #name_pc_aw:: #pc)
626
- }
614
+ #[ doc = #doc]
615
+ #inline
616
+ pub fn #sc( self ) -> & ' a mut W {
617
+ self . variant( #name_pc_aw:: #pc)
618
+ }
627
619
} ) ;
628
620
}
629
621
}
@@ -650,7 +642,7 @@ pub fn fields(
650
642
///Writes raw bits to the field
651
643
#inline
652
644
pub #unsafety fn #bits( self , value: #fty) -> & ' a mut W {
653
- self . w. bits = ( self . w. bits & !( #hexmask << self . offset) ) | ( ( ( value as #rty) & #hexmask) << self . offset) ;
645
+ self . w. bits = ( self . w. bits & !( #hexmask << self . offset) ) | ( ( value as #rty & #hexmask) << self . offset) ;
654
646
self . w
655
647
}
656
648
}
@@ -660,7 +652,7 @@ pub fn fields(
660
652
///Writes raw bits to the field
661
653
#inline
662
654
pub #unsafety fn #bits( self , value: #fty) -> & ' a mut W {
663
- self . w. bits = ( self . w. bits & !( #hexmask << #offset) ) | ( ( ( value as #rty) & #hexmask) << #offset) ;
655
+ self . w. bits = ( self . w. bits & !( #hexmask << #offset) ) | ( ( value as #rty & #hexmask) << #offset) ;
664
656
self . w
665
657
}
666
658
}
@@ -669,7 +661,7 @@ pub fn fields(
669
661
///Writes raw bits to the field
670
662
#inline
671
663
pub #unsafety fn #bits( self , value: #fty) -> & ' a mut W {
672
- self . w. bits = ( self . w. bits & !#hexmask) | ( ( value as #rty) & #hexmask) ;
664
+ self . w. bits = ( self . w. bits & !#hexmask) | ( value as #rty & #hexmask) ;
673
665
self . w
674
666
}
675
667
}
0 commit comments