@@ -439,7 +439,7 @@ fn register_or_cluster_block(
439
439
let mut accessors = TokenStream :: new ( ) ;
440
440
441
441
let ercs_expanded =
442
- expand ( ercs, name , config) . with_context ( || "Could not expand register or cluster block" ) ?;
442
+ expand ( ercs, config) . with_context ( || "Could not expand register or cluster block" ) ?;
443
443
444
444
// Locate conflicting regions; we'll need to use unions to represent them.
445
445
let mut regions = FieldRegions :: default ( ) ;
@@ -564,17 +564,13 @@ fn register_or_cluster_block(
564
564
565
565
/// Expand a list of parsed `Register`s or `Cluster`s, and render them to
566
566
/// `RegisterBlockField`s containing `Field`s.
567
- fn expand (
568
- ercs : & [ RegisterCluster ] ,
569
- name : Option < & str > ,
570
- config : & Config ,
571
- ) -> Result < Vec < RegisterBlockField > > {
567
+ fn expand ( ercs : & [ RegisterCluster ] , config : & Config ) -> Result < Vec < RegisterBlockField > > {
572
568
let mut ercs_expanded = vec ! [ ] ;
573
569
574
570
debug ! ( "Expanding registers or clusters into Register Block Fields" ) ;
575
571
for erc in ercs {
576
572
match & erc {
577
- RegisterCluster :: Register ( register) => match expand_register ( register, name , config) {
573
+ RegisterCluster :: Register ( register) => match expand_register ( register, config) {
578
574
Ok ( expanded_reg) => {
579
575
trace ! ( "Register: {}" , register. name) ;
580
576
ercs_expanded. extend ( expanded_reg) ;
@@ -584,7 +580,7 @@ fn expand(
584
580
return handle_reg_error ( "Error expanding register" , register, res) ;
585
581
}
586
582
} ,
587
- RegisterCluster :: Cluster ( cluster) => match expand_cluster ( cluster, name , config) {
583
+ RegisterCluster :: Cluster ( cluster) => match expand_cluster ( cluster, config) {
588
584
Ok ( expanded_cluster) => {
589
585
trace ! ( "Cluster: {}" , cluster. name) ;
590
586
ercs_expanded. extend ( expanded_cluster) ;
@@ -631,7 +627,7 @@ fn cluster_info_size_in_bits(info: &ClusterInfo, config: &Config) -> Result<u32>
631
627
for c in & info. children {
632
628
let end = match c {
633
629
RegisterCluster :: Register ( reg) => {
634
- let reg_size: u32 = expand_register ( reg, None , config) ?
630
+ let reg_size: u32 = expand_register ( reg, config) ?
635
631
. iter ( )
636
632
. map ( |rbf| rbf. size )
637
633
. sum ( ) ;
@@ -649,19 +645,15 @@ fn cluster_info_size_in_bits(info: &ClusterInfo, config: &Config) -> Result<u32>
649
645
}
650
646
651
647
/// Render a given cluster (and any children) into `RegisterBlockField`s
652
- fn expand_cluster (
653
- cluster : & Cluster ,
654
- name : Option < & str > ,
655
- config : & Config ,
656
- ) -> Result < Vec < RegisterBlockField > > {
648
+ fn expand_cluster ( cluster : & Cluster , config : & Config ) -> Result < Vec < RegisterBlockField > > {
657
649
let mut cluster_expanded = vec ! [ ] ;
658
650
659
651
let cluster_size = cluster_info_size_in_bits ( cluster, config)
660
652
. with_context ( || format ! ( "Cluster {} has no determinable `size` field" , cluster. name) ) ?;
661
653
662
654
match cluster {
663
655
Cluster :: Single ( info) => cluster_expanded. push ( RegisterBlockField {
664
- syn_field : convert_svd_cluster ( cluster, name ) ?,
656
+ syn_field : convert_svd_cluster ( cluster) ?,
665
657
description : info. description . as_ref ( ) . unwrap_or ( & info. name ) . into ( ) ,
666
658
offset : info. address_offset ,
667
659
size : cluster_size,
@@ -690,7 +682,7 @@ fn expand_cluster(
690
682
if array_convertible {
691
683
if sequential_indexes_from0 {
692
684
cluster_expanded. push ( RegisterBlockField {
693
- syn_field : convert_svd_cluster ( cluster, name ) ?,
685
+ syn_field : convert_svd_cluster ( cluster) ?,
694
686
description : info. description . as_ref ( ) . unwrap_or ( & info. name ) . into ( ) ,
695
687
offset : info. address_offset ,
696
688
size : cluster_size * array_info. dim ,
@@ -700,7 +692,7 @@ fn expand_cluster(
700
692
let span = Span :: call_site ( ) ;
701
693
let mut accessors = TokenStream :: new ( ) ;
702
694
let nb_name = util:: replace_suffix ( & info. name , "" ) ;
703
- let ty = name_to_ty ( & nb_name, name ) ?;
695
+ let ty = name_to_ty ( & nb_name) ?;
704
696
let nb_name_cs = nb_name. to_snake_case_ident ( span) ;
705
697
let description = info. description . as_ref ( ) . unwrap_or ( & info. name ) ;
706
698
for ( i, idx) in array_info. indexes ( ) . enumerate ( ) {
@@ -721,7 +713,7 @@ fn expand_cluster(
721
713
} ) ;
722
714
}
723
715
cluster_expanded. push ( RegisterBlockField {
724
- syn_field : convert_svd_cluster ( cluster, name ) ?,
716
+ syn_field : convert_svd_cluster ( cluster) ?,
725
717
description : description. into ( ) ,
726
718
offset : info. address_offset ,
727
719
size : cluster_size * array_info. dim ,
@@ -731,11 +723,9 @@ fn expand_cluster(
731
723
} else if sequential_indexes_from0 && config. const_generic {
732
724
// Include a ZST ArrayProxy giving indexed access to the
733
725
// elements.
734
- cluster_expanded. push ( array_proxy ( info, array_info, name ) ?) ;
726
+ cluster_expanded. push ( array_proxy ( info, array_info) ?) ;
735
727
} else {
736
- for ( field_num, syn_field) in
737
- expand_svd_cluster ( cluster, name) ?. into_iter ( ) . enumerate ( )
738
- {
728
+ for ( field_num, syn_field) in expand_svd_cluster ( cluster) ?. into_iter ( ) . enumerate ( ) {
739
729
cluster_expanded. push ( RegisterBlockField {
740
730
syn_field,
741
731
description : info. description . as_ref ( ) . unwrap_or ( & info. name ) . into ( ) ,
@@ -753,11 +743,7 @@ fn expand_cluster(
753
743
754
744
/// If svd register arrays can't be converted to rust arrays (non sequential addresses, non
755
745
/// numeral indexes, or not containing all elements from 0 to size) they will be expanded
756
- fn expand_register (
757
- register : & Register ,
758
- name : Option < & str > ,
759
- config : & Config ,
760
- ) -> Result < Vec < RegisterBlockField > > {
746
+ fn expand_register ( register : & Register , config : & Config ) -> Result < Vec < RegisterBlockField > > {
761
747
let mut register_expanded = vec ! [ ] ;
762
748
763
749
let register_size = register
@@ -767,7 +753,7 @@ fn expand_register(
767
753
768
754
match register {
769
755
Register :: Single ( info) => register_expanded. push ( RegisterBlockField {
770
- syn_field : convert_svd_register ( register, name , config. ignore_groups )
756
+ syn_field : convert_svd_register ( register, config. ignore_groups )
771
757
. with_context ( || "syn error occured" ) ?,
772
758
description : info. description . clone ( ) . unwrap_or_default ( ) ,
773
759
offset : info. address_offset ,
@@ -797,7 +783,7 @@ fn expand_register(
797
783
798
784
if sequential_indexes_from0 {
799
785
register_expanded. push ( RegisterBlockField {
800
- syn_field : convert_svd_register ( register, name , config. ignore_groups ) ?,
786
+ syn_field : convert_svd_register ( register, config. ignore_groups ) ?,
801
787
description : info. description . clone ( ) . unwrap_or_default ( ) ,
802
788
offset : info. address_offset ,
803
789
size : register_size * array_info. dim ,
@@ -807,7 +793,7 @@ fn expand_register(
807
793
let span = Span :: call_site ( ) ;
808
794
let mut accessors = TokenStream :: new ( ) ;
809
795
let nb_name = util:: replace_suffix ( & info. fullname ( config. ignore_groups ) , "" ) ;
810
- let ty = name_to_wrapped_ty ( & nb_name, name ) ?;
796
+ let ty = name_to_wrapped_ty ( & nb_name) ?;
811
797
let nb_name_cs = nb_name. to_snake_case_ident ( span) ;
812
798
let description = info. description . clone ( ) . unwrap_or_default ( ) ;
813
799
let info_name = info. fullname ( config. ignore_groups ) ;
@@ -829,18 +815,17 @@ fn expand_register(
829
815
} ) ;
830
816
}
831
817
register_expanded. push ( RegisterBlockField {
832
- syn_field : convert_svd_register ( register, name , config. ignore_groups ) ?,
818
+ syn_field : convert_svd_register ( register, config. ignore_groups ) ?,
833
819
description,
834
820
offset : info. address_offset ,
835
821
size : register_size * array_info. dim ,
836
822
accessors : Some ( accessors) ,
837
823
} ) ;
838
824
}
839
825
} else {
840
- for ( field_num, syn_field) in
841
- expand_svd_register ( register, name, config. ignore_groups ) ?
842
- . into_iter ( )
843
- . enumerate ( )
826
+ for ( field_num, syn_field) in expand_svd_register ( register, config. ignore_groups ) ?
827
+ . into_iter ( )
828
+ . enumerate ( )
844
829
{
845
830
register_expanded. push ( RegisterBlockField {
846
831
syn_field,
@@ -911,13 +896,7 @@ fn cluster_block(
911
896
let mod_items = render_ercs ( & mut c. children , path, index, config) ?;
912
897
913
898
// Generate the register block.
914
- let mod_name = util:: replace_suffix (
915
- match c {
916
- Cluster :: Single ( info) => & info. name ,
917
- Cluster :: Array ( info, _ai) => & info. name ,
918
- } ,
919
- "" ,
920
- ) ;
899
+ let mod_name = util:: replace_suffix ( & c. name , "" ) ;
921
900
922
901
let reg_block = register_or_cluster_block ( & c. children , Some ( & mod_name) , config) ?;
923
902
@@ -928,31 +907,27 @@ fn cluster_block(
928
907
let name_snake_case = mod_name. to_snake_case_ident ( Span :: call_site ( ) ) ;
929
908
930
909
Ok ( quote ! {
931
- #reg_block
932
-
933
- ///Register block
910
+ ///Cluster
934
911
#[ doc = #description]
935
912
pub mod #name_snake_case {
913
+ #reg_block
914
+
936
915
#mod_items
937
916
}
938
917
} )
939
918
}
940
919
941
920
/// Takes a svd::Register which may be a register array, and turn in into
942
921
/// a list of syn::Field where the register arrays have been expanded.
943
- fn expand_svd_register (
944
- register : & Register ,
945
- name : Option < & str > ,
946
- ignore_group : bool ,
947
- ) -> Result < Vec < syn:: Field > > {
922
+ fn expand_svd_register ( register : & Register , ignore_group : bool ) -> Result < Vec < syn:: Field > > {
948
923
if let Register :: Array ( info, array_info) = register {
949
924
let ty_name = util:: replace_suffix ( & info. fullname ( ignore_group) , "" ) ;
950
925
951
926
let mut out = vec ! [ ] ;
952
927
for idx in array_info. indexes ( ) {
953
928
let nb_name = util:: replace_suffix ( & info. fullname ( ignore_group) , & idx) ;
954
929
955
- let ty = name_to_wrapped_ty ( & ty_name, name ) ?;
930
+ let ty = name_to_wrapped_ty ( & ty_name) ?;
956
931
957
932
out. push ( new_syn_field (
958
933
nb_name. to_snake_case_ident ( Span :: call_site ( ) ) ,
@@ -961,27 +936,23 @@ fn expand_svd_register(
961
936
}
962
937
Ok ( out)
963
938
} else {
964
- Ok ( vec ! [ convert_svd_register( register, name , ignore_group) ?] )
939
+ Ok ( vec ! [ convert_svd_register( register, ignore_group) ?] )
965
940
}
966
941
}
967
942
968
943
/// Convert a parsed `Register` into its `Field` equivalent
969
- fn convert_svd_register (
970
- register : & Register ,
971
- name : Option < & str > ,
972
- ignore_group : bool ,
973
- ) -> Result < syn:: Field > {
944
+ fn convert_svd_register ( register : & Register , ignore_group : bool ) -> Result < syn:: Field > {
974
945
Ok ( match register {
975
946
Register :: Single ( info) => {
976
947
let info_name = info. fullname ( ignore_group) ;
977
- let ty = name_to_wrapped_ty ( & info_name, name )
948
+ let ty = name_to_wrapped_ty ( & info_name)
978
949
. with_context ( || format ! ( "Error converting register name {info_name}" ) ) ?;
979
950
new_syn_field ( info_name. to_snake_case_ident ( Span :: call_site ( ) ) , ty)
980
951
}
981
952
Register :: Array ( info, array_info) => {
982
953
let info_name = info. fullname ( ignore_group) ;
983
954
let nb_name = util:: replace_suffix ( & info_name, "" ) ;
984
- let ty = name_to_wrapped_ty ( & nb_name, name )
955
+ let ty = name_to_wrapped_ty ( & nb_name)
985
956
. with_context ( || format ! ( "Error converting register name {nb_name}" ) ) ?;
986
957
let array_ty = new_syn_array ( ty, array_info. dim ) ;
987
958
@@ -994,10 +965,9 @@ fn convert_svd_register(
994
965
fn array_proxy (
995
966
info : & ClusterInfo ,
996
967
array_info : & DimElement ,
997
- name : Option < & str > ,
998
968
) -> Result < RegisterBlockField , syn:: Error > {
999
969
let ty_name = util:: replace_suffix ( & info. name , "" ) ;
1000
- let tys = name_to_ty_str ( & ty_name, name ) ;
970
+ let tys = name_to_ty_str ( & ty_name) ;
1001
971
1002
972
let ap_path = parse_str :: < syn:: TypePath > ( & format ! (
1003
973
"crate::ArrayProxy<{tys}, {}, {}>" ,
@@ -1019,18 +989,15 @@ fn array_proxy(
1019
989
1020
990
/// Takes a svd::Cluster which may contain a register array, and turn it into
1021
991
/// a list of syn::Field where the register arrays have been expanded.
1022
- fn expand_svd_cluster (
1023
- cluster : & Cluster ,
1024
- name : Option < & str > ,
1025
- ) -> Result < Vec < syn:: Field > , syn:: Error > {
992
+ fn expand_svd_cluster ( cluster : & Cluster ) -> Result < Vec < syn:: Field > , syn:: Error > {
1026
993
if let Cluster :: Array ( info, array_info) = cluster {
1027
994
let ty_name = util:: replace_suffix ( & info. name , "" ) ;
1028
995
1029
996
let mut out = vec ! [ ] ;
1030
997
for idx in array_info. indexes ( ) {
1031
998
let nb_name = util:: replace_suffix ( & info. name , & idx) ;
1032
999
1033
- let ty = name_to_ty ( & ty_name, name ) ?;
1000
+ let ty = name_to_ty ( & ty_name) ?;
1034
1001
1035
1002
out. push ( new_syn_field (
1036
1003
nb_name. to_snake_case_ident ( Span :: call_site ( ) ) ,
@@ -1039,21 +1006,21 @@ fn expand_svd_cluster(
1039
1006
}
1040
1007
Ok ( out)
1041
1008
} else {
1042
- Ok ( vec ! [ convert_svd_cluster( cluster, name ) ?] )
1009
+ Ok ( vec ! [ convert_svd_cluster( cluster) ?] )
1043
1010
}
1044
1011
}
1045
1012
1046
1013
/// Convert a parsed `Cluster` into its `Field` equivalent
1047
- fn convert_svd_cluster ( cluster : & Cluster , name : Option < & str > ) -> Result < syn:: Field , syn:: Error > {
1014
+ fn convert_svd_cluster ( cluster : & Cluster ) -> Result < syn:: Field , syn:: Error > {
1048
1015
Ok ( match cluster {
1049
1016
Cluster :: Single ( info) => {
1050
1017
let ty_name = util:: replace_suffix ( & info. name , "" ) ;
1051
- let ty = name_to_ty ( & ty_name, name ) ?;
1018
+ let ty = name_to_ty ( & ty_name) ?;
1052
1019
new_syn_field ( info. name . to_snake_case_ident ( Span :: call_site ( ) ) , ty)
1053
1020
}
1054
1021
Cluster :: Array ( info, array_info) => {
1055
1022
let ty_name = util:: replace_suffix ( & info. name , "" ) ;
1056
- let ty = name_to_ty ( & ty_name, name ) ?;
1023
+ let ty = name_to_ty ( & ty_name) ?;
1057
1024
let array_ty = new_syn_array ( ty, array_info. dim ) ;
1058
1025
1059
1026
new_syn_field ( ty_name. to_snake_case_ident ( Span :: call_site ( ) ) , array_ty)
@@ -1091,43 +1058,29 @@ fn new_syn_u32(len: u32, span: Span) -> syn::Expr {
1091
1058
} )
1092
1059
}
1093
1060
1094
- fn name_to_ty_str < ' a , ' b > ( name : & ' a str , ns : Option < & ' b str > ) -> Cow < ' a , str > {
1095
- if let Some ( ns) = ns {
1096
- Cow :: Owned (
1097
- String :: from ( "self::" )
1098
- + & ns. to_sanitized_snake_case ( )
1099
- + "::"
1100
- + & name. to_sanitized_constant_case ( ) ,
1101
- )
1102
- } else {
1061
+ fn name_to_ty_str ( name : & str ) -> String {
1062
+ format ! (
1063
+ "{}::{}" ,
1064
+ name. to_sanitized_snake_case( ) ,
1103
1065
name. to_sanitized_constant_case( )
1104
- }
1066
+ )
1105
1067
}
1106
1068
1107
- fn name_to_ty ( name : & str , ns : Option < & str > ) -> Result < syn:: Type , syn:: Error > {
1108
- let ident = name_to_ty_str ( name, ns ) ;
1069
+ fn name_to_ty ( name : & str ) -> Result < syn:: Type , syn:: Error > {
1070
+ let ident = name_to_ty_str ( name) ;
1109
1071
parse_str :: < syn:: TypePath > ( & ident) . map ( syn:: Type :: Path )
1110
1072
}
1111
1073
1112
- fn name_to_wrapped_ty_str ( name : & str , ns : Option < & str > ) -> String {
1113
- if let Some ( ns) = ns {
1114
- format ! (
1115
- "crate::Reg<self::{}::{}::{}_SPEC>" ,
1116
- & ns. to_sanitized_snake_case( ) ,
1117
- & name. to_sanitized_snake_case( ) ,
1118
- & name. to_sanitized_constant_case( ) ,
1119
- )
1120
- } else {
1121
- format ! (
1122
- "crate::Reg<{}::{}_SPEC>" ,
1123
- & name. to_sanitized_snake_case( ) ,
1124
- & name. to_sanitized_constant_case( ) ,
1125
- )
1126
- }
1074
+ fn name_to_wrapped_ty_str ( name : & str ) -> String {
1075
+ format ! (
1076
+ "crate::Reg<{}::{}_SPEC>" ,
1077
+ & name. to_sanitized_snake_case( ) ,
1078
+ & name. to_sanitized_constant_case( ) ,
1079
+ )
1127
1080
}
1128
1081
1129
- fn name_to_wrapped_ty ( name : & str , ns : Option < & str > ) -> Result < syn:: Type > {
1130
- let ident = name_to_wrapped_ty_str ( name, ns ) ;
1082
+ fn name_to_wrapped_ty ( name : & str ) -> Result < syn:: Type > {
1083
+ let ident = name_to_wrapped_ty_str ( name) ;
1131
1084
parse_str :: < syn:: TypePath > ( & ident)
1132
1085
. map ( syn:: Type :: Path )
1133
1086
. map_err ( anyhow:: Error :: from)
0 commit comments