1
1
use cast:: u64;
2
2
use 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 } ;
5
5
use syn:: Ident ;
6
6
7
7
use errors:: * ;
8
8
use util:: { self , ToSanitizedSnakeCase , ToSanitizedUpperCase , U32Ext } ;
9
9
10
-
11
10
pub fn render (
12
11
register : & Register ,
13
12
all_registers : & [ Register ] ,
@@ -714,7 +713,6 @@ pub fn fields(
714
713
} ) ;
715
714
}
716
715
717
-
718
716
proxy_items. push ( quote ! {
719
717
/// Writes `variant` to the field
720
718
#[ inline]
@@ -840,37 +838,42 @@ fn lookup<'a>(
840
838
usage : Usage ,
841
839
) -> Result < Option < ( & ' a EnumeratedValues , Option < Base < ' a > > ) > > {
842
840
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 (
849
852
base_peripheral,
850
853
base_register,
851
854
base_field,
852
855
base_evs,
853
856
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 ! ( ) ,
868
873
}
869
- ( Some ( base_evs ) , None , None , None ) => lookup_in_register ( base_evs , register ) ,
870
- _ => unreachable ! ( ) ,
874
+ } else {
875
+ Ok ( ( evs , None ) )
871
876
}
872
- } else {
873
- Ok ( ( evs, None ) )
874
877
} )
875
878
. collect :: < Result < Vec < _ > > > ( ) ?;
876
879
@@ -894,8 +897,7 @@ fn lookup_in_fields<'f>(
894
897
} else {
895
898
Err ( format ! (
896
899
"Field {} not found in register {}" ,
897
- base_field,
898
- register. name
900
+ base_field, register. name
899
901
) ) ?
900
902
}
901
903
}
@@ -921,15 +923,13 @@ fn lookup_in_peripheral<'p>(
921
923
} else {
922
924
Err ( format ! (
923
925
"No field {} in register {}" ,
924
- base_field,
925
- register. name
926
+ base_field, register. name
926
927
) ) ?
927
928
}
928
929
} else {
929
930
Err ( format ! (
930
931
"No register {} in peripheral {}" ,
931
- base_register,
932
- peripheral. name
932
+ base_register, peripheral. name
933
933
) ) ?
934
934
}
935
935
}
@@ -942,23 +942,20 @@ fn lookup_in_field<'f>(
942
942
) -> Result < ( & ' f EnumeratedValues , Option < Base < ' f > > ) > {
943
943
for evs in & field. enumerated_values {
944
944
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
+ ) ) ;
955
953
}
956
954
}
957
955
958
956
Err ( format ! (
959
957
"No EnumeratedValues {} in field {}" ,
960
- base_evs,
961
- field. name
958
+ base_evs, field. name
962
959
) ) ?
963
960
}
964
961
@@ -980,8 +977,7 @@ fn lookup_in_register<'r>(
980
977
match matches. first ( ) {
981
978
None => Err ( format ! (
982
979
"EnumeratedValues {} not found in register {}" ,
983
- base_evs,
984
- register. name
980
+ base_evs, register. name
985
981
) ) ?,
986
982
Some ( & ( evs, field) ) => if matches. len ( ) == 1 {
987
983
return Ok ( (
@@ -1000,8 +996,7 @@ fn lookup_in_register<'r>(
1000
996
Err ( format ! (
1001
997
"Fields {:?} have an \
1002
998
enumeratedValues named {}",
1003
- fields,
1004
- base_evs
999
+ fields, base_evs
1005
1000
) ) ?
1006
1001
} ,
1007
1002
}
0 commit comments