Skip to content

Commit abe99ed

Browse files
committed
accessors everywhere
1 parent 01255c8 commit abe99ed

File tree

1 file changed

+56
-31
lines changed

1 file changed

+56
-31
lines changed

src/generate/peripheral.rs

Lines changed: 56 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -239,14 +239,14 @@ impl ToTokens for Accessor {
239239
#[derive(Clone, Debug)]
240240
pub struct FieldAccessor {
241241
pub doc: String,
242-
pub name: Ident,
242+
pub name: String,
243243
pub ty: syn::Type,
244244
}
245245

246246
impl ToTokens for FieldAccessor {
247247
fn to_tokens(&self, tokens: &mut TokenStream) {
248248
let doc = &self.doc;
249-
let name = &self.name;
249+
let name = &self.name.to_snake_case_ident(Span::call_site());
250250
let ty = &self.ty;
251251
quote! {
252252
#[doc = #doc]
@@ -764,13 +764,18 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
764764

765765
match cluster {
766766
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());
768769
cluster_expanded.push(RegisterBlockField {
769770
syn_field,
770-
description,
771+
description: description.clone(),
771772
offset: info.address_offset,
772773
size: cluster_size,
773-
accessors: Vec::new(),
774+
accessors: vec![Accessor::Field(FieldAccessor {
775+
doc: description,
776+
name: ty_name,
777+
ty,
778+
})],
774779
})
775780
}
776781
Cluster::Array(info, array_info) => {
@@ -803,11 +808,14 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
803808
let array_convertible = sequential_addresses && convert_list;
804809

805810
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 {
809818
let span = Span::call_site();
810-
let mut accessors = Vec::new();
811819
let nb_name_cs = ty_name.to_snake_case_ident(span);
812820
for (i, idx) in array_info.indexes().enumerate() {
813821
let idx_name =
@@ -826,14 +834,11 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
826834
i,
827835
}));
828836
}
829-
accessors
830837
};
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);
832840
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,
837842
description,
838843
offset: info.address_offset,
839844
size: cluster_size * array_info.dim,
@@ -842,15 +847,19 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
842847
} else if sequential_indexes_from0 && config.const_generic {
843848
// Include a ZST ArrayProxy giving indexed access to the
844849
// elements.
845-
let ap_path = array_proxy_type(ty, array_info);
850+
let ap_path = array_proxy_type(ty.clone(), array_info);
846851
let syn_field =
847852
new_syn_field(ty_name.to_snake_case_ident(Span::call_site()), ap_path);
848853
cluster_expanded.push(RegisterBlockField {
849854
syn_field,
850855
description: info.description.as_ref().unwrap_or(&info.name).into(),
851856
offset: info.address_offset,
852857
size: 0,
853-
accessors: Vec::new(),
858+
accessors: vec![Accessor::Field(FieldAccessor {
859+
doc: description,
860+
name: ty_name,
861+
ty,
862+
})],
854863
});
855864
} else {
856865
for (field_num, idx) in array_info.indexes().enumerate() {
@@ -863,7 +872,11 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
863872
description: description.clone(),
864873
offset: info.address_offset + field_num as u32 * array_info.dim_increment,
865874
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+
})],
867880
});
868881
}
869882
}
@@ -894,13 +907,18 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
894907

895908
match register {
896909
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());
898912
register_expanded.push(RegisterBlockField {
899913
syn_field,
900-
description,
914+
description: description.clone(),
901915
offset: info.address_offset,
902916
size: register_size,
903-
accessors: Vec::new(),
917+
accessors: vec![Accessor::Field(FieldAccessor {
918+
doc: description,
919+
name: ty_name,
920+
ty,
921+
})],
904922
})
905923
}
906924
Register::Array(info, array_info) => {
@@ -923,12 +941,15 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
923941
.indexes_as_range()
924942
.filter(|r| *r.start() == 0)
925943
.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 {
930952
let span = Span::call_site();
931-
let mut accessors = Vec::new();
932953
let nb_name_cs = ty_name.to_snake_case_ident(span);
933954
for (i, idx) in array_info.indexes().enumerate() {
934955
let idx_name =
@@ -947,11 +968,11 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
947968
i,
948969
}));
949970
}
950-
accessors
951971
};
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+
);
955976
register_expanded.push(RegisterBlockField {
956977
syn_field,
957978
description,
@@ -970,7 +991,11 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
970991
description: description.clone(),
971992
offset: info.address_offset + field_num as u32 * array_info.dim_increment,
972993
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+
})],
974999
});
9751000
}
9761001
}

0 commit comments

Comments
 (0)