@@ -11,7 +11,7 @@ use crate::mbe::transcribe::transcribe;
1111use ast:: token:: IdentIsRaw ;
1212use rustc_ast as ast;
1313use rustc_ast:: token:: { self , Delimiter , NonterminalKind , Token , TokenKind , TokenKind :: * } ;
14- use rustc_ast:: tokenstream:: { DelimSpan , TokenStream } ;
14+ use rustc_ast:: tokenstream:: { DelimSpan , Spacing , TokenStream } ;
1515use rustc_ast:: { NodeId , DUMMY_NODE_ID } ;
1616use rustc_ast_pretty:: pprust;
1717use rustc_attr:: { self as attr, TransparencyError } ;
@@ -402,7 +402,7 @@ pub fn compile_declarative_macro(
402402 mbe:: SequenceRepetition {
403403 tts: vec![
404404 mbe:: TokenTree :: MetaVarDecl ( def. span, lhs_nm, tt_spec) ,
405- mbe:: TokenTree :: token ( token:: FatArrow , def. span) ,
405+ mbe:: TokenTree :: token_alone ( token:: FatArrow , def. span) ,
406406 mbe:: TokenTree :: MetaVarDecl ( def. span, rhs_nm, tt_spec) ,
407407 ] ,
408408 separator: Some ( Token :: new(
@@ -417,7 +417,7 @@ pub fn compile_declarative_macro(
417417 mbe:: TokenTree :: Sequence (
418418 DelimSpan :: dummy( ) ,
419419 mbe:: SequenceRepetition {
420- tts: vec![ mbe:: TokenTree :: token (
420+ tts: vec![ mbe:: TokenTree :: token_alone (
421421 if macro_rules { token:: Semi } else { token:: Comma } ,
422422 def. span,
423423 ) ] ,
@@ -627,10 +627,11 @@ fn is_empty_token_tree(sess: &Session, seq: &mbe::SequenceRepetition) -> bool {
627627 while let Some ( tt) = iter. next ( ) {
628628 match tt {
629629 mbe:: TokenTree :: MetaVarDecl ( _, _, Some ( NonterminalKind :: Vis ) ) => { }
630- mbe:: TokenTree :: Token ( t @ Token { kind : DocComment ( ..) , .. } ) => {
630+ mbe:: TokenTree :: Token ( t @ Token { kind : DocComment ( ..) , .. } , _ ) => {
631631 let mut now = t;
632632 while let Some ( & mbe:: TokenTree :: Token (
633633 next @ Token { kind : DocComment ( ..) , .. } ,
634+ _,
634635 ) ) = iter. peek ( )
635636 {
636637 now = next;
@@ -696,10 +697,10 @@ fn has_compile_error_macro(rhs: &mbe::TokenTree) -> bool {
696697 match rhs {
697698 mbe:: TokenTree :: Delimited ( .., d) => {
698699 let has_compile_error = d. tts . array_windows :: < 3 > ( ) . any ( |[ ident, bang, args] | {
699- if let mbe:: TokenTree :: Token ( ident) = ident
700+ if let mbe:: TokenTree :: Token ( ident, _ ) = ident
700701 && let TokenKind :: Ident ( ident, _) = ident. kind
701702 && ident == sym:: compile_error
702- && let mbe:: TokenTree :: Token ( bang) = bang
703+ && let mbe:: TokenTree :: Token ( bang, _ ) = bang
703704 && let TokenKind :: Not = bang. kind
704705 && let mbe:: TokenTree :: Delimited ( .., del) = args
705706 && del. delim != Delimiter :: Invisible
@@ -896,7 +897,9 @@ enum TtHandle<'tt> {
896897
897898impl < ' tt > TtHandle < ' tt > {
898899 fn from_token ( tok : Token ) -> Self {
899- TtHandle :: Token ( mbe:: TokenTree :: Token ( tok) )
900+ // `Spacing::Alone` is pessimistic but changing it has no effect on the
901+ // current test suite.
902+ TtHandle :: Token ( mbe:: TokenTree :: Token ( tok, Spacing :: Alone ) )
900903 }
901904
902905 fn from_token_kind ( kind : TokenKind , span : Span ) -> Self {
@@ -925,8 +928,8 @@ impl<'tt> Clone for TtHandle<'tt> {
925928
926929 // This variant *must* contain a `mbe::TokenTree::Token`, and not
927930 // any other variant of `mbe::TokenTree`.
928- TtHandle :: Token ( mbe:: TokenTree :: Token ( tok) ) => {
929- TtHandle :: Token ( mbe:: TokenTree :: Token ( tok. clone ( ) ) )
931+ TtHandle :: Token ( mbe:: TokenTree :: Token ( tok, spacing ) ) => {
932+ TtHandle :: Token ( mbe:: TokenTree :: Token ( tok. clone ( ) , * spacing ) )
930933 }
931934
932935 _ => unreachable ! ( ) ,
@@ -1143,7 +1146,7 @@ fn check_matcher_core<'tt>(
11431146 // whereas macros from an external crate have a dummy id.
11441147 if def. id != DUMMY_NODE_ID
11451148 && matches ! ( kind, NonterminalKind :: PatParam { inferred: true } )
1146- && matches ! ( next_token, TokenTree :: Token ( token) if token. kind == BinOp ( token:: BinOpToken :: Or ) )
1149+ && matches ! ( next_token, TokenTree :: Token ( token, _ ) if token. kind == BinOp ( token:: BinOpToken :: Or ) )
11471150 {
11481151 // It is suggestion to use pat_param, for example: $x:pat -> $x:pat_param.
11491152 let suggestion = quoted_tt_to_string ( & TokenTree :: MetaVarDecl (
@@ -1274,7 +1277,7 @@ enum IsInFollow {
12741277fn is_in_follow ( tok : & mbe:: TokenTree , kind : NonterminalKind ) -> IsInFollow {
12751278 use mbe:: TokenTree ;
12761279
1277- if let TokenTree :: Token ( Token { kind : token:: CloseDelim ( _) , .. } ) = * tok {
1280+ if let TokenTree :: Token ( Token { kind : token:: CloseDelim ( _) , .. } , _ ) = * tok {
12781281 // closing a token tree can never be matched by any fragment;
12791282 // iow, we always require that `(` and `)` match, etc.
12801283 IsInFollow :: Yes
@@ -1293,7 +1296,7 @@ fn is_in_follow(tok: &mbe::TokenTree, kind: NonterminalKind) -> IsInFollow {
12931296 NonterminalKind :: Stmt | NonterminalKind :: Expr => {
12941297 const TOKENS : & [ & str ] = & [ "`=>`" , "`,`" , "`;`" ] ;
12951298 match tok {
1296- TokenTree :: Token ( token) => match token. kind {
1299+ TokenTree :: Token ( token, _ ) => match token. kind {
12971300 FatArrow | Comma | Semi => IsInFollow :: Yes ,
12981301 _ => IsInFollow :: No ( TOKENS ) ,
12991302 } ,
@@ -1303,7 +1306,7 @@ fn is_in_follow(tok: &mbe::TokenTree, kind: NonterminalKind) -> IsInFollow {
13031306 NonterminalKind :: PatParam { .. } => {
13041307 const TOKENS : & [ & str ] = & [ "`=>`" , "`,`" , "`=`" , "`|`" , "`if`" , "`in`" ] ;
13051308 match tok {
1306- TokenTree :: Token ( token) => match token. kind {
1309+ TokenTree :: Token ( token, _ ) => match token. kind {
13071310 FatArrow | Comma | Eq | BinOp ( token:: Or ) => IsInFollow :: Yes ,
13081311 Ident ( name, IdentIsRaw :: No ) if name == kw:: If || name == kw:: In => {
13091312 IsInFollow :: Yes
@@ -1316,7 +1319,7 @@ fn is_in_follow(tok: &mbe::TokenTree, kind: NonterminalKind) -> IsInFollow {
13161319 NonterminalKind :: PatWithOr => {
13171320 const TOKENS : & [ & str ] = & [ "`=>`" , "`,`" , "`=`" , "`if`" , "`in`" ] ;
13181321 match tok {
1319- TokenTree :: Token ( token) => match token. kind {
1322+ TokenTree :: Token ( token, _ ) => match token. kind {
13201323 FatArrow | Comma | Eq => IsInFollow :: Yes ,
13211324 Ident ( name, IdentIsRaw :: No ) if name == kw:: If || name == kw:: In => {
13221325 IsInFollow :: Yes
@@ -1332,7 +1335,7 @@ fn is_in_follow(tok: &mbe::TokenTree, kind: NonterminalKind) -> IsInFollow {
13321335 "`where`" ,
13331336 ] ;
13341337 match tok {
1335- TokenTree :: Token ( token) => match token. kind {
1338+ TokenTree :: Token ( token, _ ) => match token. kind {
13361339 OpenDelim ( Delimiter :: Brace )
13371340 | OpenDelim ( Delimiter :: Bracket )
13381341 | Comma
@@ -1369,7 +1372,7 @@ fn is_in_follow(tok: &mbe::TokenTree, kind: NonterminalKind) -> IsInFollow {
13691372 // Explicitly disallow `priv`, on the off chance it comes back.
13701373 const TOKENS : & [ & str ] = & [ "`,`" , "an ident" , "a type" ] ;
13711374 match tok {
1372- TokenTree :: Token ( token) => match token. kind {
1375+ TokenTree :: Token ( token, _ ) => match token. kind {
13731376 Comma => IsInFollow :: Yes ,
13741377 Ident ( _, IdentIsRaw :: Yes ) => IsInFollow :: Yes ,
13751378 Ident ( name, _) if name != kw:: Priv => IsInFollow :: Yes ,
@@ -1395,7 +1398,7 @@ fn is_in_follow(tok: &mbe::TokenTree, kind: NonterminalKind) -> IsInFollow {
13951398
13961399fn quoted_tt_to_string ( tt : & mbe:: TokenTree ) -> String {
13971400 match tt {
1398- mbe:: TokenTree :: Token ( token) => pprust:: token_to_string ( token) . into ( ) ,
1401+ mbe:: TokenTree :: Token ( token, _ ) => pprust:: token_to_string ( token) . into ( ) ,
13991402 mbe:: TokenTree :: MetaVar ( _, name) => format ! ( "${name}" ) ,
14001403 mbe:: TokenTree :: MetaVarDecl ( _, name, Some ( kind) ) => format ! ( "${name}:{kind}" ) ,
14011404 mbe:: TokenTree :: MetaVarDecl ( _, name, None ) => format ! ( "${name}:" ) ,
0 commit comments