Skip to content

Commit c6035f7

Browse files
authored
Merge pull request #864 from rmsyn/generate/token-groups
generate: use token groups for delimited token streams
2 parents fd8e149 + fc33880 commit c6035f7

File tree

4 files changed

+31
-35
lines changed

4 files changed

+31
-35
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ jobs:
8989
- { rust: nightly, vendor: MSP430, options: "--atomics" }
9090
- { rust: nightly, vendor: MSP430, options: "" }
9191
# Workaround for _1token0
92-
- { rust: nightly, vendor: Espressif, options: "--atomics --ident-formats-theme legacy" }
93-
- { rust: nightly, vendor: Espressif, options: "--ident-format register:::Reg" }
92+
- { rust: nightly-2024-09-25, vendor: Espressif, options: "--atomics --ident-formats-theme legacy" }
93+
- { rust: nightly-2024-09-25, vendor: Espressif, options: "--ident-format register:::Reg" }
9494

9595
steps:
9696
- uses: actions/checkout@v4

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
99

1010
- Fix STM32-patched CI
1111
- Fix `enumeratedValues` with `isDefault` only
12+
- Fix invalid `Punct` error from `proc_macro2`
13+
- Run espressif tests on nightly-2024-09-25 to workaround CI failures
1214

1315
## [v0.33.4] - 2024-06-16
1416

src/generate/peripheral.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::svd::{
1212
self, Cluster, ClusterInfo, MaybeArray, Peripheral, Register, RegisterCluster, RegisterInfo,
1313
};
1414
use log::{debug, trace, warn};
15-
use proc_macro2::{Ident, Punct, Spacing, Span, TokenStream};
15+
use proc_macro2::{Delimiter, Group, Ident, Punct, Spacing, Span, TokenStream};
1616
use quote::{quote, ToTokens};
1717
use syn::{punctuated::Punctuated, Token};
1818

@@ -245,19 +245,18 @@ pub fn render(p_original: &Peripheral, index: &Index, config: &Config) -> Result
245245
let reg_block =
246246
register_or_cluster_block(&ercs, &derive_infos, None, "Register block", None, config)?;
247247

248-
let open = Punct::new('{', Spacing::Alone);
249-
let close = Punct::new('}', Spacing::Alone);
250-
251248
out.extend(quote! {
252249
#[doc = #description]
253250
#feature_attribute
254-
pub mod #mod_ty #open
251+
pub mod #mod_ty
255252
});
256253

257-
out.extend(reg_block);
258-
out.extend(mod_items);
254+
let mut out_items = TokenStream::new();
255+
out_items.extend(reg_block);
256+
out_items.extend(mod_items);
259257

260-
close.to_tokens(&mut out);
258+
let out_group = Group::new(Delimiter::Brace, out_items);
259+
out.extend(quote! { #out_group });
261260

262261
p.registers = Some(ercs);
263262

src/generate/register.rs

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ use crate::svd::{
55
};
66
use core::u64;
77
use log::warn;
8-
use proc_macro2::{Ident, Punct, Spacing, Span, TokenStream};
9-
use quote::{quote, ToTokens};
8+
use proc_macro2::{Delimiter, Group, Ident, Span, TokenStream};
9+
use quote::quote;
1010
use std::collections::HashSet;
1111
use std::fmt::Write;
1212
use std::{borrow::Cow, collections::BTreeMap};
@@ -297,9 +297,6 @@ pub fn render_register_mod(
297297
let mut zero_to_modify_fields_bitmap = 0;
298298
let mut one_to_modify_fields_bitmap = 0;
299299

300-
let open = Punct::new('{', Spacing::Alone);
301-
let close = Punct::new('}', Spacing::Alone);
302-
303300
let debug_feature = config
304301
.impl_debug_feature
305302
.as_ref()
@@ -362,24 +359,16 @@ pub fn render_register_mod(
362359
}
363360

364361
if can_read && !r_impl_items.is_empty() {
365-
mod_items.extend(quote! {
366-
impl R #open #r_impl_items #close
367-
});
362+
mod_items.extend(quote! { impl R { #r_impl_items }});
368363
}
369364
if !r_debug_impl.is_empty() {
370-
mod_items.extend(quote! {
371-
#r_debug_impl
372-
});
365+
mod_items.extend(quote! { #r_debug_impl });
373366
}
374367

375368
if can_write {
376369
mod_items.extend(quote! {
377-
impl W #open
370+
impl W { #w_impl_items }
378371
});
379-
380-
mod_items.extend(w_impl_items);
381-
382-
close.to_tokens(&mut mod_items);
383372
}
384373

385374
let doc = format!(
@@ -461,8 +450,6 @@ fn render_register_mod_debug(
461450
let name = util::name_of(register, config.ignore_groups);
462451
let span = Span::call_site();
463452
let regspec_ty = regspec(&name, config, span);
464-
let open = Punct::new('{', Spacing::Alone);
465-
let close = Punct::new('}', Spacing::Alone);
466453
let mut r_debug_impl = TokenStream::new();
467454
let debug_feature = config
468455
.impl_debug_feature
@@ -473,8 +460,14 @@ fn render_register_mod_debug(
473460
if access.can_read() && register.read_action.is_none() {
474461
r_debug_impl.extend(quote! {
475462
#debug_feature
476-
impl core::fmt::Debug for R #open
477-
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result #open
463+
impl core::fmt::Debug for R
464+
});
465+
let mut fmt_outer_impl = TokenStream::new();
466+
fmt_outer_impl.extend(quote! {
467+
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result
468+
});
469+
let mut fmt_inner_impl = TokenStream::new();
470+
fmt_inner_impl.extend(quote! {
478471
f.debug_struct(#name)
479472
});
480473
for &f in cur_fields.iter() {
@@ -488,25 +481,27 @@ fn render_register_mod_debug(
488481
for suffix in de.indexes() {
489482
let f_name_n = field_accessor(&f.name.expand_dim(&suffix), config, span);
490483
let f_name_n_s = format!("{f_name_n}");
491-
r_debug_impl.extend(quote! {
484+
fmt_inner_impl.extend(quote! {
492485
.field(#f_name_n_s, &self.#f_name_n())
493486
});
494487
}
495488
} else {
496489
let f_name = f.name.remove_dim();
497490
let f_name = field_accessor(&f_name, config, span);
498491
let f_name_s = format!("{f_name}");
499-
r_debug_impl.extend(quote! {
492+
fmt_inner_impl.extend(quote! {
500493
.field(#f_name_s, &self.#f_name())
501494
});
502495
}
503496
}
504497
}
505-
r_debug_impl.extend(quote! {
498+
fmt_inner_impl.extend(quote! {
506499
.finish()
507-
#close
508-
#close
509500
});
501+
let fmt_inner_group = Group::new(Delimiter::Brace, fmt_inner_impl);
502+
fmt_outer_impl.extend(quote! { #fmt_inner_group });
503+
let fmt_outer_group = Group::new(Delimiter::Brace, fmt_outer_impl);
504+
r_debug_impl.extend(quote! { #fmt_outer_group });
510505
} else if !access.can_read() || register.read_action.is_some() {
511506
r_debug_impl.extend(quote! {
512507
#debug_feature

0 commit comments

Comments
 (0)