@@ -145,14 +145,10 @@ pub fn render(
145145 let open = Punct :: new ( '{' , Spacing :: Alone ) ;
146146 let close = Punct :: new ( '}' , Spacing :: Alone ) ;
147147
148- if can_read {
148+ if can_read && !r_impl_items . is_empty ( ) {
149149 mod_items. extend ( quote ! {
150- impl R #open
150+ impl R #open #r_impl_items #close
151151 } ) ;
152-
153- mod_items. extend ( r_impl_items) ;
154-
155- close. to_tokens ( & mut mod_items) ;
156152 }
157153
158154 if can_write {
@@ -163,11 +159,11 @@ pub fn render(
163159 mod_items. extend ( w_impl_items) ;
164160
165161 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+ }
171167 } ) ;
172168
173169 close. to_tokens ( & mut mod_items) ;
@@ -455,7 +451,7 @@ pub fn fields(
455451 let pc = & v. pc ;
456452
457453 if has_reserved_variant {
458- quote ! { #i => Val ( #name_pc_a:: #pc) , }
454+ quote ! { #i => Some ( #name_pc_a:: #pc) , }
459455 } else {
460456 quote ! { #i => #name_pc_a:: #pc, }
461457 }
@@ -465,35 +461,33 @@ pub fn fields(
465461
466462 if has_reserved_variant {
467463 arms. extend ( quote ! {
468- i => Res ( i ) ,
469- } ) ;
464+ _ => None ,
465+ } ) ;
470466 } else if 1 << width. to_ty_width ( ) ? != variants. len ( ) {
471467 arms. extend ( quote ! {
472- _ => unreachable!( ) ,
473- } ) ;
468+ _ => unreachable!( ) ,
469+ } ) ;
474470 }
475471
476472 if has_reserved_variant {
477473 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+ } ) ;
487482 } else {
488483 enum_items. extend ( quote ! {
489484 ///Get enumerated values variant
490485 #inline
491486 pub fn variant( & self ) -> #name_pc_a {
492- match self . bits {
493- #arms
494- }
495- }
496- } ) ;
487+ match self . bits {
488+ #arms
489+ }
490+ } } ) ;
497491 }
498492
499493 for v in & variants {
@@ -511,12 +505,12 @@ pub fn fields(
511505
512506 let doc = format ! ( "Checks if the value of the field is `{}`" , pc) ;
513507 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+ } ) ;
520514 }
521515 }
522516
@@ -595,21 +589,19 @@ pub fn fields(
595589 if !variants. is_empty ( ) {
596590 if unsafety. is_some ( ) {
597591 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( ) ) }
603596 }
604- }
605597 } ) ;
606598 } else {
607599 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+ }
613605 } ) ;
614606 }
615607
@@ -619,11 +611,11 @@ pub fn fields(
619611
620612 let doc = util:: escape_brackets ( util:: respace ( & v. doc ) . as_ref ( ) ) ;
621613 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+ }
627619 } ) ;
628620 }
629621 }
@@ -650,7 +642,7 @@ pub fn fields(
650642 ///Writes raw bits to the field
651643 #inline
652644 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) ;
654646 self . w
655647 }
656648 }
@@ -660,7 +652,7 @@ pub fn fields(
660652 ///Writes raw bits to the field
661653 #inline
662654 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) ;
664656 self . w
665657 }
666658 }
@@ -669,7 +661,7 @@ pub fn fields(
669661 ///Writes raw bits to the field
670662 #inline
671663 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) ;
673665 self . w
674666 }
675667 }
0 commit comments