@@ -210,7 +210,7 @@ fn stringify_expand(
210210 tt : & tt:: TopSubtree ,
211211 span : Span ,
212212) -> ExpandResult < tt:: TopSubtree > {
213- let pretty = :: tt:: pretty ( tt. token_trees ( ) . flat_tokens ( ) ) ;
213+ let pretty = :: tt:: pretty ( tt. token_trees ( ) ) ;
214214
215215 let expanded = quote ! { span =>
216216 #pretty
@@ -283,7 +283,7 @@ fn format_args_expand(
283283) -> ExpandResult < tt:: TopSubtree > {
284284 let pound = mk_pound ( span) ;
285285 let mut tt = tt. clone ( ) ;
286- tt. top_subtree_delimiter_mut ( ) . kind = tt:: DelimiterKind :: Parenthesis ;
286+ tt. set_top_subtree_delimiter_kind ( tt:: DelimiterKind :: Parenthesis ) ;
287287 ExpandResult :: ok ( quote ! { span =>
288288 builtin #pound format_args #tt
289289 } )
@@ -297,14 +297,14 @@ fn format_args_nl_expand(
297297) -> ExpandResult < tt:: TopSubtree > {
298298 let pound = mk_pound ( span) ;
299299 let mut tt = tt. clone ( ) ;
300- tt. top_subtree_delimiter_mut ( ) . kind = tt:: DelimiterKind :: Parenthesis ;
301- if let Some ( tt:: TokenTree :: Leaf ( tt:: Leaf :: Literal ( tt:: Literal {
302- symbol : text,
303- kind : tt:: LitKind :: Str ,
304- ..
305- } ) ) ) = tt. 0 . get_mut ( 1 )
300+ tt. set_top_subtree_delimiter_kind ( tt:: DelimiterKind :: Parenthesis ) ;
301+ let lit = tt. as_token_trees ( ) . iter_flat_tokens ( ) . nth ( 1 ) ;
302+ if let Some ( tt:: TokenTree :: Leaf ( tt:: Leaf :: Literal (
303+ mut lit @ tt:: Literal { kind : tt:: LitKind :: Str , .. } ,
304+ ) ) ) = lit
306305 {
307- * text = Symbol :: intern ( & format_smolstr ! ( "{}\\ n" , text. as_str( ) ) ) ;
306+ lit. symbol = Symbol :: intern ( & format_smolstr ! ( "{}\\ n" , lit. symbol. as_str( ) ) ) ;
307+ tt. set_token ( 1 , lit. into ( ) ) ;
308308 }
309309 ExpandResult :: ok ( quote ! { span =>
310310 builtin #pound format_args #tt
@@ -318,7 +318,7 @@ fn asm_expand(
318318 span : Span ,
319319) -> ExpandResult < tt:: TopSubtree > {
320320 let mut tt = tt. clone ( ) ;
321- tt. top_subtree_delimiter_mut ( ) . kind = tt:: DelimiterKind :: Parenthesis ;
321+ tt. set_top_subtree_delimiter_kind ( tt:: DelimiterKind :: Parenthesis ) ;
322322 let pound = mk_pound ( span) ;
323323 let expanded = quote ! { span =>
324324 builtin #pound asm #tt
@@ -333,7 +333,7 @@ fn global_asm_expand(
333333 span : Span ,
334334) -> ExpandResult < tt:: TopSubtree > {
335335 let mut tt = tt. clone ( ) ;
336- tt. top_subtree_delimiter_mut ( ) . kind = tt:: DelimiterKind :: Parenthesis ;
336+ tt. set_top_subtree_delimiter_kind ( tt:: DelimiterKind :: Parenthesis ) ;
337337 let pound = mk_pound ( span) ;
338338 let expanded = quote ! { span =>
339339 builtin #pound global_asm #tt
@@ -348,7 +348,7 @@ fn naked_asm_expand(
348348 span : Span ,
349349) -> ExpandResult < tt:: TopSubtree > {
350350 let mut tt = tt. clone ( ) ;
351- tt. top_subtree_delimiter_mut ( ) . kind = tt:: DelimiterKind :: Parenthesis ;
351+ tt. set_top_subtree_delimiter_kind ( tt:: DelimiterKind :: Parenthesis ) ;
352352 let pound = mk_pound ( span) ;
353353 let expanded = quote ! { span =>
354354 builtin #pound naked_asm #tt
@@ -478,11 +478,11 @@ fn unreachable_expand(
478478
479479 // Pass the original arguments
480480 let mut subtree = tt. clone ( ) ;
481- * subtree. top_subtree_delimiter_mut ( ) = tt:: Delimiter {
481+ subtree. set_top_subtree_delimiter_kind ( tt:: DelimiterKind :: Parenthesis ) ;
482+ subtree. set_top_subtree_delimiter_span ( tt:: DelimSpan {
482483 open : call_site_span,
483484 close : call_site_span,
484- kind : tt:: DelimiterKind :: Parenthesis ,
485- } ;
485+ } ) ;
486486
487487 // Expand to a macro call `$crate::panic::panic_{edition}`
488488 let call = quote ! ( call_site_span =>#dollar_crate:: panic:: #mac! #subtree) ;
@@ -518,16 +518,17 @@ fn compile_error_expand(
518518 tt : & tt:: TopSubtree ,
519519 span : Span ,
520520) -> ExpandResult < tt:: TopSubtree > {
521- let err = match & * tt. 0 {
522- [
523- _,
524- tt:: TokenTree :: Leaf ( tt:: Leaf :: Literal ( tt:: Literal {
525- symbol : text,
526- span : _,
527- kind : tt:: LitKind :: Str | tt:: LitKind :: StrRaw ( _) ,
528- suffix : _,
529- } ) ) ,
530- ] => ExpandError :: other ( span, Box :: from ( unescape_symbol ( text) . as_str ( ) ) ) ,
521+ let err = match tt. iter ( ) . collect_array ( ) {
522+ Some (
523+ [
524+ tt:: TtElement :: Leaf ( tt:: Leaf :: Literal ( tt:: Literal {
525+ symbol : text,
526+ span : _,
527+ kind : tt:: LitKind :: Str | tt:: LitKind :: StrRaw ( _) ,
528+ suffix : _,
529+ } ) ) ,
530+ ] ,
531+ ) => ExpandError :: other ( span, Box :: from ( unescape_symbol ( & text) . as_str ( ) ) ) ,
531532 _ => ExpandError :: other ( span, "`compile_error!` argument must be a string" ) ,
532533 } ;
533534
@@ -556,7 +557,7 @@ fn concat_expand(
556557 // to ensure the right parsing order, so skip the parentheses here. Ideally we'd
557558 // implement rustc's model. cc https://github.com/rust-lang/rust-analyzer/pull/10623
558559 if let TtElement :: Subtree ( subtree, subtree_iter) = & t
559- && let [ tt:: TokenTree :: Leaf ( tt) ] = subtree_iter. remaining ( ) . flat_tokens ( )
560+ && let Some ( [ tt:: TtElement :: Leaf ( tt) ] ) = subtree_iter. clone ( ) . collect_array ( )
560561 && subtree. delimiter . kind == tt:: DelimiterKind :: Parenthesis
561562 {
562563 t = TtElement :: Leaf ( tt) ;
@@ -663,7 +664,7 @@ fn concat_bytes_expand(
663664 kind,
664665 suffix : _,
665666 } ) ) => {
666- record_span ( * span) ;
667+ record_span ( span) ;
667668 match kind {
668669 tt:: LitKind :: Byte => {
669670 if let Ok ( b) = unescape_byte ( text. as_str ( ) ) {
@@ -679,7 +680,7 @@ fn concat_bytes_expand(
679680 bytes. extend ( text. as_str ( ) . escape_debug ( ) ) ;
680681 }
681682 _ => {
682- err. get_or_insert ( ExpandError :: other ( * span, "unexpected token" ) ) ;
683+ err. get_or_insert ( ExpandError :: other ( span, "unexpected token" ) ) ;
683684 break ;
684685 }
685686 }
@@ -733,15 +734,15 @@ fn concat_bytes_expand_subtree(
733734 if let Ok ( b) = unescape_byte ( text. as_str ( ) ) {
734735 bytes. extend ( b. escape_ascii ( ) . filter_map ( |it| char:: from_u32 ( it as u32 ) ) ) ;
735736 }
736- record_span ( * span) ;
737+ record_span ( span) ;
737738 }
738739 TtElement :: Leaf ( tt:: Leaf :: Literal ( tt:: Literal {
739740 symbol : text,
740741 span,
741742 kind : tt:: LitKind :: Integer ,
742743 suffix : _,
743744 } ) ) => {
744- record_span ( * span) ;
745+ record_span ( span) ;
745746 if let Ok ( b) = text. as_str ( ) . parse :: < u8 > ( ) {
746747 bytes. extend ( b. escape_ascii ( ) . filter_map ( |it| char:: from_u32 ( it as u32 ) ) ) ;
747748 }
@@ -796,13 +797,13 @@ fn parse_string(tt: &tt::TopSubtree) -> Result<(Symbol, Span), ExpandError> {
796797 span,
797798 kind : tt:: LitKind :: Str ,
798799 suffix : _,
799- } ) ) => Ok ( ( unescape_symbol ( text) , * span) ) ,
800+ } ) ) => Ok ( ( unescape_symbol ( & text) , span) ) ,
800801 TtElement :: Leaf ( tt:: Leaf :: Literal ( tt:: Literal {
801802 symbol : text,
802803 span,
803804 kind : tt:: LitKind :: StrRaw ( _) ,
804805 suffix : _,
805- } ) ) => Ok ( ( text. clone ( ) , * span) ) ,
806+ } ) ) => Ok ( ( text. clone ( ) , span) ) ,
806807 TtElement :: Leaf ( l) => Err ( * l. span ( ) ) ,
807808 TtElement :: Subtree ( tt, _) => Err ( tt. delimiter . open . cover ( tt. delimiter . close ) ) ,
808809 }
0 commit comments