@@ -650,11 +650,16 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
650
650
651
651
let cluster_size = cluster_info_size_in_bits ( cluster, config)
652
652
. with_context ( || format ! ( "Cluster {} has no determinable `size` field" , cluster. name) ) ?;
653
+ let description = cluster
654
+ . description
655
+ . as_ref ( )
656
+ . unwrap_or ( & cluster. name )
657
+ . to_string ( ) ;
653
658
654
659
match cluster {
655
660
Cluster :: Single ( info) => cluster_expanded. push ( RegisterBlockField {
656
661
syn_field : cluster_to_syn_field ( cluster) ?,
657
- description : info . description . as_ref ( ) . unwrap_or ( & info . name ) . into ( ) ,
662
+ description,
658
663
offset : info. address_offset ,
659
664
size : cluster_size,
660
665
accessors : None ,
@@ -680,28 +685,21 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
680
685
let array_convertible = sequential_addresses && convert_list;
681
686
682
687
if array_convertible {
683
- if sequential_indexes_from0 {
684
- cluster_expanded. push ( RegisterBlockField {
685
- syn_field : cluster_to_syn_field ( cluster) ?,
686
- description : info. description . as_ref ( ) . unwrap_or ( & info. name ) . into ( ) ,
687
- offset : info. address_offset ,
688
- size : cluster_size * array_info. dim ,
689
- accessors : None ,
690
- } ) ;
688
+ let accessors = if sequential_indexes_from0 {
689
+ None
691
690
} else {
692
691
let span = Span :: call_site ( ) ;
693
692
let mut accessors = TokenStream :: new ( ) ;
694
693
let nb_name = util:: replace_suffix ( & info. name , "" ) ;
695
694
let ty = name_to_ty ( & nb_name) ?;
696
695
let nb_name_cs = nb_name. to_snake_case_ident ( span) ;
697
- let description = info. description . as_ref ( ) . unwrap_or ( & info. name ) ;
698
696
for ( i, idx) in array_info. indexes ( ) . enumerate ( ) {
699
697
let idx_name =
700
698
util:: replace_suffix ( & info. name , & idx) . to_snake_case_ident ( span) ;
701
699
let comment = make_comment (
702
700
cluster_size,
703
701
info. address_offset + ( i as u32 ) * cluster_size / 8 ,
704
- description,
702
+ & description,
705
703
) ;
706
704
let i = unsuffixed ( i as _ ) ;
707
705
accessors. extend ( quote ! {
@@ -712,23 +710,32 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
712
710
}
713
711
} ) ;
714
712
}
715
- cluster_expanded. push ( RegisterBlockField {
716
- syn_field : cluster_to_syn_field ( cluster) ?,
717
- description : description. into ( ) ,
718
- offset : info. address_offset ,
719
- size : cluster_size * array_info. dim ,
720
- accessors : Some ( accessors) ,
721
- } ) ;
722
- }
713
+ Some ( accessors)
714
+ } ;
715
+ cluster_expanded. push ( RegisterBlockField {
716
+ syn_field : cluster_to_syn_field ( cluster) ?,
717
+ description,
718
+ offset : info. address_offset ,
719
+ size : cluster_size * array_info. dim ,
720
+ accessors,
721
+ } ) ;
723
722
} else if sequential_indexes_from0 && config. const_generic {
724
723
// Include a ZST ArrayProxy giving indexed access to the
725
724
// elements.
726
725
cluster_expanded. push ( array_proxy ( info, array_info) ?) ;
727
726
} else {
728
- for ( field_num, syn_field) in expand_svd_cluster ( cluster) ?. into_iter ( ) . enumerate ( ) {
727
+ let ty_name = util:: replace_suffix ( & info. name , "" ) ;
728
+ let ty = name_to_ty ( & ty_name) ?;
729
+
730
+ for ( field_num, idx) in array_info. indexes ( ) . enumerate ( ) {
731
+ let nb_name = util:: replace_suffix ( & info. name , & idx) ;
732
+
733
+ let syn_field =
734
+ new_syn_field ( nb_name. to_snake_case_ident ( Span :: call_site ( ) ) , ty. clone ( ) ) ;
735
+
729
736
cluster_expanded. push ( RegisterBlockField {
730
737
syn_field,
731
- description : info . description . as_ref ( ) . unwrap_or ( & info . name ) . into ( ) ,
738
+ description : description. clone ( ) ,
732
739
offset : info. address_offset + field_num as u32 * array_info. dim_increment ,
733
740
size : cluster_size,
734
741
accessors : None ,
@@ -750,12 +757,13 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
750
757
. properties
751
758
. size
752
759
. ok_or_else ( || anyhow ! ( "Register {} has no `size` field" , register. name) ) ?;
760
+ let description = register. description . clone ( ) . unwrap_or_default ( ) ;
753
761
754
762
match register {
755
763
Register :: Single ( info) => register_expanded. push ( RegisterBlockField {
756
764
syn_field : register_to_syn_field ( register, config. ignore_groups )
757
765
. with_context ( || "syn error occured" ) ?,
758
- description : info . description . clone ( ) . unwrap_or_default ( ) ,
766
+ description,
759
767
offset : info. address_offset ,
760
768
size : register_size,
761
769
accessors : None ,
@@ -781,21 +789,14 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
781
789
. filter ( |r| * r. start ( ) == 0 )
782
790
. is_some ( ) ;
783
791
784
- if sequential_indexes_from0 {
785
- register_expanded. push ( RegisterBlockField {
786
- syn_field : register_to_syn_field ( register, config. ignore_groups ) ?,
787
- description : info. description . clone ( ) . unwrap_or_default ( ) ,
788
- offset : info. address_offset ,
789
- size : register_size * array_info. dim ,
790
- accessors : None ,
791
- } ) ;
792
+ let accessors = if sequential_indexes_from0 {
793
+ None
792
794
} else {
793
795
let span = Span :: call_site ( ) ;
794
796
let mut accessors = TokenStream :: new ( ) ;
795
797
let nb_name = util:: replace_suffix ( & info. fullname ( config. ignore_groups ) , "" ) ;
796
798
let ty = name_to_wrapped_ty ( & nb_name) ?;
797
799
let nb_name_cs = nb_name. to_snake_case_ident ( span) ;
798
- let description = info. description . clone ( ) . unwrap_or_default ( ) ;
799
800
let info_name = info. fullname ( config. ignore_groups ) ;
800
801
for ( i, idx) in array_info. indexes ( ) . enumerate ( ) {
801
802
let idx_name =
@@ -814,22 +815,29 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
814
815
}
815
816
} ) ;
816
817
}
817
- register_expanded. push ( RegisterBlockField {
818
- syn_field : register_to_syn_field ( register, config. ignore_groups ) ?,
819
- description,
820
- offset : info. address_offset ,
821
- size : register_size * array_info. dim ,
822
- accessors : Some ( accessors) ,
823
- } ) ;
824
- }
818
+ Some ( accessors)
819
+ } ;
820
+ register_expanded. push ( RegisterBlockField {
821
+ syn_field : register_to_syn_field ( register, config. ignore_groups ) ?,
822
+ description,
823
+ offset : info. address_offset ,
824
+ size : register_size * array_info. dim ,
825
+ accessors,
826
+ } ) ;
825
827
} else {
826
- for ( field_num, syn_field) in expand_svd_register ( register, config. ignore_groups ) ?
827
- . into_iter ( )
828
- . enumerate ( )
829
- {
828
+ let info_name = info. fullname ( config. ignore_groups ) ;
829
+ let ty_name = util:: replace_suffix ( & info_name, "" ) ;
830
+ let ty = name_to_wrapped_ty ( & ty_name) ?;
831
+
832
+ for ( field_num, idx) in array_info. indexes ( ) . enumerate ( ) {
833
+ let nb_name = util:: replace_suffix ( & info_name, & idx) ;
834
+
835
+ let syn_field =
836
+ new_syn_field ( nb_name. to_snake_case_ident ( Span :: call_site ( ) ) , ty. clone ( ) ) ;
837
+
830
838
register_expanded. push ( RegisterBlockField {
831
839
syn_field,
832
- description : info . description . clone ( ) . unwrap_or_default ( ) ,
840
+ description : description. clone ( ) ,
833
841
offset : info. address_offset + field_num as u32 * array_info. dim_increment ,
834
842
size : register_size,
835
843
accessors : None ,
@@ -922,29 +930,6 @@ fn cluster_block(
922
930
} )
923
931
}
924
932
925
- /// Takes a svd::Register which may be a register array, and turn in into
926
- /// a list of syn::Field where the register arrays have been expanded.
927
- fn expand_svd_register ( register : & Register , ignore_group : bool ) -> Result < Vec < syn:: Field > > {
928
- if let Register :: Array ( info, array_info) = register {
929
- let ty_name = util:: replace_suffix ( & info. fullname ( ignore_group) , "" ) ;
930
-
931
- let mut out = vec ! [ ] ;
932
- for idx in array_info. indexes ( ) {
933
- let nb_name = util:: replace_suffix ( & info. fullname ( ignore_group) , & idx) ;
934
-
935
- let ty = name_to_wrapped_ty ( & ty_name) ?;
936
-
937
- out. push ( new_syn_field (
938
- nb_name. to_snake_case_ident ( Span :: call_site ( ) ) ,
939
- ty,
940
- ) ) ;
941
- }
942
- Ok ( out)
943
- } else {
944
- Ok ( vec ! [ register_to_syn_field( register, ignore_group) ?] )
945
- }
946
- }
947
-
948
933
/// Convert a parsed `Register` into its `Field` equivalent
949
934
fn register_to_syn_field ( register : & Register , ignore_group : bool ) -> Result < syn:: Field > {
950
935
Ok ( match register {
@@ -992,29 +977,6 @@ fn array_proxy(
992
977
} )
993
978
}
994
979
995
- /// Takes a svd::Cluster which may contain a register array, and turn it into
996
- /// a list of syn::Field where the register arrays have been expanded.
997
- fn expand_svd_cluster ( cluster : & Cluster ) -> Result < Vec < syn:: Field > , syn:: Error > {
998
- if let Cluster :: Array ( info, array_info) = cluster {
999
- let ty_name = util:: replace_suffix ( & info. name , "" ) ;
1000
-
1001
- let mut out = vec ! [ ] ;
1002
- for idx in array_info. indexes ( ) {
1003
- let nb_name = util:: replace_suffix ( & info. name , & idx) ;
1004
-
1005
- let ty = name_to_ty ( & ty_name) ?;
1006
-
1007
- out. push ( new_syn_field (
1008
- nb_name. to_snake_case_ident ( Span :: call_site ( ) ) ,
1009
- ty,
1010
- ) ) ;
1011
- }
1012
- Ok ( out)
1013
- } else {
1014
- Ok ( vec ! [ cluster_to_syn_field( cluster) ?] )
1015
- }
1016
- }
1017
-
1018
980
/// Convert a parsed `Cluster` into its `Field` equivalent
1019
981
fn cluster_to_syn_field ( cluster : & Cluster ) -> Result < syn:: Field , syn:: Error > {
1020
982
Ok ( match cluster {
0 commit comments