@@ -155,7 +155,7 @@ pub fn render(
155
155
mod_items. extend ( cluster_block ( c, & defaults, p, all_peripherals, nightly) ?) ;
156
156
}
157
157
158
- // Push all regsiter realted information into the peripheral module
158
+ // Push all register related information into the peripheral module
159
159
for reg in registers {
160
160
mod_items. extend ( register:: render (
161
161
reg,
@@ -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,11 @@ 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 (
603
+ cluster : & Cluster ,
604
+ defs : & RegisterProperties ,
605
+ name : Option < & str > ,
606
+ ) -> Result < Vec < RegisterBlockField > > {
603
607
let mut cluster_expanded = vec ! [ ] ;
604
608
605
609
let defs = cluster. default_register_properties . derive_from ( defs) ;
@@ -635,7 +639,7 @@ fn expand_cluster(cluster: &Cluster, defs: &RegisterProperties) -> Result<Vec<Re
635
639
size : cluster_size * array_info. dim ,
636
640
} ) ;
637
641
} 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 ( ) {
639
643
cluster_expanded. push ( RegisterBlockField {
640
644
field : field. clone ( ) ,
641
645
description : info. description . as_ref ( ) . unwrap_or ( & info. name ) . into ( ) ,
@@ -770,21 +774,6 @@ fn expand_svd_register(
770
774
register : & Register ,
771
775
name : Option < & str > ,
772
776
) -> 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
777
let mut out = vec ! [ ] ;
789
778
790
779
match register {
@@ -818,7 +807,7 @@ fn expand_svd_register(
818
807
819
808
/// Convert a parsed `Register` into its `Field` equivalent
820
809
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 {
810
+ let name_to_ty_str = |name : & String , ns : Option < & str > | -> String {
822
811
if let Some ( ns) = ns {
823
812
String :: from ( "self::" )
824
813
+ & ns. to_sanitized_snake_case ( )
@@ -832,14 +821,14 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::
832
821
Ok ( match register {
833
822
Register :: Single ( info) => new_syn_field (
834
823
& 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) ? ,
836
825
) ,
837
826
Register :: Array ( info, array_info) => {
838
827
let nb_name = util:: replace_suffix ( & info. name , "" ) ;
839
828
840
829
let ty = syn:: Type :: Array ( parse_str :: < syn:: TypeArray > ( & format ! (
841
830
"[{};{}]" ,
842
- name_to_ty ( & nb_name, name) ,
831
+ name_to_ty_str ( & nb_name, name) ,
843
832
u64 :: from( array_info. dim)
844
833
) ) ?) ;
845
834
@@ -850,13 +839,10 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::
850
839
851
840
/// Takes a svd::Cluster which may contain a register array, and turn in into
852
841
/// 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 > {
860
846
let mut out = vec ! [ ] ;
861
847
862
848
match & cluster {
@@ -877,11 +863,11 @@ fn expand_svd_cluster(cluster: &Cluster) -> Result<Vec<syn::Field>, syn::Error>
877
863
let ty_name = util:: replace_suffix ( & info. name , "" ) ;
878
864
879
865
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) ;
881
867
882
- let ty = name_to_ty ( & ty_name) ?;
868
+ let ty = name_to_ty ( & ty_name, name ) ?;
883
869
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) ) ;
885
871
}
886
872
}
887
873
}
@@ -923,3 +909,18 @@ fn new_syn_field(ident: &str, ty: syn::Type) -> syn::Field {
923
909
ty,
924
910
}
925
911
}
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