@@ -155,7 +155,7 @@ pub fn render(
155155 mod_items. extend ( cluster_block ( c, & defaults, p, all_peripherals, nightly) ?) ;
156156 }
157157
158- // Push all regsiter realted information into the peripheral module
158+ // Push all register related information into the peripheral module
159159 for reg in registers {
160160 mod_items. extend ( register:: render (
161161 reg,
@@ -564,7 +564,7 @@ fn expand(
564564 for erc in ercs {
565565 ercs_expanded. extend ( match & erc {
566566 RegisterCluster :: Register ( register) => expand_register ( register, defs, name) ?,
567- RegisterCluster :: Cluster ( cluster) => expand_cluster ( cluster, defs) ?,
567+ RegisterCluster :: Cluster ( cluster) => expand_cluster ( cluster, defs, name ) ?,
568568 } ) ;
569569 }
570570
@@ -599,7 +599,11 @@ fn cluster_size_in_bits(info: &ClusterInfo, defs: &RegisterProperties) -> Result
599599}
600600
601601/// Render a given cluster (and any children) into `RegisterBlockField`s
602- fn expand_cluster ( cluster : & Cluster , defs : & RegisterProperties ) -> Result < Vec < RegisterBlockField > > {
602+ fn expand_cluster (
603+ cluster : & Cluster ,
604+ defs : & RegisterProperties ,
605+ name : Option < & str > ,
606+ ) -> Result < Vec < RegisterBlockField > > {
603607 let mut cluster_expanded = vec ! [ ] ;
604608
605609 let defs = cluster. default_register_properties . derive_from ( defs) ;
@@ -635,7 +639,7 @@ fn expand_cluster(cluster: &Cluster, defs: &RegisterProperties) -> Result<Vec<Re
635639 size : cluster_size * array_info. dim ,
636640 } ) ;
637641 } else {
638- for ( field_num, field) in expand_svd_cluster ( cluster) ?. iter ( ) . enumerate ( ) {
642+ for ( field_num, field) in expand_svd_cluster ( cluster, name ) ?. iter ( ) . enumerate ( ) {
639643 cluster_expanded. push ( RegisterBlockField {
640644 field : field. clone ( ) ,
641645 description : info. description . as_ref ( ) . unwrap_or ( & info. name ) . into ( ) ,
@@ -770,21 +774,6 @@ fn expand_svd_register(
770774 register : & Register ,
771775 name : Option < & str > ,
772776) -> Result < Vec < syn:: Field > , syn:: Error > {
773- let name_to_ty = |name : & String , ns : Option < & str > | -> Result < syn:: Type , syn:: Error > {
774- let ident = if let Some ( ns) = ns {
775- Cow :: Owned (
776- String :: from ( "self::" )
777- + & ns. to_sanitized_snake_case ( )
778- + "::"
779- + & name. to_sanitized_upper_case ( ) ,
780- )
781- } else {
782- name. to_sanitized_upper_case ( )
783- } ;
784-
785- Ok ( syn:: Type :: Path ( parse_str :: < syn:: TypePath > ( & ident) ?) )
786- } ;
787-
788777 let mut out = vec ! [ ] ;
789778
790779 match register {
@@ -818,7 +807,7 @@ fn expand_svd_register(
818807
819808/// Convert a parsed `Register` into its `Field` equivalent
820809fn convert_svd_register ( register : & Register , name : Option < & str > ) -> Result < syn:: Field , syn:: Error > {
821- let name_to_ty = |name : & String , ns : Option < & str > | -> String {
810+ let name_to_ty_str = |name : & String , ns : Option < & str > | -> String {
822811 if let Some ( ns) = ns {
823812 String :: from ( "self::" )
824813 + & ns. to_sanitized_snake_case ( )
@@ -832,14 +821,14 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::
832821 Ok ( match register {
833822 Register :: Single ( info) => new_syn_field (
834823 & info. name . to_sanitized_snake_case ( ) ,
835- syn :: Type :: Path ( parse_str :: < syn :: TypePath > ( & name_to_ty ( & info. name , name) ) ? ) ,
824+ name_to_ty ( & info. name , name) ? ,
836825 ) ,
837826 Register :: Array ( info, array_info) => {
838827 let nb_name = util:: replace_suffix ( & info. name , "" ) ;
839828
840829 let ty = syn:: Type :: Array ( parse_str :: < syn:: TypeArray > ( & format ! (
841830 "[{};{}]" ,
842- name_to_ty ( & nb_name, name) ,
831+ name_to_ty_str ( & nb_name, name) ,
843832 u64 :: from( array_info. dim)
844833 ) ) ?) ;
845834
@@ -850,13 +839,10 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::
850839
851840/// Takes a svd::Cluster which may contain a register array, and turn in into
852841/// a list of syn::Field where the register arrays have been expanded.
853- fn expand_svd_cluster ( cluster : & Cluster ) -> Result < Vec < syn:: Field > , syn:: Error > {
854- let name_to_ty = |name : & String | -> Result < syn:: Type , syn:: Error > {
855- Ok ( syn:: Type :: Path ( parse_str :: < syn:: TypePath > (
856- & name. to_sanitized_upper_case ( ) ,
857- ) ?) )
858- } ;
859-
842+ fn expand_svd_cluster (
843+ cluster : & Cluster ,
844+ name : Option < & str > ,
845+ ) -> Result < Vec < syn:: Field > , syn:: Error > {
860846 let mut out = vec ! [ ] ;
861847
862848 match & cluster {
@@ -877,11 +863,11 @@ fn expand_svd_cluster(cluster: &Cluster) -> Result<Vec<syn::Field>, syn::Error>
877863 let ty_name = util:: replace_suffix ( & info. name , "" ) ;
878864
879865 for ( idx, _i) in indices. iter ( ) . zip ( 0 ..) {
880- let name = util:: replace_suffix ( & info. name , idx) ;
866+ let nb_name = util:: replace_suffix ( & info. name , idx) ;
881867
882- let ty = name_to_ty ( & ty_name) ?;
868+ let ty = name_to_ty ( & ty_name, name ) ?;
883869
884- out. push ( new_syn_field ( & name . to_sanitized_snake_case ( ) , ty) ) ;
870+ out. push ( new_syn_field ( & nb_name . to_sanitized_snake_case ( ) , ty) ) ;
885871 }
886872 }
887873 }
@@ -923,3 +909,18 @@ fn new_syn_field(ident: &str, ty: syn::Type) -> syn::Field {
923909 ty,
924910 }
925911}
912+
913+ fn name_to_ty ( name : & String , ns : Option < & str > ) -> Result < syn:: Type , syn:: Error > {
914+ let ident = if let Some ( ns) = ns {
915+ Cow :: Owned (
916+ String :: from ( "self::" )
917+ + & ns. to_sanitized_snake_case ( )
918+ + "::"
919+ + & name. to_sanitized_upper_case ( ) ,
920+ )
921+ } else {
922+ name. to_sanitized_upper_case ( )
923+ } ;
924+
925+ Ok ( syn:: Type :: Path ( parse_str :: < syn:: TypePath > ( & ident) ?) )
926+ }
0 commit comments