Skip to content

Commit 8afe057

Browse files
committed
enum repr(fty)
1 parent b0503bc commit 8afe057

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

src/generate/register.rs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -636,14 +636,23 @@ impl Variant {
636636
fn add_from_variants(mod_items: &mut Vec<TokenStream>, variants: &Vec<Variant>, pc: &Ident, f: &F, desc: &str, reset_value: Option<u64>) {
637637
let fty = &f.ty;
638638

639+
let mut repr = quote! { #[repr(#fty)] };
640+
let mut cast = quote! { variant as _ };
641+
642+
if f.ty == "bool" {
643+
repr = quote! { };
644+
cast = quote! { variant as u8 != 0 };
645+
}
646+
639647
let vars = variants
640648
.iter()
641649
.map(|v| {
642650
let desc = util::escape_brackets(&format!("{}: {}", v.value, v.doc));
643651
let pcv = &v.pc;
652+
let pcval = &util::unsuffixed(v.value);
644653
quote! {
645654
#[doc = #desc]
646-
#pcv
655+
#pcv = #pcval
647656
}
648657
})
649658
.collect::<Vec<_>>();
@@ -657,27 +666,14 @@ fn add_from_variants(mod_items: &mut Vec<TokenStream>, variants: &Vec<Variant>,
657666
mod_items.push(quote! {
658667
#[doc = #desc]
659668
#[derive(Clone, Copy, Debug, PartialEq)]
669+
#repr
660670
pub enum #pc {
661671
#(#vars),*
662672
}
663-
});
664-
665-
let arms = variants.iter().map(|v| {
666-
let pcv = &v.pc;
667-
let value = util::unsuffixed_or_bool(v.value, f.width);
668-
669-
quote! {
670-
#pc::#pcv => #value
671-
}
672-
});
673-
674-
mod_items.push(quote! {
675673
impl From<#pc> for #fty {
676674
#[inline(always)]
677675
fn from(variant: #pc) -> Self {
678-
match variant {
679-
#(#arms),*
680-
}
676+
#cast
681677
}
682678
}
683679
});

0 commit comments

Comments
 (0)