@@ -239,14 +239,14 @@ impl ToTokens for Accessor {
239
239
#[ derive( Clone , Debug ) ]
240
240
pub struct FieldAccessor {
241
241
pub doc : String ,
242
- pub name : Ident ,
242
+ pub name : String ,
243
243
pub ty : syn:: Type ,
244
244
}
245
245
246
246
impl ToTokens for FieldAccessor {
247
247
fn to_tokens ( & self , tokens : & mut TokenStream ) {
248
248
let doc = & self . doc ;
249
- let name = & self . name ;
249
+ let name = & self . name . to_snake_case_ident ( Span :: call_site ( ) ) ;
250
250
let ty = & self . ty ;
251
251
quote ! {
252
252
#[ doc = #doc]
@@ -764,13 +764,18 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
764
764
765
765
match cluster {
766
766
Cluster :: Single ( info) => {
767
- let syn_field = new_syn_field ( info. name . to_snake_case_ident ( Span :: call_site ( ) ) , ty) ;
767
+ let syn_field =
768
+ new_syn_field ( info. name . to_snake_case_ident ( Span :: call_site ( ) ) , ty. clone ( ) ) ;
768
769
cluster_expanded. push ( RegisterBlockField {
769
770
syn_field,
770
- description,
771
+ description : description . clone ( ) ,
771
772
offset : info. address_offset ,
772
773
size : cluster_size,
773
- accessors : Vec :: new ( ) ,
774
+ accessors : vec ! [ Accessor :: Field ( FieldAccessor {
775
+ doc: description,
776
+ name: ty_name,
777
+ ty,
778
+ } ) ] ,
774
779
} )
775
780
}
776
781
Cluster :: Array ( info, array_info) => {
@@ -803,11 +808,14 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
803
808
let array_convertible = sequential_addresses && convert_list;
804
809
805
810
if array_convertible {
806
- let accessors = if sequential_indexes_from0 {
807
- Vec :: new ( )
808
- } else {
811
+ let array_ty = new_syn_array ( ty. clone ( ) , array_info. dim ) ;
812
+ let mut accessors = vec ! [ Accessor :: Field ( FieldAccessor {
813
+ doc: description. clone( ) ,
814
+ name: ty_name. clone( ) ,
815
+ ty: array_ty. clone( ) ,
816
+ } ) ] ;
817
+ if !sequential_indexes_from0 {
809
818
let span = Span :: call_site ( ) ;
810
- let mut accessors = Vec :: new ( ) ;
811
819
let nb_name_cs = ty_name. to_snake_case_ident ( span) ;
812
820
for ( i, idx) in array_info. indexes ( ) . enumerate ( ) {
813
821
let idx_name =
@@ -826,14 +834,11 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
826
834
i,
827
835
} ) ) ;
828
836
}
829
- accessors
830
837
} ;
831
- let array_ty = new_syn_array ( ty, array_info. dim ) ;
838
+ let syn_field =
839
+ new_syn_field ( ty_name. to_snake_case_ident ( Span :: call_site ( ) ) , array_ty) ;
832
840
cluster_expanded. push ( RegisterBlockField {
833
- syn_field : new_syn_field (
834
- ty_name. to_snake_case_ident ( Span :: call_site ( ) ) ,
835
- array_ty,
836
- ) ,
841
+ syn_field,
837
842
description,
838
843
offset : info. address_offset ,
839
844
size : cluster_size * array_info. dim ,
@@ -842,15 +847,19 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
842
847
} else if sequential_indexes_from0 && config. const_generic {
843
848
// Include a ZST ArrayProxy giving indexed access to the
844
849
// elements.
845
- let ap_path = array_proxy_type ( ty, array_info) ;
850
+ let ap_path = array_proxy_type ( ty. clone ( ) , array_info) ;
846
851
let syn_field =
847
852
new_syn_field ( ty_name. to_snake_case_ident ( Span :: call_site ( ) ) , ap_path) ;
848
853
cluster_expanded. push ( RegisterBlockField {
849
854
syn_field,
850
855
description : info. description . as_ref ( ) . unwrap_or ( & info. name ) . into ( ) ,
851
856
offset : info. address_offset ,
852
857
size : 0 ,
853
- accessors : Vec :: new ( ) ,
858
+ accessors : vec ! [ Accessor :: Field ( FieldAccessor {
859
+ doc: description,
860
+ name: ty_name,
861
+ ty,
862
+ } ) ] ,
854
863
} ) ;
855
864
} else {
856
865
for ( field_num, idx) in array_info. indexes ( ) . enumerate ( ) {
@@ -863,7 +872,11 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
863
872
description : description. clone ( ) ,
864
873
offset : info. address_offset + field_num as u32 * array_info. dim_increment ,
865
874
size : cluster_size,
866
- accessors : Vec :: new ( ) ,
875
+ accessors : vec ! [ Accessor :: Field ( FieldAccessor {
876
+ doc: description. clone( ) ,
877
+ name: nb_name. clone( ) ,
878
+ ty: ty. clone( ) ,
879
+ } ) ] ,
867
880
} ) ;
868
881
}
869
882
}
@@ -894,13 +907,18 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
894
907
895
908
match register {
896
909
Register :: Single ( info) => {
897
- let syn_field = new_syn_field ( ty_name. to_snake_case_ident ( Span :: call_site ( ) ) , ty) ;
910
+ let syn_field =
911
+ new_syn_field ( ty_name. to_snake_case_ident ( Span :: call_site ( ) ) , ty. clone ( ) ) ;
898
912
register_expanded. push ( RegisterBlockField {
899
913
syn_field,
900
- description,
914
+ description : description . clone ( ) ,
901
915
offset : info. address_offset ,
902
916
size : register_size,
903
- accessors : Vec :: new ( ) ,
917
+ accessors : vec ! [ Accessor :: Field ( FieldAccessor {
918
+ doc: description,
919
+ name: ty_name,
920
+ ty,
921
+ } ) ] ,
904
922
} )
905
923
}
906
924
Register :: Array ( info, array_info) => {
@@ -923,12 +941,15 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
923
941
. indexes_as_range ( )
924
942
. filter ( |r| * r. start ( ) == 0 )
925
943
. is_some ( ) ;
926
-
927
- let accessors = if sequential_indexes_from0 {
928
- Vec :: new ( )
929
- } else {
944
+ let array_ty = new_syn_array ( ty. clone ( ) , array_info. dim ) ;
945
+ let mut accessors = vec ! [ Accessor :: Field ( FieldAccessor {
946
+ doc: description. clone( ) ,
947
+ name: ty_name. clone( ) ,
948
+ ty: array_ty. clone( ) ,
949
+ } ) ] ;
950
+
951
+ if !sequential_indexes_from0 {
930
952
let span = Span :: call_site ( ) ;
931
- let mut accessors = Vec :: new ( ) ;
932
953
let nb_name_cs = ty_name. to_snake_case_ident ( span) ;
933
954
for ( i, idx) in array_info. indexes ( ) . enumerate ( ) {
934
955
let idx_name =
@@ -947,11 +968,11 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
947
968
i,
948
969
} ) ) ;
949
970
}
950
- accessors
951
971
} ;
952
- let array_ty = new_syn_array ( ty, array_info. dim ) ;
953
- let syn_field =
954
- new_syn_field ( ty_name. to_snake_case_ident ( Span :: call_site ( ) ) , array_ty) ;
972
+ let syn_field = new_syn_field (
973
+ ty_name. to_snake_case_ident ( Span :: call_site ( ) ) ,
974
+ array_ty. clone ( ) ,
975
+ ) ;
955
976
register_expanded. push ( RegisterBlockField {
956
977
syn_field,
957
978
description,
@@ -970,7 +991,11 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
970
991
description : description. clone ( ) ,
971
992
offset : info. address_offset + field_num as u32 * array_info. dim_increment ,
972
993
size : register_size,
973
- accessors : Vec :: new ( ) ,
994
+ accessors : vec ! [ Accessor :: Field ( FieldAccessor {
995
+ doc: description. clone( ) ,
996
+ name: nb_name. clone( ) ,
997
+ ty: ty. clone( ) ,
998
+ } ) ] ,
974
999
} ) ;
975
1000
}
976
1001
}
0 commit comments