@@ -124,9 +124,8 @@ pub fn render(
124124 if let Some ( cur_fields) = register. fields . as_ref ( ) {
125125 // filter out all reserved fields, as we should not generate code for
126126 // them
127- let cur_fields: Vec < Field > = cur_fields
128- . clone ( )
129- . into_iter ( )
127+ let cur_fields: Vec < & Field > = cur_fields
128+ . iter ( )
130129 . filter ( |field| field. name . to_lowercase ( ) != "reserved" )
131130 . collect ( ) ;
132131
@@ -285,8 +284,8 @@ pub fn render(
285284
286285#[ allow( clippy:: too_many_arguments) ]
287286pub fn fields (
288- fields : & [ Field ] ,
289- parent : & Register ,
287+ fields : & [ & Field ] ,
288+ register : & Register ,
290289 all_registers : & [ & Register ] ,
291290 peripheral : & Peripheral ,
292291 all_peripherals : & [ Peripheral ] ,
@@ -335,7 +334,7 @@ pub fn fields(
335334 let lookup_results = lookup (
336335 evs,
337336 fields,
338- parent ,
337+ register ,
339338 all_registers,
340339 peripheral,
341340 all_peripherals,
@@ -1083,7 +1082,7 @@ pub struct Base<'a> {
10831082
10841083fn lookup < ' a > (
10851084 evs : & ' a [ EnumeratedValues ] ,
1086- fields : & ' a [ Field ] ,
1085+ fields : & ' a [ & ' a Field ] ,
10871086 register : & ' a Register ,
10881087 all_registers : & ' a [ & ' a Register ] ,
10891088 peripheral : & ' a Peripheral ,
@@ -1149,7 +1148,7 @@ fn lookup_filter<'a>(
11491148fn lookup_in_fields < ' f > (
11501149 base_evs : & str ,
11511150 base_field : & str ,
1152- fields : & ' f [ Field ] ,
1151+ fields : & ' f [ & ' f Field ] ,
11531152 register : & Register ,
11541153) -> Result < ( & ' f EnumeratedValues , Option < Base < ' f > > ) > {
11551154 if let Some ( base_field) = fields. iter ( ) . find ( |f| f. name == base_field) {
@@ -1172,13 +1171,7 @@ fn lookup_in_peripheral<'p>(
11721171 peripheral : & ' p Peripheral ,
11731172) -> Result < ( & ' p EnumeratedValues , Option < Base < ' p > > ) > {
11741173 if let Some ( register) = all_registers. iter ( ) . find ( |r| r. name == base_register) {
1175- if let Some ( field) = register
1176- . fields
1177- . as_deref ( )
1178- . unwrap_or ( & [ ] )
1179- . iter ( )
1180- . find ( |f| f. name == base_field)
1181- {
1174+ if let Some ( field) = register. get_field ( base_field) {
11821175 lookup_in_field ( base_evs, Some ( base_register) , base_peripheral, field)
11831176 } else {
11841177 Err ( anyhow ! (
@@ -1228,7 +1221,7 @@ fn lookup_in_register<'r>(
12281221) -> Result < ( & ' r EnumeratedValues , Option < Base < ' r > > ) > {
12291222 let mut matches = vec ! [ ] ;
12301223
1231- for f in register. fields . as_deref ( ) . unwrap_or ( & [ ] ) {
1224+ for f in register. fields ( ) {
12321225 if let Some ( evs) = f
12331226 . enumerated_values
12341227 . iter ( )
@@ -1238,31 +1231,27 @@ fn lookup_in_register<'r>(
12381231 }
12391232 }
12401233
1241- match matches. first ( ) {
1242- None => Err ( anyhow ! (
1234+ match & matches[ .. ] {
1235+ [ ] => Err ( anyhow ! (
12431236 "EnumeratedValues {} not found in register {}" ,
12441237 base_evs,
12451238 register. name
12461239 ) ) ,
1247- Some ( & ( evs, field) ) => {
1248- if matches. len ( ) == 1 {
1249- Ok ( (
1250- evs,
1251- Some ( Base {
1252- field,
1253- register : None ,
1254- peripheral : None ,
1255- } ) ,
1256- ) )
1257- } else {
1258- let fields = matches. iter ( ) . map ( |( f, _) | & f. name ) . collect :: < Vec < _ > > ( ) ;
1259- Err ( anyhow ! (
1260- "Fields {:?} have an \
1261- enumeratedValues named {}",
1262- fields,
1263- base_evs
1264- ) )
1265- }
1240+ [ ( evs, field) ] => Ok ( (
1241+ evs,
1242+ Some ( Base {
1243+ field,
1244+ register : None ,
1245+ peripheral : None ,
1246+ } ) ,
1247+ ) ) ,
1248+ matches => {
1249+ let fields = matches. iter ( ) . map ( |( f, _) | & f. name ) . collect :: < Vec < _ > > ( ) ;
1250+ Err ( anyhow ! (
1251+ "Fields {:?} have an enumeratedValues named {}" ,
1252+ fields,
1253+ base_evs
1254+ ) )
12661255 }
12671256 }
12681257}
0 commit comments