@@ -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> {
14881487fn 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 \n Value 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