Skip to content

Commit 9df2cef

Browse files
committed
fix parentheses
1 parent 9e62f55 commit 9df2cef

File tree

2 files changed

+58
-27
lines changed

2 files changed

+58
-27
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
77

88
## [Unreleased]
99

10+
- Fixed parentheses in RegisterBlock field accessors
1011
- Check cluster size, add `max_cluster_size` option
1112

1213
## [v0.25.0] - 2022-08-02

src/generate/peripheral.rs

Lines changed: 57 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -222,13 +222,40 @@ pub fn render(p_original: &Peripheral, index: &Index, config: &Config) -> Result
222222
Ok(out)
223223
}
224224

225+
#[derive(Clone, Debug)]
226+
pub struct ArrayAccessor {
227+
pub doc: String,
228+
pub name: Ident,
229+
pub ty: syn::Type,
230+
pub basename: Ident,
231+
pub i: syn::LitInt,
232+
}
233+
234+
impl ArrayAccessor {
235+
pub fn to_tokens(&self, method: bool) -> TokenStream {
236+
let parens = method.then(|| quote! {()});
237+
let doc = &self.doc;
238+
let name = &self.name;
239+
let ty = &self.ty;
240+
let basename = &self.basename;
241+
let i = &self.i;
242+
quote! {
243+
#[doc = #doc]
244+
#[inline(always)]
245+
pub fn #name(&self) -> &#ty {
246+
&self.#basename#parens[#i]
247+
}
248+
}
249+
}
250+
}
251+
225252
#[derive(Clone, Debug)]
226253
struct RegisterBlockField {
227254
syn_field: syn::Field,
228255
description: String,
229256
offset: u32,
230257
size: u32,
231-
accessors: Option<TokenStream>,
258+
accessors: Vec<ArrayAccessor>,
232259
}
233260

234261
#[derive(Clone, Debug)]
@@ -471,9 +498,6 @@ fn register_or_cluster_block(
471498

472499
for reg_block_field in &ercs_expanded {
473500
regions.add(reg_block_field)?;
474-
if let Some(ts) = &reg_block_field.accessors {
475-
accessors.extend(ts.clone());
476-
}
477501
}
478502

479503
// We need to compute the idents of each register/union block first to make sure no conflicts exists.
@@ -524,6 +548,12 @@ fn register_or_cluster_block(
524548
reg_block_field.syn_field.to_tokens(&mut region_rbfs);
525549
Punct::new(',', Spacing::Alone).to_tokens(&mut region_rbfs);
526550
}
551+
accessors.extend(
552+
reg_block_field
553+
.accessors
554+
.iter()
555+
.map(|a| a.to_tokens(is_region_a_union)),
556+
);
527557
}
528558

529559
if !is_region_a_union {
@@ -692,7 +722,7 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
692722
description,
693723
offset: info.address_offset,
694724
size: cluster_size,
695-
accessors: None,
725+
accessors: Vec::new(),
696726
})
697727
}
698728
Cluster::Array(info, array_info) => {
@@ -726,10 +756,10 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
726756

727757
if array_convertible {
728758
let accessors = if sequential_indexes_from0 {
729-
None
759+
Vec::new()
730760
} else {
731761
let span = Span::call_site();
732-
let mut accessors = TokenStream::new();
762+
let mut accessors = Vec::new();
733763
let nb_name_cs = ty_name.to_snake_case_ident(span);
734764
for (i, idx) in array_info.indexes().enumerate() {
735765
let idx_name =
@@ -740,15 +770,15 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
740770
&description,
741771
);
742772
let i = unsuffixed(i as _);
743-
accessors.extend(quote! {
744-
#[doc = #comment]
745-
#[inline(always)]
746-
pub fn #idx_name(&self) -> &#ty {
747-
&self.#nb_name_cs[#i]
748-
}
773+
accessors.push(ArrayAccessor {
774+
doc: comment,
775+
name: idx_name,
776+
ty: ty.clone(),
777+
basename: nb_name_cs.clone(),
778+
i,
749779
});
750780
}
751-
Some(accessors)
781+
accessors
752782
};
753783
let array_ty = new_syn_array(ty, array_info.dim);
754784
cluster_expanded.push(RegisterBlockField {
@@ -772,7 +802,7 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
772802
description: info.description.as_ref().unwrap_or(&info.name).into(),
773803
offset: info.address_offset,
774804
size: 0,
775-
accessors: None,
805+
accessors: Vec::new(),
776806
});
777807
} else {
778808
for (field_num, idx) in array_info.indexes().enumerate() {
@@ -785,7 +815,7 @@ fn expand_cluster(cluster: &Cluster, config: &Config) -> Result<Vec<RegisterBloc
785815
description: description.clone(),
786816
offset: info.address_offset + field_num as u32 * array_info.dim_increment,
787817
size: cluster_size,
788-
accessors: None,
818+
accessors: Vec::new(),
789819
});
790820
}
791821
}
@@ -822,7 +852,7 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
822852
description,
823853
offset: info.address_offset,
824854
size: register_size,
825-
accessors: None,
855+
accessors: Vec::new(),
826856
})
827857
}
828858
Register::Array(info, array_info) => {
@@ -847,10 +877,10 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
847877
.is_some();
848878

849879
let accessors = if sequential_indexes_from0 {
850-
None
880+
Vec::new()
851881
} else {
852882
let span = Span::call_site();
853-
let mut accessors = TokenStream::new();
883+
let mut accessors = Vec::new();
854884
let nb_name_cs = ty_name.to_snake_case_ident(span);
855885
for (i, idx) in array_info.indexes().enumerate() {
856886
let idx_name =
@@ -861,15 +891,15 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
861891
&description,
862892
);
863893
let i = unsuffixed(i as _);
864-
accessors.extend(quote! {
865-
#[doc = #comment]
866-
#[inline(always)]
867-
pub fn #idx_name(&self) -> &#ty {
868-
&self.#nb_name_cs[#i]
869-
}
894+
accessors.push(ArrayAccessor {
895+
doc: comment,
896+
name: idx_name,
897+
ty: ty.clone(),
898+
basename: nb_name_cs.clone(),
899+
i,
870900
});
871901
}
872-
Some(accessors)
902+
accessors
873903
};
874904
let array_ty = new_syn_array(ty, array_info.dim);
875905
let syn_field =
@@ -892,7 +922,7 @@ fn expand_register(register: &Register, config: &Config) -> Result<Vec<RegisterB
892922
description: description.clone(),
893923
offset: info.address_offset + field_num as u32 * array_info.dim_increment,
894924
size: register_size,
895-
accessors: None,
925+
accessors: Vec::new(),
896926
});
897927
}
898928
}

0 commit comments

Comments
 (0)