@@ -151,7 +151,7 @@ pub fn render(
151151
152152 if !cur_fields. is_empty ( ) {
153153 fields (
154- & cur_fields,
154+ cur_fields,
155155 register,
156156 & name_constant_case_spec,
157157 all_registers,
@@ -317,7 +317,7 @@ pub fn render(
317317
318318#[ allow( clippy:: too_many_arguments) ]
319319pub fn fields (
320- fields : & [ & Field ] ,
320+ mut fields : Vec < & Field > ,
321321 register : & Register ,
322322 name_constant_case_spec : & Ident ,
323323 all_registers : & [ & Register ] ,
@@ -335,6 +335,8 @@ pub fn fields(
335335 let can_read = access. can_read ( ) ;
336336 let can_write = access. can_write ( ) ;
337337
338+ fields. sort_by_key ( |f| f. bit_offset ( ) ) ;
339+
338340 // TODO enumeratedValues
339341 let inline = quote ! { #[ inline( always) ] } ;
340342 for f in fields. iter ( ) {
@@ -366,7 +368,7 @@ pub fn fields(
366368
367369 let lookup_results = lookup (
368370 evs,
369- fields,
371+ & fields,
370372 register,
371373 all_registers,
372374 peripheral,
@@ -1044,13 +1046,23 @@ fn derive_from_base(
10441046 } ) ;
10451047}
10461048
1047- #[ derive( Clone , Debug ) ]
1049+ #[ derive( Clone , Copy , Debug , Hash , PartialEq , Eq ) ]
10481050pub struct Base < ' a > {
10491051 pub peripheral : Option < & ' a str > ,
10501052 pub register : Option < & ' a str > ,
10511053 pub field : & ' a str ,
10521054}
10531055
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+
10541066fn lookup < ' a > (
10551067 evs : & ' a [ EnumeratedValues ] ,
10561068 fields : & ' a [ & ' a Field ] ,
@@ -1208,14 +1220,7 @@ fn lookup_in_register<'r>(
12081220 base_evs,
12091221 register. name
12101222 ) ) ,
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) ) ) ) ,
12191224 matches => {
12201225 let fields = matches. iter ( ) . map ( |( f, _) | & f. name ) . collect :: < Vec < _ > > ( ) ;
12211226 Err ( anyhow ! (
0 commit comments