@@ -650,11 +650,16 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
650650
651651 let cluster_size = cluster_info_size_in_bits ( cluster, config)
652652 . 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 ( ) ;
653658
654659 match cluster {
655660 Cluster :: Single ( info) => cluster_expanded. push ( RegisterBlockField {
656661 syn_field : cluster_to_syn_field ( cluster) ?,
657- description : info . description . as_ref ( ) . unwrap_or ( & info . name ) . into ( ) ,
662+ description,
658663 offset : info. address_offset ,
659664 size : cluster_size,
660665 accessors : None ,
@@ -680,28 +685,21 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
680685 let array_convertible = sequential_addresses && convert_list;
681686
682687 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
691690 } else {
692691 let span = Span :: call_site ( ) ;
693692 let mut accessors = TokenStream :: new ( ) ;
694693 let nb_name = util:: replace_suffix ( & info. name , "" ) ;
695694 let ty = name_to_ty ( & nb_name) ?;
696695 let nb_name_cs = nb_name. to_snake_case_ident ( span) ;
697- let description = info. description . as_ref ( ) . unwrap_or ( & info. name ) ;
698696 for ( i, idx) in array_info. indexes ( ) . enumerate ( ) {
699697 let idx_name =
700698 util:: replace_suffix ( & info. name , & idx) . to_snake_case_ident ( span) ;
701699 let comment = make_comment (
702700 cluster_size,
703701 info. address_offset + ( i as u32 ) * cluster_size / 8 ,
704- description,
702+ & description,
705703 ) ;
706704 let i = unsuffixed ( i as _ ) ;
707705 accessors. extend ( quote ! {
@@ -712,23 +710,32 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
712710 }
713711 } ) ;
714712 }
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+ } ) ;
723722 } else if sequential_indexes_from0 && config. const_generic {
724723 // Include a ZST ArrayProxy giving indexed access to the
725724 // elements.
726725 cluster_expanded. push ( array_proxy ( info, array_info) ?) ;
727726 } 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+
729736 cluster_expanded. push ( RegisterBlockField {
730737 syn_field,
731- description : info . description . as_ref ( ) . unwrap_or ( & info . name ) . into ( ) ,
738+ description : description. clone ( ) ,
732739 offset : info. address_offset + field_num as u32 * array_info. dim_increment ,
733740 size : cluster_size,
734741 accessors : None ,
@@ -750,12 +757,13 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
750757 . properties
751758 . size
752759 . ok_or_else ( || anyhow ! ( "Register {} has no `size` field" , register. name) ) ?;
760+ let description = register. description . clone ( ) . unwrap_or_default ( ) ;
753761
754762 match register {
755763 Register :: Single ( info) => register_expanded. push ( RegisterBlockField {
756764 syn_field : register_to_syn_field ( register, config. ignore_groups )
757765 . with_context ( || "syn error occured" ) ?,
758- description : info . description . clone ( ) . unwrap_or_default ( ) ,
766+ description,
759767 offset : info. address_offset ,
760768 size : register_size,
761769 accessors : None ,
@@ -781,21 +789,14 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
781789 . filter ( |r| * r. start ( ) == 0 )
782790 . is_some ( ) ;
783791
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
792794 } else {
793795 let span = Span :: call_site ( ) ;
794796 let mut accessors = TokenStream :: new ( ) ;
795797 let nb_name = util:: replace_suffix ( & info. fullname ( config. ignore_groups ) , "" ) ;
796798 let ty = name_to_wrapped_ty ( & nb_name) ?;
797799 let nb_name_cs = nb_name. to_snake_case_ident ( span) ;
798- let description = info. description . clone ( ) . unwrap_or_default ( ) ;
799800 let info_name = info. fullname ( config. ignore_groups ) ;
800801 for ( i, idx) in array_info. indexes ( ) . enumerate ( ) {
801802 let idx_name =
@@ -814,22 +815,29 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
814815 }
815816 } ) ;
816817 }
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+ } ) ;
825827 } 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+
830838 register_expanded. push ( RegisterBlockField {
831839 syn_field,
832- description : info . description . clone ( ) . unwrap_or_default ( ) ,
840+ description : description. clone ( ) ,
833841 offset : info. address_offset + field_num as u32 * array_info. dim_increment ,
834842 size : register_size,
835843 accessors : None ,
@@ -922,29 +930,6 @@ fn cluster_block(
922930 } )
923931}
924932
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-
948933/// Convert a parsed `Register` into its `Field` equivalent
949934fn register_to_syn_field ( register : & Register , ignore_group : bool ) -> Result < syn:: Field > {
950935 Ok ( match register {
@@ -992,29 +977,6 @@ fn array_proxy(
992977 } )
993978}
994979
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-
1018980/// Convert a parsed `Cluster` into its `Field` equivalent
1019981fn cluster_to_syn_field ( cluster : & Cluster ) -> Result < syn:: Field , syn:: Error > {
1020982 Ok ( match cluster {
0 commit comments