Skip to content

Commit 5db3b82

Browse files
committed
simplify
1 parent d72b822 commit 5db3b82

File tree

3 files changed

+56
-106
lines changed

3 files changed

+56
-106
lines changed

src/generate/peripheral.rs

+17-54
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

+20-22
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();
@@ -216,6 +213,7 @@ pub fn fields(
216213
let can_write = access != Access::ReadOnly;
217214

218215
// TODO enumeratedValues
216+
let inline = quote! { #[inline(always)] };
219217
for f in fields.iter() {
220218
// TODO(AJM) - do we need to do anything with this range type?
221219
let BitRange { offset, width, .. } = f.bit_range;
@@ -317,7 +315,7 @@ pub fn fields(
317315
let doc = &util::replace_suffix(&description, suffixes_str);
318316
r_impl_items.extend(quote! {
319317
#[doc = #doc]
320-
#[inline(always)]
318+
#inline
321319
pub unsafe fn #sc(&self, n: usize) -> #_pc_r {
322320
#_pc_r::new ( #value )
323321
}
@@ -344,7 +342,7 @@ pub fn fields(
344342
);
345343
r_impl_items.extend(quote! {
346344
#[doc = #doc]
347-
#[inline(always)]
345+
#inline
348346
pub fn #sc_n(&self) -> #_pc_r {
349347
#_pc_r::new ( #value )
350348
}
@@ -354,7 +352,7 @@ pub fn fields(
354352
let doc = description_with_bits(&description, offset, width);
355353
r_impl_items.extend(quote! {
356354
#[doc = #doc]
357-
#[inline(always)]
355+
#inline
358356
pub fn #sc(&self) -> #_pc_r {
359357
#_pc_r::new ( #value )
360358
}
@@ -410,7 +408,7 @@ pub fn fields(
410408
if has_reserved_variant {
411409
enum_items.extend(quote! {
412410
///Get enumerated values variant
413-
#[inline(always)]
411+
#inline
414412
pub fn variant(&self) -> crate::Variant<#fty, #pc_r> {
415413
use crate::Variant::*;
416414
match self.bits {
@@ -421,7 +419,7 @@ pub fn fields(
421419
} else {
422420
enum_items.extend(quote! {
423421
///Get enumerated values variant
424-
#[inline(always)]
422+
#inline
425423
pub fn variant(&self) -> #pc_r {
426424
match self.bits {
427425
#arms
@@ -446,7 +444,7 @@ pub fn fields(
446444
let doc = format!("Checks if the value of the field is `{}`", pc);
447445
enum_items.extend(quote! {
448446
#[doc = #doc]
449-
#[inline(always)]
447+
#inline
450448
pub fn #is_variant(&self) -> bool {
451449
*self == #pc_r::#pc
452450
}
@@ -499,7 +497,7 @@ pub fn fields(
499497

500498
proxy_items.extend(quote! {
501499
///Writes `variant` to the field
502-
#[inline(always)]
500+
#inline
503501
pub fn variant(self, variant: #pc_w) -> &'a mut W {
504502
#unsafety {
505503
self.#bits(variant.into())
@@ -514,7 +512,7 @@ pub fn fields(
514512
let doc = util::escape_brackets(util::respace(&v.doc).as_ref());
515513
proxy_items.extend(quote! {
516514
#[doc = #doc]
517-
#[inline(always)]
515+
#inline
518516
pub fn #sc(self) -> &'a mut W {
519517
self.variant(#pc_w::#pc)
520518
}
@@ -525,13 +523,13 @@ pub fn fields(
525523
if width == 1 {
526524
proxy_items.extend(quote! {
527525
///Sets the field bit
528-
#[inline(always)]
526+
#inline
529527
pub #unsafety fn set_bit(self) -> &'a mut W {
530528
self.bit(true)
531529
}
532530

533531
///Clears the field bit
534-
#[inline(always)]
532+
#inline
535533
pub #unsafety fn clear_bit(self) -> &'a mut W {
536534
self.bit(false)
537535
}
@@ -541,7 +539,7 @@ pub fn fields(
541539
proxy_items.extend(if field_dim.is_some() {
542540
quote! {
543541
///Writes raw bits to the field
544-
#[inline(always)]
542+
#inline
545543
pub #unsafety fn #bits(self, value: #fty) -> &'a mut W {
546544
self.w.bits = (self.w.bits & !(#hexmask << self.offset)) | (((value as #rty) & #hexmask) << self.offset);
547545
self.w
@@ -551,7 +549,7 @@ pub fn fields(
551549
let offset = &util::unsuffixed(offset);
552550
quote! {
553551
///Writes raw bits to the field
554-
#[inline(always)]
552+
#inline
555553
pub #unsafety fn #bits(self, value: #fty) -> &'a mut W {
556554
self.w.bits = (self.w.bits & !(#hexmask << #offset)) | (((value as #rty) & #hexmask) << #offset);
557555
self.w
@@ -560,7 +558,7 @@ pub fn fields(
560558
} else {
561559
quote! {
562560
///Writes raw bits to the field
563-
#[inline(always)]
561+
#inline
564562
pub #unsafety fn #bits(self, value: #fty) -> &'a mut W {
565563
self.w.bits = (self.w.bits & !#hexmask) | ((value as #rty) & #hexmask);
566564
self.w
@@ -594,7 +592,7 @@ pub fn fields(
594592
let doc = &util::replace_suffix(&description, suffixes_str);
595593
w_impl_items.extend(quote! {
596594
#[doc = #doc]
597-
#[inline(always)]
595+
#inline
598596
pub unsafe fn #sc(&mut self, n: usize) -> #_pc_w {
599597
#_pc_w { w: self, offset: #offset_calc }
600598
}
@@ -612,7 +610,7 @@ pub fn fields(
612610
let sub_offset = util::unsuffixed(sub_offset as u64);
613611
w_impl_items.extend(quote! {
614612
#[doc = #doc]
615-
#[inline(always)]
613+
#inline
616614
pub fn #sc_n(&mut self) -> #_pc_w {
617615
#_pc_w { w: self, offset: #sub_offset }
618616
}
@@ -622,7 +620,7 @@ pub fn fields(
622620
let doc = description_with_bits(&description, offset, width);
623621
w_impl_items.extend(quote! {
624622
#[doc = #doc]
625-
#[inline(always)]
623+
#inline
626624
pub fn #sc(&mut self) -> #_pc_w {
627625
#_pc_w { w: self }
628626
}

src/util.rs

+19-30
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,7 @@ 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(),
195189
}
196190
}
197191

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

259253
/// Turns `n` into an unsuffixed token
260254
pub fn unsuffixed(n: u64) -> TokenStream {
261-
let mut t = TokenStream::new();
262-
t.append(Literal::u64_unsuffixed(n));
263-
t
255+
Literal::u64_unsuffixed(n).into_token_stream()
264256
}
265257

266258
pub fn unsuffixed_or_bool(n: u64, width: u32) -> TokenStream {
267259
if width == 1 {
268-
let mut t = TokenStream::new();
269-
t.append(Ident::new(
270-
if n == 0 { "false" } else { "true" },
271-
Span::call_site(),
272-
));
273-
t
260+
Ident::new(if n == 0 { "false" } else { "true" }, Span::call_site()).into_token_stream()
274261
} else {
275262
unsuffixed(n)
276263
}
@@ -283,19 +270,21 @@ pub trait U32Ext {
283270

284271
impl U32Ext for u32 {
285272
fn to_ty(&self) -> Result<Ident> {
286-
let span = Span::call_site();
287-
Ok(match *self {
288-
1 => Ident::new("bool", span),
289-
2..=8 => Ident::new("u8", span),
290-
9..=16 => Ident::new("u16", span),
291-
17..=32 => Ident::new("u32", span),
292-
33..=64 => Ident::new("u64", span),
293-
_ => {
294-
return Err(
295-
format!("can't convert {} bits into a Rust integral type", *self).into(),
296-
)
297-
}
298-
})
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+
))
299288
}
300289

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

0 commit comments

Comments
 (0)