Skip to content

Commit 7d3cdf6

Browse files
bors[bot]burrbull
andauthored
Merge #425
425: replace_suffix r=therealprof a=burrbull Part of #400 Co-authored-by: Andrey Zgarbul <[email protected]>
2 parents 0b04c12 + e496130 commit 7d3cdf6

File tree

3 files changed

+47
-90
lines changed

3 files changed

+47
-90
lines changed

src/generate/peripheral.rs

Lines changed: 17 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -179,15 +179,9 @@ pub fn render(
179179
pub mod #name_sc #open
180180
});
181181

182-
for item in mod_items {
183-
out.extend(quote! {
184-
#item
185-
});
186-
}
182+
out.extend(mod_items);
187183

188-
out.extend(quote! {
189-
#close
190-
});
184+
close.to_tokens(&mut out);
191185

192186
Ok(out)
193187
}
@@ -730,12 +724,13 @@ fn cluster_block(
730724
util::escape_brackets(util::respace(c.description.as_ref().unwrap_or(&c.name)).as_ref());
731725

732726
// Generate the register block.
733-
let mod_name = match c {
734-
Cluster::Single(info) => &info.name,
735-
Cluster::Array(info, _ai) => &info.name,
736-
}
737-
.replace("[%s]", "")
738-
.replace("%s", "");
727+
let mod_name = util::replace_suffix(
728+
match c {
729+
Cluster::Single(info) => &info.name,
730+
Cluster::Array(info, _ai) => &info.name,
731+
},
732+
"",
733+
);
739734
let name_sc = Ident::new(&mod_name.to_sanitized_snake_case(), Span::call_site());
740735

741736
let defaults = c.default_register_properties.derive_from(defaults);
@@ -794,8 +789,6 @@ fn expand_svd_register(register: &Register, name: Option<&str>) -> Vec<syn::Fiel
794789
match register {
795790
Register::Single(_info) => out.push(convert_svd_register(register, name)),
796791
Register::Array(info, array_info) => {
797-
let has_brackets = info.name.contains("[%s]");
798-
799792
let indices = array_info
800793
.dim_index
801794
.as_ref()
@@ -808,18 +801,10 @@ fn expand_svd_register(register: &Register, name: Option<&str>) -> Vec<syn::Fiel
808801
)
809802
});
810803

