@@ -124,9 +124,8 @@ pub fn render(
124
124
if let Some ( cur_fields) = register. fields . as_ref ( ) {
125
125
// filter out all reserved fields, as we should not generate code for
126
126
// them
127
- let cur_fields: Vec < Field > = cur_fields
128
- . clone ( )
129
- . into_iter ( )
127
+ let cur_fields: Vec < & Field > = cur_fields
128
+ . iter ( )
130
129
. filter ( |field| field. name . to_lowercase ( ) != "reserved" )
131
130
. collect ( ) ;
132
131
@@ -285,8 +284,8 @@ pub fn render(
285
284
286
285
#[ allow( clippy:: too_many_arguments) ]
287
286
pub fn fields (
288
- fields : & [ Field ] ,
289
- parent : & Register ,
287
+ fields : & [ & Field ] ,
288
+ register : & Register ,
290
289
all_registers : & [ & Register ] ,
291
290
peripheral : & Peripheral ,
292
291
all_peripherals : & [ Peripheral ] ,
@@ -335,7 +334,7 @@ pub fn fields(
335
334
let lookup_results = lookup (
336
335
evs,
337
336
fields,
338
- parent ,
337
+ register ,
339
338
all_registers,
340
339
peripheral,
341
340
all_peripherals,
@@ -1083,7 +1082,7 @@ pub struct Base<'a> {
1083
1082
1084
1083
fn lookup < ' a > (
1085
1084
evs : & ' a [ EnumeratedValues ] ,
1086
- fields : & ' a [ Field ] ,
1085
+ fields : & ' a [ & ' a Field ] ,
1087
1086
register : & ' a Register ,
1088
1087
all_registers : & ' a [ & ' a Register ] ,
1089
1088
peripheral : & ' a Peripheral ,
@@ -1149,7 +1148,7 @@ fn lookup_filter<'a>(
1149
1148
fn lookup_in_fields < ' f > (
1150
1149
base_evs : & str ,
1151
1150
base_field : & str ,
1152
- fields : & ' f [ Field ] ,
1151
+ fields : & ' f [ & ' f Field ] ,
1153
1152
register : & Register ,
1154
1153
) -> Result < ( & ' f EnumeratedValues , Option < Base < ' f > > ) > {
1155
1154
if let Some ( base_field) = fields. iter ( ) . find ( |f| f. name == base_field) {
@@ -1172,13 +1171,7 @@ fn lookup_in_peripheral<'p>(
1172
1171
peripheral : & ' p Peripheral ,
1173
1172
) -> Result < ( & ' p EnumeratedValues , Option < Base < ' p > > ) > {
1174
1173
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) {
1182
1175
lookup_in_field ( base_evs, Some ( base_register) , base_peripheral, field)
1183
1176
} else {
1184
1177
Err ( anyhow ! (
@@ -1228,7 +1221,7 @@ fn lookup_in_register<'r>(
1228
1221
) -> Result < ( & ' r EnumeratedValues , Option < Base < ' r > > ) > {
1229
1222
let mut matches = vec ! [ ] ;
1230
1223
1231
- for f in register. fields . as_deref ( ) . unwrap_or ( & [ ] ) {
1224
+ for f in register. fields ( ) {
1232
1225
if let Some ( evs) = f
1233
1226
. enumerated_values
1234
1227
. iter ( )
@@ -1238,31 +1231,27 @@ fn lookup_in_register<'r>(
1238
1231
}
1239
1232
}
1240
1233
1241
- match matches. first ( ) {
1242
- None => Err ( anyhow ! (
1234
+ match & matches[ .. ] {
1235
+ [ ] => Err ( anyhow ! (
1243
1236
"EnumeratedValues {} not found in register {}" ,
1244
1237
base_evs,
1245
1238
register. name
1246
1239
) ) ,
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
+ ) )
1266
1255
}
1267
1256
}
1268
1257
}
0 commit comments