Skip to content

Commit ccf6dd1

Browse files
author
Jorge Aparicio
committed
make _FieldW.bits available when enumeratedValues is not available
1 parent 0c05b37 commit ccf6dd1

File tree

1 file changed

+32
-30
lines changed

1 file changed

+32
-30
lines changed

src/lib.rs

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -860,6 +860,7 @@ pub fn gen_register(r: &Register,
860860

861861
let mut proxy_items = vec![];
862862

863+
let mut bits_is_safe = false;
863864
if let Some((evs, base)) =
864865
lookup(&field.enumerated_values,
865866
fields,
@@ -916,36 +917,7 @@ pub fn gen_register(r: &Register,
916917
// `bits` can be safe when enumeratedValues covers all the
917918
// possible values of the bitfield or, IOW, when there are
918919
// no reserved bit patterns.
919-
let bits_is_safe = variants.len() == 1 << width;
920-
921-
if bits_is_safe {
922-
proxy_items.push(quote! {
923-
pub fn bits(self, bits: #field_ty) -> &'a mut W {
924-
const MASK: #field_ty = #mask;
925-
const OFFSET: u8 = #offset;
926-
927-
self.register.bits &=
928-
!((MASK as #reg_ty) << OFFSET);
929-
self.register.bits |=
930-
((bits & MASK) as #reg_ty) << OFFSET;
931-
self.register
932-
}
933-
});
934-
} else {
935-
proxy_items.push(quote! {
936-
pub unsafe fn bits(self,
937-
bits: #field_ty) -> &'a mut W {
938-
const MASK: #field_ty = #mask;
939-
const OFFSET: u8 = #offset;
940-
941-
self.register.bits &=
942-
!((MASK as #reg_ty) << OFFSET);
943-
self.register.bits |=
944-
((bits & MASK) as #reg_ty) << OFFSET;
945-
self.register
946-
}
947-
});
948-
}
920+
bits_is_safe = variants.len() == 1 << width;
949921

950922
if base.is_none() {
951923
let variants_pc = variants.iter().map(|v| &v.pc);
@@ -1007,6 +979,36 @@ pub fn gen_register(r: &Register,
1007979
}
1008980
}
1009981

982+
if bits_is_safe {
983+
proxy_items.push(quote! {
984+
pub fn bits(self, bits: #field_ty) -> &'a mut W {
985+
const MASK: #field_ty = #mask;
986+
const OFFSET: u8 = #offset;
987+
988+
self.register.bits &=
989+
!((MASK as #reg_ty) << OFFSET);
990+
self.register.bits |=
991+
((bits & MASK) as #reg_ty) << OFFSET;
992+
self.register
993+
}
994+
});
995+
} else {
996+
proxy_items.push(quote! {
997+
pub unsafe fn bits(self,
998+
bits: #field_ty) -> &'a mut W {
999+
const MASK: #field_ty = #mask;
1000+
const OFFSET: u8 = #offset;
1001+
1002+
self.register.bits &=
1003+
!((MASK as #reg_ty) << OFFSET);
1004+
self.register.bits |=
1005+
((bits & MASK) as #reg_ty) << OFFSET;
1006+
self.register
1007+
}
1008+
});
1009+
}
1010+
1011+
10101012
mod_items.push(quote! {
10111013
impl<'a> #proxy<'a> {
10121014
#(#proxy_items)*

0 commit comments

Comments
 (0)