811-
for (idx, _i) in indices.iter().zip(0..) {
812-
let nb_name = if has_brackets {
813-
info.name.replace("[%s]", idx)
814-
} else {
815-
info.name.replace("%s", idx)
816-
};
804+
let ty_name = util::replace_suffix(&info.name, "");
817805

818-
let ty_name = if has_brackets {
819-
info.name.replace("[%s]", "")
820-
} else {
821-
info.name.replace("%s", "")
822-
};
806+
for (idx, _i) in indices.iter().zip(0..) {
807+
let nb_name = util::replace_suffix(&info.name, idx);
823808

824809
let ty = name_to_ty(&ty_name, name);
825810

@@ -849,13 +834,7 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> syn::Field {
849834
syn::Type::Path(parse_str::<syn::TypePath>(&name_to_ty(&info.name, name)).unwrap()),
850835
),
851836
Register::Array(info, array_info) => {
852-
let has_brackets = info.name.contains("[%s]");
853-
854-
let nb_name = if has_brackets {
855-
info.name.replace("[%s]", "")
856-
} else {
857-
info.name.replace("%s", "")
858-
};
837+
let nb_name = util::replace_suffix(&info.name, "");
859838

860839
let ty = syn::Type::Array(
861840
parse_str::<syn::TypeArray>(&format!(
@@ -883,8 +862,6 @@ fn expand_svd_cluster(cluster: &Cluster) -> Vec<syn::Field> {
883862
match &cluster {
884863
Cluster::Single(_info) => out.push(convert_svd_cluster(cluster)),
885864
Cluster::Array(info, array_info) => {
886-
let has_brackets = info.name.contains("[%s]");
887-
888865
let indices = array_info
889866
.dim_index
890867
.as_ref()
@@ -897,18 +874,10 @@ fn expand_svd_cluster(cluster: &Cluster) -> Vec<syn::Field> {
897874
)
898875
});
899876

900-
for (idx, _i) in indices.iter().zip(0..) {
901-
let name = if has_brackets {
902-
info.name.replace("[%s]", idx)
903-
} else {
904-
info.name.replace("%s", idx)
905-
};
877+
let ty_name = util::replace_suffix(&info.name, "");
906878

907-
let ty_name = if has_brackets {
908-
info.name.replace("[%s]", "")
909-
} else {
910-
info.name.replace("%s", "")
911-
};
879+
for (idx, _i) in indices.iter().zip(0..) {
880+
let name = util::replace_suffix(&info.name, idx);
912881

913882
let ty = name_to_ty(&ty_name);
914883

@@ -929,13 +898,7 @@ fn convert_svd_cluster(cluster: &Cluster) -> syn::Field {
929898
),
930899
),
931900
Cluster::Array(info, array_info) => {
932-
let has_brackets = info.name.contains("[%s]");
933-
934-
let name = if has_brackets {
935-
info.name.replace("[%s]", "")
936-
} else {
937-
info.name.replace("%s", "")
938-
};
901+
let name = util::replace_suffix(&info.name, "");
939902

940903
let ty = syn::Type::Array(
941904
parse_str::<syn::TypeArray>(&format!(

src/generate/register.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::quote::ToTokens;
12
use crate::svd::{
23
Access, BitRange, EnumeratedValues, Field, Peripheral, Register, RegisterCluster,
34
RegisterProperties, Usage, WriteConstraint,
@@ -122,9 +123,7 @@ pub fn render(
122123

123124
mod_items.extend(r_impl_items);
124125

125-
mod_items.extend(quote! {
126-
#close
127-
});
126+
close.to_tokens(&mut mod_items);
128127
}
129128

130129
if can_write {
@@ -134,9 +133,7 @@ pub fn render(
134133

135134
mod_items.extend(w_impl_items);
136135

137-
mod_items.extend(quote! {
138-
#close
139-
});
136+
close.to_tokens(&mut mod_items);
140137
}
141138

142139
let mut out = TokenStream::new();

src/util.rs

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::borrow::Cow;
22

3-
use crate::quote::{ToTokens, TokenStreamExt};
3+
use crate::quote::ToTokens;
44
use crate::svd::{Access, Cluster, Register, RegisterCluster};
55
use inflections::Inflect;
66
use proc_macro2::{Ident, Literal, Span, TokenStream};
@@ -185,13 +185,15 @@ pub fn escape_brackets(s: &str) -> String {
185185
pub fn name_of(register: &Register) -> Cow<str> {
186186
match register {
187187
Register::Single(info) => Cow::from(&info.name),
188-
Register::Array(info, _) => {
189-
if info.name.contains("[%s]") {
190-
info.name.replace("[%s]", "").into()
191-
} else {
192-
info.name.replace("%s", "").into()
193-
}
194-
}
188+
Register::Array(info, _) => replace_suffix(&info.name, "").into(),
189+
}
190+
}
191+
192+
pub fn replace_suffix(name: &str, suffix: &str) -> String {
193+
if name.contains("[%s]") {
194+
name.replace("[%s]", suffix)
195+
} else {
196+
name.replace("%s", suffix)
195197
}
196198
}
197199

@@ -250,19 +252,12 @@ pub fn hex(n: u64) -> TokenStream {
250252

251253
/// Turns `n` into an unsuffixed token
252254
pub fn unsuffixed(n: u64) -> TokenStream {
253-
let mut t = TokenStream::new();
254-
t.append(Literal::u64_unsuffixed(n));
255-
t
255+
Literal::u64_unsuffixed(n).into_token_stream()
256256
}
257257

258258
pub fn unsuffixed_or_bool(n: u64, width: u32) -> TokenStream {
259259
if width == 1 {
260-
let mut t = TokenStream::new();
261-
t.append(Ident::new(
262-
if n == 0 { "false" } else { "true" },
263-
Span::call_site(),
264-
));
265-
t
260+
Ident::new(if n == 0 { "false" } else { "true" }, Span::call_site()).into_token_stream()
266261
} else {
267262
unsuffixed(n)
268263
}
@@ -275,19 +270,21 @@ pub trait U32Ext {
275270

276271
impl U32Ext for u32 {
277272
fn to_ty(&self) -> Result<Ident> {
278-
let span = Span::call_site();
279-
Ok(match *self {
280-
1 => Ident::new("bool", span),
281-
2..=8 => Ident::new("u8", span),
282-
9..=16 => Ident::new("u16", span),
283-
17..=32 => Ident::new("u32", span),
284-
33..=64 => Ident::new("u64", span),
285-
_ => {
286-
return Err(
287-
format!("can't convert {} bits into a Rust integral type", *self).into(),
288-
)
289-
}
290-
})
273+
Ok(Ident::new(
274+
match *self {
275+
1 => "bool",
276+
2..=8 => "u8",
277+
9..=16 => "u16",
278+
17..=32 => "u32",
279+
33..=64 => "u64",
280+
_ => {
281+
return Err(
282+
format!("can't convert {} bits into a Rust integral type", *self).into(),
283+
)
284+
}
285+
},
286+
Span::call_site(),
287+
))
291288
}
292289

293290
fn to_ty_width(&self) -> Result<u32> {

0 commit comments

Comments
 (0)