Skip to content

Commit 1adb3cd

Browse files
authored
Try #420:
2 parents 325a304 + f3e80cf commit 1adb3cd

File tree

3 files changed

+72
-80
lines changed

3 files changed

+72
-80
lines changed

src/generate/device.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ pub fn render(
122122
]
123123
};
124124

125-
let mut fields = vec![];
126-
let mut exprs = vec![];
125+
let mut fields = TokenStream::new();
126+
let mut exprs = TokenStream::new();
127127
if target == Target::CortexM {
128128
out.extend(quote! {
129129
pub use cortex_m::peripheral::Peripherals as CorePeripherals;
@@ -202,11 +202,11 @@ pub fn render(
202202

203203
let p = p.name.to_sanitized_upper_case();
204204
let id = Ident::new(&p, Span::call_site());
205-
fields.push(quote! {
205+
fields.extend(quote! {
206206
#[doc = #p]
207-
pub #id: #id
207+
pub #id: #id,
208208
});
209-
exprs.push(quote!(#id: #id { _marker: PhantomData }));
209+
exprs.extend(quote!(#id: #id { _marker: PhantomData },));
210210
}
211211

212212
let span = Span::call_site();
@@ -242,7 +242,7 @@ pub fn render(
242242
///All the peripherals
243243
#[allow(non_snake_case)]
244244
pub struct Peripherals {
245-
#(#fields,)*
245+
#fields
246246
}
247247

248248
impl Peripherals {
@@ -254,7 +254,7 @@ pub fn render(
254254
DEVICE_PERIPHERALS = true;
255255

256256
Peripherals {
257-
#(#exprs,)*
257+
#exprs
258258
}
259259
}
260260
}

src/generate/interrupt.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,17 @@ pub fn render(
2525
interrupts.sort_by_key(|i| i.value);
2626

2727
let mut root = TokenStream::new();
28-
let mut from_arms = vec![];
29-
let mut elements = vec![];
28+
let mut from_arms = TokenStream::new();
29+
let mut elements = TokenStream::new();
3030
let mut names = vec![];
31-
let mut variants = vec![];
31+
let mut variants = TokenStream::new();
3232

3333
// Current position in the vector table
3434
let mut pos = 0;
35-
let mut mod_items = vec![];
35+
let mut mod_items = TokenStream::new();
3636
for interrupt in &interrupts {
3737
while pos < interrupt.value {
38-
elements.push(quote!(Vector { _reserved: 0 }));
38+
elements.extend(quote!(Vector { _reserved: 0 },));
3939
pos += 1;
4040
}
4141
pos += 1;
@@ -55,16 +55,16 @@ pub fn render(
5555

5656
let value = util::unsuffixed(u64(interrupt.value));
5757

58-
variants.push(quote! {
58+
variants.extend(quote! {
5959
#[doc = #description]
6060
#name_uc = #value,
6161
});
6262

63-
from_arms.push(quote! {
63+
from_arms.extend(quote! {
6464
#value => Ok(Interrupt::#name_uc),
6565
});
6666

67-
elements.push(quote!(Vector { _handler: #name_uc }));
67+
elements.extend(quote!(Vector { _handler: #name_uc },));
6868
names.push(name_uc);
6969
}
7070

@@ -92,7 +92,7 @@ pub fn render(
9292
#[link_section = ".vector_table.interrupts"]
9393
#[no_mangle]
9494
pub static __INTERRUPTS: [Vector; #n] = [
95-
#(#elements,)*
95+
#elements
9696
];
9797
});
9898
}
@@ -120,7 +120,7 @@ pub fn render(
120120
#[used]
121121
pub static __INTERRUPTS:
122122
[Vector; #n] = [
123-
#(#elements,)*
123+
#elements
124124
];
125125
});
126126
}
@@ -140,7 +140,7 @@ pub fn render(
140140
#[derive(Copy, Clone, Debug)]
141141
#enum_repr
142142
pub enum Interrupt {
143-
#(#variants)*
143+
#variants
144144
}
145145

146146
unsafe impl bare_metal::Nr for Interrupt {
@@ -154,7 +154,7 @@ pub fn render(
154154
if target == Target::CortexM || target == Target::Msp430 {
155155
root.extend(interrupt_enum);
156156
} else {
157-
mod_items.push(quote! {
157+
mod_items.extend(quote! {
158158
#interrupt_enum
159159

160160
#[derive(Debug, Copy, Clone)]
@@ -164,7 +164,7 @@ pub fn render(
164164
#[inline]
165165
pub fn try_from(value: u8) -> Result<Self, TryFromInterruptError> {
166166
match value {
167-
#(#from_arms)*
167+
#from_arms
168168
_ => Err(TryFromInterruptError(())),
169169
}
170170
}
@@ -179,7 +179,7 @@ pub fn render(
179179
};
180180

181181
if target != Target::CortexM && target != Target::Msp430 {
182-
mod_items.push(quote! {
182+
mod_items.extend(quote! {
183183
#[cfg(feature = "rt")]
184184
#[macro_export]
185185
/// Assigns a handler to an interrupt
@@ -269,7 +269,7 @@ pub fn render(
269269
root.extend(quote! {
270270
#[doc(hidden)]
271271
pub mod interrupt {
272-
#(#mod_items)*
272+
#mod_items
273273
}
274274
});
275275

src/generate/register.rs

Lines changed: 50 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -282,17 +282,17 @@ pub fn fields(
282282
}
283283
};
284284

285+
r_impl_items.extend(quote! {
286+
#[doc = #description_with_bits]
287+
#[inline(always)]
288+
pub fn #sc(&self) -> #_pc_r {
289+
#_pc_r::new ( #value )
290+
}
291+
});
292+
285293
if let Some((evs, base)) = lookup_filter(&lookup_results, Usage::Read) {
286294
evs_r = Some(evs.clone());
287295

288-
r_impl_items.extend(quote! {
289-
#[doc = #description_with_bits]
290-
#[inline(always)]
291-
pub fn #sc(&self) -> #_pc_r {
292-
#_pc_r::new( #value )
293-
}
294-
});
295-
296296
if let Some(base) = base {
297297
let pc = base.field.to_sanitized_upper_case();
298298
let base_pc_r = Ident::new(&(pc.clone() + "_A"), span);
@@ -309,50 +309,50 @@ pub fn fields(
309309

310310
add_from_variants(mod_items, &variants, &pc_r, &fty, &description, rv);
311311

312-
let mut enum_items = vec![];
312+
let mut enum_items = TokenStream::new();
313313

314-
let mut arms = variants
315-
.iter()
316-
.map(|v| {
317-
let i = util::unsuffixed_or_bool(v.value, width);
318-
let pc = &v.pc;
314+
let mut arms = TokenStream::new();
315+
for v in variants.iter().map(|v| {
316+
let i = util::unsuffixed_or_bool(v.value, width);
317+
let pc = &v.pc;
319318

320-
if has_reserved_variant {
321-
quote! { #i => Val(#pc_r::#pc) }
322-
} else {
323-
quote! { #i => #pc_r::#pc }
324-
}
325-
})
326-
.collect::<Vec<_>>();
319+
if has_reserved_variant {
320+
quote! { #i => Val(#pc_r::#pc), }
321+
} else {
322+
quote! { #i => #pc_r::#pc, }
323+
}
324+
}) {
325+
arms.extend(v);
326+
}
327327

328328
if has_reserved_variant {
329-
arms.push(quote! {
330-
i => Res(i)
329+
arms.extend(quote! {
330+
i => Res(i),
331331
});
332332
} else if 1 << width.to_ty_width()? != variants.len() {
333-
arms.push(quote! {
334-
_ => unreachable!()
333+
arms.extend(quote! {
334+
_ => unreachable!(),
335335
});
336336
}
337337

338338
if has_reserved_variant {
339-
enum_items.push(quote! {
339+
enum_items.extend(quote! {
340340
///Get enumerated values variant
341341
#[inline(always)]
342342
pub fn variant(&self) -> crate::Variant<#fty, #pc_r> {
343343
use crate::Variant::*;
344344
match self.bits {
345-
#(#arms),*
345+
#arms
346346
}
347347
}
348348
});
349349
} else {
350-
enum_items.push(quote! {
350+
enum_items.extend(quote! {
351351
///Get enumerated values variant
352352
#[inline(always)]
353353
pub fn variant(&self) -> #pc_r {
354354
match self.bits {
355-
#(#arms),*
355+
#arms
356356
}
357357
}
358358
});
@@ -372,7 +372,7 @@ pub fn fields(
372372
);
373373

374374
let doc = format!("Checks if the value of the field is `{}`", pc);
375-
enum_items.push(quote! {
375+
enum_items.extend(quote! {
376376
#[doc = #doc]
377377
#[inline(always)]
378378
pub fn #is_variant(&self) -> bool {
@@ -386,19 +386,11 @@ pub fn fields(
386386
#[doc = #doc]
387387
pub type #_pc_r = crate::R<#fty, #pc_r>;
388388
impl #_pc_r {
389-
#(#enum_items)*
389+
#enum_items
390390
}
391391
});
392392
}
393393
} else {
394-
r_impl_items.extend(quote! {
395-
#[doc = #description_with_bits]
396-
#[inline(always)]
397-
pub fn #sc(&self) -> #_pc_r {
398-
#_pc_r::new ( #value )
399-
}
400-
});
401-
402394
let doc = format!("Reader of field `{}`", f.name);
403395
mod_items.extend(quote! {
404396
#[doc = #doc]
@@ -411,7 +403,7 @@ pub fn fields(
411403
let new_pc_w = Ident::new(&(pc.clone() + "_AW"), span);
412404
let _pc_w = Ident::new(&(pc.clone() + "_W"), span);
413405

414-
let mut proxy_items = vec![];
406+
let mut proxy_items = TokenStream::new();
415407
let mut unsafety = unsafety(f.write_constraint.as_ref(), width);
416408

417409
if let Some((evs, base)) = lookup_filter(&lookup_results, Usage::Write) {
@@ -432,7 +424,7 @@ pub fn fields(
432424
}
433425
}
434426

435-
proxy_items.push(quote! {
427+
proxy_items.extend(quote! {
436428
///Writes `variant` to the field
437429
#[inline(always)]
438430
pub fn variant(self, variant: #pc_w) -> &'a mut W {
@@ -447,7 +439,7 @@ pub fn fields(
447439
let sc = &v.sc;
448440

449441
let doc = util::escape_brackets(util::respace(&v.doc).as_ref());
450-
proxy_items.push(quote! {
442+
proxy_items.extend(quote! {
451443
#[doc = #doc]
452444
#[inline(always)]
453445
pub fn #sc(self) -> &'a mut W {
@@ -458,7 +450,7 @@ pub fn fields(
458450
}
459451

460452
if width == 1 {
461-
proxy_items.push(quote! {
453+
proxy_items.extend(quote! {
462454
///Sets the field bit
463455
#[inline(always)]
464456
pub #unsafety fn set_bit(self) -> &'a mut W {
@@ -473,7 +465,7 @@ pub fn fields(
473465
});
474466
}
475467

476-
proxy_items.push(if offset != 0 {
468+
proxy_items.extend(if offset != 0 {
477469
let offset = &util::unsuffixed(offset);
478470
quote! {
479471
///Writes raw bits to the field
@@ -502,7 +494,7 @@ pub fn fields(
502494
}
503495

504496
impl<'a> #_pc_w<'a> {
505-
#(#proxy_items)*
497+
#proxy_items
506498
}
507499
});
508500

@@ -587,18 +579,18 @@ fn add_from_variants(
587579
(quote! { #[repr(#fty)] }, quote! { variant as _ })
588580
};
589581

590-
let vars = variants
591-
.iter()
592-
.map(|v| {
593-
let desc = util::escape_brackets(&format!("{}: {}", v.value, v.doc));
594-
let pcv = &v.pc;
595-
let pcval = &util::unsuffixed(v.value);
596-
quote! {
597-
#[doc = #desc]
598-
#pcv = #pcval
599-
}
600-
})
601-
.collect::<Vec<_>>();
582+
let mut vars = TokenStream::new();
583+
for v in variants.iter().map(|v| {
584+
let desc = util::escape_brackets(&format!("{}: {}", v.value, v.doc));
585+
let pcv = &v.pc;
586+
let pcval = &util::unsuffixed(v.value);
587+
quote! {
588+
#[doc = #desc]
589+
#pcv = #pcval,
590+
}
591+
}) {
592+
vars.extend(v);
593+
}
602594

603595
let desc = if let Some(rv) = reset_value {
604596
format!("{}\n\nValue on reset: {}", desc, rv)
@@ -611,7 +603,7 @@ fn add_from_variants(
611603
#[derive(Clone, Copy, Debug, PartialEq)]
612604
#repr
613605
pub enum #pc {
614-
#(#vars),*
606+
#vars
615607
}
616608
impl From<#pc> for #fty {
617609
#[inline(always)]

0 commit comments

Comments
 (0)