@@ -439,7 +439,7 @@ fn register_or_cluster_block(
439439 let mut accessors = TokenStream :: new ( ) ;
440440
441441 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" ) ?;
443443
444444 // Locate conflicting regions; we'll need to use unions to represent them.
445445 let mut regions = FieldRegions :: default ( ) ;
@@ -564,17 +564,13 @@ fn register_or_cluster_block(
564564
565565/// Expand a list of parsed `Register`s or `Cluster`s, and render them to
566566/// `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 > > {
572568 let mut ercs_expanded = vec ! [ ] ;
573569
574570 debug ! ( "Expanding registers or clusters into Register Block Fields" ) ;
575571 for erc in ercs {
576572 match & erc {
577- RegisterCluster :: Register ( register) => match expand_register ( register, name , config) {
573+ RegisterCluster :: Register ( register) => match expand_register ( register, config) {
578574 Ok ( expanded_reg) => {
579575 trace ! ( "Register: {}" , register. name) ;
580576 ercs_expanded. extend ( expanded_reg) ;
@@ -584,7 +580,7 @@ fn expand(
584580 return handle_reg_error ( "Error expanding register" , register, res) ;
585581 }
586582 } ,
587- RegisterCluster :: Cluster ( cluster) => match expand_cluster ( cluster, name , config) {
583+ RegisterCluster :: Cluster ( cluster) => match expand_cluster ( cluster, config) {
588584 Ok ( expanded_cluster) => {
589585 trace ! ( "Cluster: {}" , cluster. name) ;
590586 ercs_expanded. extend ( expanded_cluster) ;
@@ -631,7 +627,7 @@ fn cluster_info_size_in_bits(info: &ClusterInfo, config: &Config) -> Result<u32>
631627 for c in & info. children {
632628 let end = match c {
633629 RegisterCluster :: Register ( reg) => {
634- let reg_size: u32 = expand_register ( reg, None , config) ?
630+ let reg_size: u32 = expand_register ( reg, config) ?
635631 . iter ( )
636632 . map ( |rbf| rbf. size )
637633 . sum ( ) ;
@@ -649,19 +645,15 @@ fn cluster_info_size_in_bits(info: &ClusterInfo, config: &Config) -> Result<u32>
649645}
650646
651647/// 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 > > {
657649 let mut cluster_expanded = vec ! [ ] ;
658650
659651 let cluster_size = cluster_info_size_in_bits ( cluster, config)
660652 . with_context ( || format ! ( "Cluster {} has no determinable `size` field" , cluster. name) ) ?;
661653
662654 match cluster {
663655 Cluster :: Single ( info) => cluster_expanded. push ( RegisterBlockField {
664- syn_field : convert_svd_cluster ( cluster, name ) ?,
656+ syn_field : convert_svd_cluster ( cluster) ?,
665657 description : info. description . as_ref ( ) . unwrap_or ( & info. name ) . into ( ) ,
666658 offset : info. address_offset ,
667659 size : cluster_size,
@@ -690,7 +682,7 @@ fn expand_cluster(
690682 if array_convertible {
691683 if sequential_indexes_from0 {
692684 cluster_expanded. push ( RegisterBlockField {
693- syn_field : convert_svd_cluster ( cluster, name ) ?,
685+ syn_field : convert_svd_cluster ( cluster) ?,
694686 description : info. description . as_ref ( ) . unwrap_or ( & info. name ) . into ( ) ,
695687 offset : info. address_offset ,
696688 size : cluster_size * array_info. dim ,
@@ -700,7 +692,7 @@ fn expand_cluster(
700692 let span = Span :: call_site ( ) ;
701693 let mut accessors = TokenStream :: new ( ) ;
702694 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) ?;
704696 let nb_name_cs = nb_name. to_snake_case_ident ( span) ;
705697 let description = info. description . as_ref ( ) . unwrap_or ( & info. name ) ;
706698 for ( i, idx) in array_info. indexes ( ) . enumerate ( ) {
@@ -721,7 +713,7 @@ fn expand_cluster(
721713 } ) ;
722714 }
723715 cluster_expanded. push ( RegisterBlockField {
724- syn_field : convert_svd_cluster ( cluster, name ) ?,
716+ syn_field : convert_svd_cluster ( cluster) ?,
725717 description : description. into ( ) ,
726718 offset : info. address_offset ,
727719 size : cluster_size * array_info. dim ,
@@ -731,11 +723,9 @@ fn expand_cluster(
731723 } else if sequential_indexes_from0 && config. const_generic {
732724 // Include a ZST ArrayProxy giving indexed access to the
733725 // elements.
734- cluster_expanded. push ( array_proxy ( info, array_info, name ) ?) ;
726+ cluster_expanded. push ( array_proxy ( info, array_info) ?) ;
735727 } 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 ( ) {
739729 cluster_expanded. push ( RegisterBlockField {
740730 syn_field,
741731 description : info. description . as_ref ( ) . unwrap_or ( & info. name ) . into ( ) ,
@@ -753,11 +743,7 @@ fn expand_cluster(
753743
754744/// If svd register arrays can't be converted to rust arrays (non sequential addresses, non
755745/// 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 > > {
761747 let mut register_expanded = vec ! [ ] ;
762748
763749 let register_size = register
@@ -767,7 +753,7 @@ fn expand_register(
767753
768754 match register {
769755 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 )
771757 . with_context ( || "syn error occured" ) ?,
772758 description : info. description . clone ( ) . unwrap_or_default ( ) ,
773759 offset : info. address_offset ,
@@ -797,7 +783,7 @@ fn expand_register(
797783
798784 if sequential_indexes_from0 {
799785 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 ) ?,
801787 description : info. description . clone ( ) . unwrap_or_default ( ) ,
802788 offset : info. address_offset ,
803789 size : register_size * array_info. dim ,
@@ -807,7 +793,7 @@ fn expand_register(
807793 let span = Span :: call_site ( ) ;
808794 let mut accessors = TokenStream :: new ( ) ;
809795 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) ?;
811797 let nb_name_cs = nb_name. to_snake_case_ident ( span) ;
812798 let description = info. description . clone ( ) . unwrap_or_default ( ) ;
813799 let info_name = info. fullname ( config. ignore_groups ) ;
@@ -829,18 +815,17 @@ fn expand_register(
829815 } ) ;
830816 }
831817 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 ) ?,
833819 description,
834820 offset : info. address_offset ,
835821 size : register_size * array_info. dim ,
836822 accessors : Some ( accessors) ,
837823 } ) ;
838824 }
839825 } 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 ( )
844829 {
845830 register_expanded. push ( RegisterBlockField {
846831 syn_field,
@@ -911,13 +896,7 @@ fn cluster_block(
911896 let mod_items = render_ercs ( & mut c. children , path, index, config) ?;
912897
913898 // 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 , "" ) ;
921900
922901 let reg_block = register_or_cluster_block ( & c. children , Some ( & mod_name) , config) ?;
923902
@@ -927,32 +906,33 @@ fn cluster_block(
927906
928907 let name_snake_case = mod_name. to_snake_case_ident ( Span :: call_site ( ) ) ;
929908
909+ let struct_path = name_to_ty ( & mod_name) ?;
910+
930911 Ok ( quote ! {
931- #reg_block
912+ #[ doc = #description]
913+ pub use #struct_path;
932914
933- ///Register block
915+ ///Cluster
934916 #[ doc = #description]
935917 pub mod #name_snake_case {
918+ #reg_block
919+
936920 #mod_items
937921 }
938922 } )
939923}
940924
941925/// Takes a svd::Register which may be a register array, and turn in into
942926/// 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 > > {
927+ fn expand_svd_register ( register : & Register , ignore_group : bool ) -> Result < Vec < syn:: Field > > {
948928 if let Register :: Array ( info, array_info) = register {
949929 let ty_name = util:: replace_suffix ( & info. fullname ( ignore_group) , "" ) ;
950930
951931 let mut out = vec ! [ ] ;
952932 for idx in array_info. indexes ( ) {
953933 let nb_name = util:: replace_suffix ( & info. fullname ( ignore_group) , & idx) ;
954934
955- let ty = name_to_wrapped_ty ( & ty_name, name ) ?;
935+ let ty = name_to_wrapped_ty ( & ty_name) ?;
956936
957937 out. push ( new_syn_field (
958938 nb_name. to_snake_case_ident ( Span :: call_site ( ) ) ,
@@ -961,27 +941,23 @@ fn expand_svd_register(
961941 }
962942 Ok ( out)
963943 } else {
964- Ok ( vec ! [ convert_svd_register( register, name , ignore_group) ?] )
944+ Ok ( vec ! [ convert_svd_register( register, ignore_group) ?] )
965945 }
966946}
967947
968948/// 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 > {
949+ fn convert_svd_register ( register : & Register , ignore_group : bool ) -> Result < syn:: Field > {
974950 Ok ( match register {
975951 Register :: Single ( info) => {
976952 let info_name = info. fullname ( ignore_group) ;
977- let ty = name_to_wrapped_ty ( & info_name, name )
953+ let ty = name_to_wrapped_ty ( & info_name)
978954 . with_context ( || format ! ( "Error converting register name {info_name}" ) ) ?;
979955 new_syn_field ( info_name. to_snake_case_ident ( Span :: call_site ( ) ) , ty)
980956 }
981957 Register :: Array ( info, array_info) => {
982958 let info_name = info. fullname ( ignore_group) ;
983959 let nb_name = util:: replace_suffix ( & info_name, "" ) ;
984- let ty = name_to_wrapped_ty ( & nb_name, name )
960+ let ty = name_to_wrapped_ty ( & nb_name)
985961 . with_context ( || format ! ( "Error converting register name {nb_name}" ) ) ?;
986962 let array_ty = new_syn_array ( ty, array_info. dim ) ;
987963
@@ -994,10 +970,9 @@ fn convert_svd_register(
994970fn array_proxy (
995971 info : & ClusterInfo ,
996972 array_info : & DimElement ,
997- name : Option < & str > ,
998973) -> Result < RegisterBlockField , syn:: Error > {
999974 let ty_name = util:: replace_suffix ( & info. name , "" ) ;
1000- let tys = name_to_ty_str ( & ty_name, name ) ;
975+ let tys = name_to_ty_str ( & ty_name) ;
1001976
1002977 let ap_path = parse_str :: < syn:: TypePath > ( & format ! (
1003978 "crate::ArrayProxy<{tys}, {}, {}>" ,
@@ -1019,18 +994,15 @@ fn array_proxy(
1019994
1020995/// Takes a svd::Cluster which may contain a register array, and turn it into
1021996/// 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 > {
997+ fn expand_svd_cluster ( cluster : & Cluster ) -> Result < Vec < syn:: Field > , syn:: Error > {
1026998 if let Cluster :: Array ( info, array_info) = cluster {
1027999 let ty_name = util:: replace_suffix ( & info. name , "" ) ;
10281000
10291001 let mut out = vec ! [ ] ;
10301002 for idx in array_info. indexes ( ) {
10311003 let nb_name = util:: replace_suffix ( & info. name , & idx) ;
10321004
1033- let ty = name_to_ty ( & ty_name, name ) ?;
1005+ let ty = name_to_ty ( & ty_name) ?;
10341006
10351007 out. push ( new_syn_field (
10361008 nb_name. to_snake_case_ident ( Span :: call_site ( ) ) ,
@@ -1039,21 +1011,21 @@ fn expand_svd_cluster(
10391011 }
10401012 Ok ( out)
10411013 } else {
1042- Ok ( vec ! [ convert_svd_cluster( cluster, name ) ?] )
1014+ Ok ( vec ! [ convert_svd_cluster( cluster) ?] )
10431015 }
10441016}
10451017
10461018/// Convert a parsed `Cluster` into its `Field` equivalent
1047- fn convert_svd_cluster ( cluster : & Cluster , name : Option < & str > ) -> Result < syn:: Field , syn:: Error > {
1019+ fn convert_svd_cluster ( cluster : & Cluster ) -> Result < syn:: Field , syn:: Error > {
10481020 Ok ( match cluster {
10491021 Cluster :: Single ( info) => {
10501022 let ty_name = util:: replace_suffix ( & info. name , "" ) ;
1051- let ty = name_to_ty ( & ty_name, name ) ?;
1023+ let ty = name_to_ty ( & ty_name) ?;
10521024 new_syn_field ( info. name . to_snake_case_ident ( Span :: call_site ( ) ) , ty)
10531025 }
10541026 Cluster :: Array ( info, array_info) => {
10551027 let ty_name = util:: replace_suffix ( & info. name , "" ) ;
1056- let ty = name_to_ty ( & ty_name, name ) ?;
1028+ let ty = name_to_ty ( & ty_name) ?;
10571029 let array_ty = new_syn_array ( ty, array_info. dim ) ;
10581030
10591031 new_syn_field ( ty_name. to_snake_case_ident ( Span :: call_site ( ) ) , array_ty)
@@ -1091,43 +1063,29 @@ fn new_syn_u32(len: u32, span: Span) -> syn::Expr {
10911063 } )
10921064}
10931065
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 {
1066+ fn name_to_ty_str ( name : & str ) -> String {
1067+ format ! (
1068+ "{}::{}" ,
1069+ name. to_sanitized_snake_case( ) ,
11031070 name. to_sanitized_constant_case( )
1104- }
1071+ )
11051072}
11061073
1107- fn name_to_ty ( name : & str , ns : Option < & str > ) -> Result < syn:: Type , syn:: Error > {
1108- let ident = name_to_ty_str ( name, ns ) ;
1074+ fn name_to_ty ( name : & str ) -> Result < syn:: Type , syn:: Error > {
1075+ let ident = name_to_ty_str ( name) ;
11091076 parse_str :: < syn:: TypePath > ( & ident) . map ( syn:: Type :: Path )
11101077}
11111078
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- }
1079+ fn name_to_wrapped_ty_str ( name : & str ) -> String {
1080+ format ! (
1081+ "crate::Reg<{}::{}_SPEC>" ,
1082+ & name. to_sanitized_snake_case( ) ,
1083+ & name. to_sanitized_constant_case( ) ,
1084+ )
11271085}
11281086
1129- fn name_to_wrapped_ty ( name : & str , ns : Option < & str > ) -> Result < syn:: Type > {
1130- let ident = name_to_wrapped_ty_str ( name, ns ) ;
1087+ fn name_to_wrapped_ty ( name : & str ) -> Result < syn:: Type > {
1088+ let ident = name_to_wrapped_ty_str ( name) ;
11311089 parse_str :: < syn:: TypePath > ( & ident)
11321090 . map ( syn:: Type :: Path )
11331091 . map_err ( anyhow:: Error :: from)
0 commit comments