Skip to content

Commit e17488c

Browse files
committed
simplify
1 parent 7952349 commit e17488c

File tree

1 file changed

+7
-67
lines changed

1 file changed

+7
-67
lines changed

src/generate/register.rs

Lines changed: 7 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -762,10 +762,9 @@ pub fn fields(
762762

763763
// generate enum VALUE_READ_TY_A { ... each variants ... } and and From<fty> for VALUE_READ_TY_A.
764764
if let Some(def) = def.as_ref() {
765-
add_from_variants_with_default(
765+
add_from_variants(
766766
mod_items,
767-
&variants,
768-
def,
767+
variants.iter().chain(std::iter::once(def)),
769768
&value_read_ty,
770769
&fty,
771770
&description,
@@ -775,7 +774,7 @@ pub fn fields(
775774
} else {
776775
add_from_variants(
777776
mod_items,
778-
&variants,
777+
variants.iter(),
779778
&value_read_ty,
780779
&fty,
781780
&description,
@@ -1051,7 +1050,7 @@ pub fn fields(
10511050
} else {
10521051
add_from_variants(
10531052
mod_items,
1054-
&variants,
1053+
variants.iter(),
10551054
&value_write_ty,
10561055
&fty,
10571056
&description,
@@ -1357,9 +1356,9 @@ fn add_with_no_variants(
13571356
}
13581357
}
13591358

1360-
fn add_from_variants(
1359+
fn add_from_variants<'a>(
13611360
mod_items: &mut TokenStream,
1362-
variants: &[Variant],
1361+
variants: impl Iterator<Item = &'a Variant>,
13631362
pc: &Ident,
13641363
fty: &Ident,
13651364
desc: &str,
@@ -1372,7 +1371,7 @@ fn add_from_variants(
13721371
};
13731372

13741373
let mut vars = TokenStream::new();
1375-
for v in variants.iter().map(|v| {
1374+
for v in variants.map(|v| {
13761375
let desc = util::escape_special_chars(&util::respace(&format!("{}: {}", v.value, v.doc)));
13771376
let pcv = &v.pc;
13781377
let pcval = &unsuffixed(v.value);
@@ -1488,62 +1487,3 @@ fn enums_to_map(evs: &EnumeratedValues) -> BTreeMap<u64, &EnumeratedValue> {
14881487
fn minimal_hole(map: &BTreeMap<u64, &EnumeratedValue>, width: u32) -> Option<u64> {
14891488
(0..(1u64 << width)).find(|&v| !map.contains_key(&v))
14901489
}
1491-
1492-
fn add_from_variants_with_default(
1493-
mod_items: &mut TokenStream,
1494-
variants: &[Variant],
1495-
default: &Variant,
1496-
pc: &Ident,
1497-
fty: &Ident,
1498-
desc: &str,
1499-
reset_value: Option<u64>,
1500-
) {
1501-
let mut vars = TokenStream::new();
1502-
let mut arms = TokenStream::new();
1503-
for (v, c) in variants.iter().chain(std::iter::once(default)).map(|v| {
1504-
let desc = util::escape_special_chars(&util::respace(&format!("{}: {}", v.value, v.doc)));
1505-
let pcv = &v.pc;
1506-
let pcval = &util::unsuffixed(v.value);
1507-
(
1508-
quote! {
1509-
#[doc = #desc]
1510-
#pcv = #pcval,
1511-
},
1512-
quote! {
1513-
#pc::#pcv => #pcval,
1514-
},
1515-
)
1516-
}) {
1517-
vars.extend(v);
1518-
arms.extend(c);
1519-
}
1520-
1521-
let desc = if let Some(rv) = reset_value {
1522-
format!("{desc}\n\nValue on reset: {rv}")
1523-
} else {
1524-
desc.to_string()
1525-
};
1526-
1527-
mod_items.extend(quote! {
1528-
#[doc = #desc]
1529-
#[derive(Clone, Copy, Debug, PartialEq)]
1530-
pub enum #pc {
1531-
#vars
1532-
}
1533-
impl From<#pc> for #fty {
1534-
#[inline(always)]
1535-
fn from(variant: #pc) -> Self {
1536-
match variant {
1537-
#arms
1538-
}
1539-
}
1540-
}
1541-
});
1542-
if fty != "bool" {
1543-
mod_items.extend(quote! {
1544-
impl crate::FieldSpec for #pc {
1545-
type Ux = #fty;
1546-
}
1547-
});
1548-
}
1549-
}

0 commit comments

Comments
 (0)