@@ -442,13 +442,13 @@ fn register_or_cluster_block(
442442 ercs : & [ RegisterCluster ] ,
443443 defs : & RegisterProperties ,
444444 name : Option < & str > ,
445- _config : & Config ,
445+ config : & Config ,
446446) -> Result < TokenStream > {
447447 let mut rbfs = TokenStream :: new ( ) ;
448448 let mut accessors = TokenStream :: new ( ) ;
449449 let mut have_accessors = false ;
450450
451- let ercs_expanded = expand ( ercs, defs, name) ?;
451+ let ercs_expanded = expand ( ercs, defs, name, config ) ?;
452452
453453 // Locate conflicting regions; we'll need to use unions to represent them.
454454 let mut regions = FieldRegions :: default ( ) ;
@@ -576,13 +576,14 @@ fn expand(
576576 ercs : & [ RegisterCluster ] ,
577577 defs : & RegisterProperties ,
578578 name : Option < & str > ,
579+ config : & Config ,
579580) -> Result < Vec < RegisterBlockField > > {
580581 let mut ercs_expanded = vec ! [ ] ;
581582
582583 for erc in ercs {
583584 ercs_expanded. extend ( match & erc {
584- RegisterCluster :: Register ( register) => expand_register ( register, defs, name) ?,
585- RegisterCluster :: Cluster ( cluster) => expand_cluster ( cluster, defs, name) ?,
585+ RegisterCluster :: Register ( register) => expand_register ( register, defs, name, config ) ?,
586+ RegisterCluster :: Cluster ( cluster) => expand_cluster ( cluster, defs, name, config ) ?,
586587 } ) ;
587588 }
588589
@@ -593,21 +594,25 @@ fn expand(
593594
594595/// Recursively calculate the size of a cluster. A cluster's size is the maximum
595596/// end position of its recursive children.
596- fn cluster_size_in_bits ( info : & ClusterInfo , defs : & RegisterProperties ) -> Result < u32 > {
597+ fn cluster_size_in_bits (
598+ info : & ClusterInfo ,
599+ defs : & RegisterProperties ,
600+ config : & Config ,
601+ ) -> Result < u32 > {
597602 let mut size = 0 ;
598603
599604 for c in & info. children {
600605 let end = match c {
601606 RegisterCluster :: Register ( reg) => {
602- let reg_size: u32 = expand_register ( reg, defs, None ) ?
607+ let reg_size: u32 = expand_register ( reg, defs, None , config ) ?
603608 . iter ( )
604609 . map ( |rbf| rbf. size )
605610 . sum ( ) ;
606611
607612 ( reg. address_offset * BITS_PER_BYTE ) + reg_size
608613 }
609614 RegisterCluster :: Cluster ( clust) => {
610- ( clust. address_offset * BITS_PER_BYTE ) + cluster_size_in_bits ( clust, defs) ?
615+ ( clust. address_offset * BITS_PER_BYTE ) + cluster_size_in_bits ( clust, defs, config ) ?
611616 }
612617 } ;
613618
@@ -621,12 +626,13 @@ fn expand_cluster(
621626 cluster : & Cluster ,
622627 defs : & RegisterProperties ,
623628 name : Option < & str > ,
629+ config : & Config ,
624630) -> Result < Vec < RegisterBlockField > > {
625631 let mut cluster_expanded = vec ! [ ] ;
626632
627633 let defs = cluster. default_register_properties . derive_from ( defs) ;
628634
629- let cluster_size = cluster_size_in_bits ( cluster, & defs)
635+ let cluster_size = cluster_size_in_bits ( cluster, & defs, config )
630636 . with_context ( || format ! ( "Cluster {} has no determinable `size` field" , cluster. name) ) ?;
631637
632638 match cluster {
@@ -678,6 +684,7 @@ fn expand_register(
678684 register : & Register ,
679685 defs : & RegisterProperties ,
680686 name : Option < & str > ,
687+ config : & Config ,
681688) -> Result < Vec < RegisterBlockField > > {
682689 let mut register_expanded = vec ! [ ] ;
683690
@@ -688,7 +695,7 @@ fn expand_register(
688695
689696 match register {
690697 Register :: Single ( info) => register_expanded. push ( RegisterBlockField {
691- field : convert_svd_register ( register, name) ?,
698+ field : convert_svd_register ( register, name, config . ignore_groups ) ?,
692699 description : info. description . clone ( ) . unwrap_or_default ( ) ,
693700 offset : info. address_offset ,
694701 size : register_size,
@@ -708,13 +715,16 @@ fn expand_register(
708715
709716 if array_convertible {
710717 register_expanded. push ( RegisterBlockField {
711- field : convert_svd_register ( & register, name) ?,
718+ field : convert_svd_register ( & register, name, config . ignore_groups ) ?,
712719 description : info. description . clone ( ) . unwrap_or_default ( ) ,
713720 offset : info. address_offset ,
714721 size : register_size * array_info. dim ,
715722 } ) ;
716723 } else {
717- for ( field_num, field) in expand_svd_register ( register, name) ?. iter ( ) . enumerate ( ) {
724+ for ( field_num, field) in expand_svd_register ( register, name, config. ignore_groups ) ?
725+ . iter ( )
726+ . enumerate ( )
727+ {
718728 register_expanded. push ( RegisterBlockField {
719729 field : field. clone ( ) ,
720730 description : info. description . clone ( ) . unwrap_or_default ( ) ,
@@ -792,11 +802,12 @@ fn cluster_block(
792802fn expand_svd_register (
793803 register : & Register ,
794804 name : Option < & str > ,
805+ ignore_group : bool ,
795806) -> Result < Vec < syn:: Field > , syn:: Error > {
796807 let mut out = vec ! [ ] ;
797808
798809 match register {
799- Register :: Single ( _info) => out. push ( convert_svd_register ( register, name) ?) ,
810+ Register :: Single ( _info) => out. push ( convert_svd_register ( register, name, ignore_group ) ?) ,
800811 Register :: Array ( info, array_info) => {
801812 let indices = array_info
802813 . dim_index
@@ -810,10 +821,10 @@ fn expand_svd_register(
810821 )
811822 } ) ;
812823
813- let ty_name = util:: replace_suffix ( & info. fullname ( ) , "" ) ;
824+ let ty_name = util:: replace_suffix ( & info. fullname ( ignore_group ) , "" ) ;
814825
815826 for ( idx, _i) in indices. iter ( ) . zip ( 0 ..) {
816- let nb_name = util:: replace_suffix ( & info. fullname ( ) , idx) ;
827+ let nb_name = util:: replace_suffix ( & info. fullname ( ignore_group ) , idx) ;
817828
818829 let ty = name_to_wrapped_ty ( & ty_name, name) ?;
819830
@@ -825,17 +836,21 @@ fn expand_svd_register(
825836}
826837
827838/// Convert a parsed `Register` into its `Field` equivalent
828- fn convert_svd_register ( register : & Register , name : Option < & str > ) -> Result < syn:: Field , syn:: Error > {
839+ fn convert_svd_register (
840+ register : & Register ,
841+ name : Option < & str > ,
842+ ignore_group : bool ,
843+ ) -> Result < syn:: Field , syn:: Error > {
829844 Ok ( match register {
830845 Register :: Single ( info) => {
831- let info_name = info. fullname ( ) ;
846+ let info_name = info. fullname ( ignore_group ) ;
832847 new_syn_field (
833848 & info_name. to_sanitized_snake_case ( ) ,
834849 name_to_wrapped_ty ( & info_name, name) ?,
835850 )
836851 }
837852 Register :: Array ( info, array_info) => {
838- let nb_name = util:: replace_suffix ( & info. fullname ( ) , "" ) ;
853+ let nb_name = util:: replace_suffix ( & info. fullname ( ignore_group ) , "" ) ;
839854 let ty = syn:: Type :: Array ( parse_str :: < syn:: TypeArray > ( & format ! (
840855 "[{};{}]" ,
841856 name_to_wrapped_ty_str( & nb_name, name) ,
0 commit comments