@@ -5,8 +5,8 @@ use crate::svd::{
55} ;
66use core:: u64;
77use 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;
1010use std:: collections:: HashSet ;
1111use std:: fmt:: Write ;
1212use 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