@@ -151,7 +151,7 @@ pub fn render(
151
151
152
152
if !cur_fields. is_empty ( ) {
153
153
fields (
154
- & cur_fields,
154
+ cur_fields,
155
155
register,
156
156
& name_constant_case_spec,
157
157
all_registers,
@@ -317,7 +317,7 @@ pub fn render(
317
317
318
318
#[ allow( clippy:: too_many_arguments) ]
319
319
pub fn fields (
320
- fields : & [ & Field ] ,
320
+ mut fields : Vec < & Field > ,
321
321
register : & Register ,
322
322
name_constant_case_spec : & Ident ,
323
323
all_registers : & [ & Register ] ,
@@ -335,6 +335,8 @@ pub fn fields(
335
335
let can_read = access. can_read ( ) ;
336
336
let can_write = access. can_write ( ) ;
337
337
338
+ fields. sort_by_key ( |f| f. bit_offset ( ) ) ;
339
+
338
340
// TODO enumeratedValues
339
341
let inline = quote ! { #[ inline( always) ] } ;
340
342
for f in fields. iter ( ) {
@@ -366,7 +368,7 @@ pub fn fields(
366
368
367
369
let lookup_results = lookup (
368
370
evs,
369
- fields,
371
+ & fields,
370
372
register,
371
373
all_registers,
372
374
peripheral,
@@ -1044,13 +1046,23 @@ fn derive_from_base(
1044
1046
} ) ;
1045
1047
}
1046
1048
1047
- #[ derive( Clone , Debug ) ]
1049
+ #[ derive( Clone , Copy , Debug , Hash , PartialEq , Eq ) ]
1048
1050
pub struct Base < ' a > {
1049
1051
pub peripheral : Option < & ' a str > ,
1050
1052
pub register : Option < & ' a str > ,
1051
1053
pub field : & ' a str ,
1052
1054
}
1053
1055
1056
+ impl < ' a > Base < ' a > {
1057
+ pub fn from_field ( field : & ' a str ) -> Self {
1058
+ Self {
1059
+ peripheral : None ,
1060
+ register : None ,
1061
+ field,
1062
+ }
1063
+ }
1064
+ }
1065
+
1054
1066
fn lookup < ' a > (
1055
1067
evs : & ' a [ EnumeratedValues ] ,
1056
1068
fields : & ' a [ & ' a Field ] ,
@@ -1208,14 +1220,7 @@ fn lookup_in_register<'r>(
1208
1220
base_evs,
1209
1221
register. name
1210
1222
) ) ,
1211
- [ ( evs, field) ] => Ok ( (
1212
- evs,
1213
- Some ( Base {
1214
- field,
1215
- register : None ,
1216
- peripheral : None ,
1217
- } ) ,
1218
- ) ) ,
1223
+ [ ( evs, field) ] => Ok ( ( evs, Some ( Base :: from_field ( field) ) ) ) ,
1219
1224
matches => {
1220
1225
let fields = matches. iter ( ) . map ( |( f, _) | & f. name ) . collect :: < Vec < _ > > ( ) ;
1221
1226
Err ( anyhow ! (
0 commit comments