@@ -564,7 +564,7 @@ fn expand(
564
564
for erc in ercs {
565
565
ercs_expanded. extend ( match & erc {
566
566
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 ) ?,
568
568
} ) ;
569
569
}
570
570
@@ -599,7 +599,7 @@ fn cluster_size_in_bits(info: &ClusterInfo, defs: &RegisterProperties) -> Result
599
599
}
600
600
601
601
/// 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 ( cluster : & Cluster , defs : & RegisterProperties , name : Option < & str > ) -> Result < Vec < RegisterBlockField > > {
603
603
let mut cluster_expanded = vec ! [ ] ;
604
604
605
605
let defs = cluster. default_register_properties . derive_from ( defs) ;
@@ -635,7 +635,7 @@ fn expand_cluster(cluster: &Cluster, defs: &RegisterProperties) -> Result<Vec<Re
635
635
size : cluster_size * array_info. dim ,
636
636
} ) ;
637
637
} else {
638
- for ( field_num, field) in expand_svd_cluster ( cluster) ?. iter ( ) . enumerate ( ) {
638
+ for ( field_num, field) in expand_svd_cluster ( cluster, name ) ?. iter ( ) . enumerate ( ) {
639
639
cluster_expanded. push ( RegisterBlockField {
640
640
field : field. clone ( ) ,
641
641
description : info. description . as_ref ( ) . unwrap_or ( & info. name ) . into ( ) ,
@@ -770,21 +770,6 @@ fn expand_svd_register(
770
770
register : & Register ,
771
771
name : Option < & str > ,
772
772
) -> 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
-
788
773
let mut out = vec ! [ ] ;
789
774
790
775
match register {
@@ -818,7 +803,7 @@ fn expand_svd_register(
818
803
819
804
/// Convert a parsed `Register` into its `Field` equivalent
820
805
fn convert_svd_register ( register : & Register , name : Option < & str > ) -> Result < syn:: Field , syn:: Error > {
821
- let name_to_ty = |name : & String , ns : Option < & str > | -> String {
806
+ let name_to_ty_str = |name : & String , ns : Option < & str > | -> String {
822
807
if let Some ( ns) = ns {
823
808
String :: from ( "self::" )
824
809
+ & ns. to_sanitized_snake_case ( )
@@ -832,14 +817,14 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::
832
817
Ok ( match register {
833
818
Register :: Single ( info) => new_syn_field (
834
819
& info. name . to_sanitized_snake_case ( ) ,
835
- syn :: Type :: Path ( parse_str :: < syn :: TypePath > ( & name_to_ty ( & info. name , name) ) ? ) ,
820
+ name_to_ty ( & info. name , name) ? ,
836
821
) ,
837
822
Register :: Array ( info, array_info) => {
838
823
let nb_name = util:: replace_suffix ( & info. name , "" ) ;
839
824
840
825
let ty = syn:: Type :: Array ( parse_str :: < syn:: TypeArray > ( & format ! (
841
826
"[{};{}]" ,
842
- name_to_ty ( & nb_name, name) ,
827
+ name_to_ty_str ( & nb_name, name) ,
843
828
u64 :: from( array_info. dim)
844
829
) ) ?) ;
845
830
@@ -850,13 +835,7 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::
850
835
851
836
/// Takes a svd::Cluster which may contain a register array, and turn in into
852
837
/// 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
-
838
+ fn expand_svd_cluster ( cluster : & Cluster , name : Option < & str > ) -> Result < Vec < syn:: Field > , syn:: Error > {
860
839
let mut out = vec ! [ ] ;
861
840
862
841
match & cluster {
@@ -877,11 +856,11 @@ fn expand_svd_cluster(cluster: &Cluster) -> Result<Vec<syn::Field>, syn::Error>
877
856
let ty_name = util:: replace_suffix ( & info. name , "" ) ;
878
857
879
858
for ( idx, _i) in indices. iter ( ) . zip ( 0 ..) {
880
- let name = util:: replace_suffix ( & info. name , idx) ;
859
+ let nb_name = util:: replace_suffix ( & info. name , idx) ;
881
860
882
- let ty = name_to_ty ( & ty_name) ?;
861
+ let ty = name_to_ty ( & ty_name, name ) ?;
883
862
884
- out. push ( new_syn_field ( & name . to_sanitized_snake_case ( ) , ty) ) ;
863
+ out. push ( new_syn_field ( & nb_name . to_sanitized_snake_case ( ) , ty) ) ;
885
864
}
886
865
}
887
866
}
@@ -923,3 +902,18 @@ fn new_syn_field(ident: &str, ty: syn::Type) -> syn::Field {
923
902
ty,
924
903
}
925
904
}
905
+
906
+ fn name_to_ty ( name : & String , ns : Option < & str > ) -> Result < syn:: Type , syn:: Error > {
907
+ let ident = if let Some ( ns) = ns {
908
+ Cow :: Owned (
909
+ String :: from ( "self::" )
910
+ + & ns. to_sanitized_snake_case ( )
911
+ + "::"
912
+ + & name. to_sanitized_upper_case ( ) ,
913
+ )
914
+ } else {
915
+ name. to_sanitized_upper_case ( )
916
+ } ;
917
+
918
+ Ok ( syn:: Type :: Path ( parse_str :: < syn:: TypePath > ( & ident) ?) )
919
+ }
0 commit comments