11use cast:: u64;
22use quote:: Tokens ;
3- use svd:: { Access , BitRange , Defaults , EnumeratedValues , Field , Peripheral , Register ,
4- Usage , WriteConstraint } ;
3+ use svd:: { Access , BitRange , Defaults , EnumeratedValues , Field , Peripheral , Register , Usage ,
4+ WriteConstraint } ;
55use syn:: Ident ;
66
77use errors:: * ;
88use util:: { self , ToSanitizedSnakeCase , ToSanitizedUpperCase , U32Ext } ;
99
10-
1110pub fn render (
1211 register : & Register ,
1312 all_registers : & [ Register ] ,
@@ -714,7 +713,6 @@ pub fn fields(
714713 } ) ;
715714 }
716715
717-
718716 proxy_items. push ( quote ! {
719717 /// Writes `variant` to the field
720718 #[ inline]
@@ -840,37 +838,42 @@ fn lookup<'a>(
840838 usage : Usage ,
841839) -> Result < Option < ( & ' a EnumeratedValues , Option < Base < ' a > > ) > > {
842840 let evs = evs. iter ( )
843- . map ( |evs| if let Some ( ref base) = evs. derived_from {
844- let mut parts = base. split ( '.' ) ;
845-
846- match ( parts. next ( ) , parts. next ( ) , parts. next ( ) , parts. next ( ) ) {
847- ( Some ( base_peripheral) , Some ( base_register) , Some ( base_field) , Some ( base_evs) ) => {
848- lookup_in_peripherals (
841+ . map ( |evs| {
842+ if let Some ( ref base) = evs. derived_from {
843+ let mut parts = base. split ( '.' ) ;
844+
845+ match ( parts. next ( ) , parts. next ( ) , parts. next ( ) , parts. next ( ) ) {
846+ (
847+ Some ( base_peripheral) ,
848+ Some ( base_register) ,
849+ Some ( base_field) ,
850+ Some ( base_evs) ,
851+ ) => lookup_in_peripherals (
849852 base_peripheral,
850853 base_register,
851854 base_field,
852855 base_evs,
853856 all_peripherals,
854- )
855- }
856- ( Some ( base_register) , Some ( base_field) , Some ( base_evs) , None ) => {
857- lookup_in_peripheral (
858- None ,
859- base_register,
860- base_field,
861- base_evs,
862- all_registers,
863- peripheral,
864- )
865- }
866- ( Some ( base_field) , Some ( base_evs) , None , None ) => {
867- lookup_in_fields ( base_evs, base_field, fields, register)
857+ ) ,
858+ ( Some ( base_register) , Some ( base_field) , Some ( base_evs) , None ) => {
859+ lookup_in_peripheral (
860+ None ,
861+ base_register,
862+ base_field,
863+ base_evs,
864+ all_registers,
865+ peripheral,
866+ )
867+ }
868+ ( Some ( base_field) , Some ( base_evs) , None , None ) => {
869+ lookup_in_fields ( base_evs, base_field, fields, register)
870+ }
871+ ( Some ( base_evs) , None , None , None ) => lookup_in_register ( base_evs, register) ,
872+ _ => unreachable ! ( ) ,
868873 }
869- ( Some ( base_evs ) , None , None , None ) => lookup_in_register ( base_evs , register ) ,
870- _ => unreachable ! ( ) ,
874+ } else {
875+ Ok ( ( evs , None ) )
871876 }
872- } else {
873- Ok ( ( evs, None ) )
874877 } )
875878 . collect :: < Result < Vec < _ > > > ( ) ?;
876879
@@ -894,8 +897,7 @@ fn lookup_in_fields<'f>(
894897 } else {
895898 Err ( format ! (
896899 "Field {} not found in register {}" ,
897- base_field,
898- register. name
900+ base_field, register. name
899901 ) ) ?
900902 }
901903}
@@ -921,15 +923,13 @@ fn lookup_in_peripheral<'p>(
921923 } else {
922924 Err ( format ! (
923925 "No field {} in register {}" ,
924- base_field,
925- register. name
926+ base_field, register. name
926927 ) ) ?
927928 }
928929 } else {
929930 Err ( format ! (
930931 "No register {} in peripheral {}" ,
931- base_register,
932- peripheral. name
932+ base_register, peripheral. name
933933 ) ) ?
934934 }
935935}
@@ -942,23 +942,20 @@ fn lookup_in_field<'f>(
942942) -> Result < ( & ' f EnumeratedValues , Option < Base < ' f > > ) > {
943943 for evs in & field. enumerated_values {
944944 if evs. name . as_ref ( ) . map ( |s| & * * s) == Some ( base_evs) {
945- return Ok (
946- (
947- evs,
948- Some ( Base {
949- field : & field. name ,
950- register : base_register,
951- peripheral : base_peripheral,
952- } ) ,
953- ) ,
954- ) ;
945+ return Ok ( (
946+ evs,
947+ Some ( Base {
948+ field : & field. name ,
949+ register : base_register,
950+ peripheral : base_peripheral,
951+ } ) ,
952+ ) ) ;
955953 }
956954 }
957955
958956 Err ( format ! (
959957 "No EnumeratedValues {} in field {}" ,
960- base_evs,
961- field. name
958+ base_evs, field. name
962959 ) ) ?
963960}
964961
@@ -980,8 +977,7 @@ fn lookup_in_register<'r>(
980977 match matches. first ( ) {
981978 None => Err ( format ! (
982979 "EnumeratedValues {} not found in register {}" ,
983- base_evs,
984- register. name
980+ base_evs, register. name
985981 ) ) ?,
986982 Some ( & ( evs, field) ) => if matches. len ( ) == 1 {
987983 return Ok ( (
@@ -1000,8 +996,7 @@ fn lookup_in_register<'r>(
1000996 Err ( format ! (
1001997 "Fields {:?} have an \
1002998 enumeratedValues named {}",
1003- fields,
1004- base_evs
999+ fields, base_evs
10051000 ) ) ?
10061001 } ,
10071002 }
0 commit comments