@@ -134,16 +134,27 @@ impl Lit {
134134 }
135135 }
136136
137- /// Keep this in sync with `Token::can_begin_literal_maybe_minus` excluding unary negation.
137+ /// Keep this in sync with `Token::can_begin_literal_maybe_minus` and
138+ /// `Parser::maybe_parse_token_lit` (excluding unary negation).
138139 pub fn from_token ( token : & Token ) -> Option < Lit > {
139140 match token. uninterpolate ( ) . kind {
140141 Ident ( name, IdentIsRaw :: No ) if name. is_bool_lit ( ) => Some ( Lit :: new ( Bool , name, None ) ) ,
141142 Literal ( token_lit) => Some ( token_lit) ,
142- Interpolated ( ref nt)
143- if let NtExpr ( expr) | NtLiteral ( expr) = & * * nt
144- && let ast:: ExprKind :: Lit ( token_lit) = expr. kind =>
145- {
146- Some ( token_lit)
143+ OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar ( NonterminalKind :: Literal ) ) ) => {
144+ panic ! ( "njn: FROM_TOKEN (1)" ) ;
145+ // if let NtExpr(expr) | NtLiteral(expr) = &**nt
146+ // && let ast::ExprKind::Lit(token_lit) = expr.kind =>
147+ // {
148+ // Some(token_lit)
149+ // }
150+ }
151+ OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar ( NonterminalKind :: Expr ) ) ) => {
152+ panic ! ( "njn: FROM_TOKEN (2)" ) ;
153+ // if let NtExpr(expr) | NtLiteral(expr) = &**nt
154+ // && let ast::ExprKind::Lit(token_lit) = expr.kind =>
155+ // {
156+ // Some(token_lit)
157+ // }
147158 }
148159 _ => None ,
149160 }
@@ -476,6 +487,7 @@ impl Token {
476487 Token :: new ( Ident ( ident. name , ident. is_raw_guess ( ) . into ( ) ) , ident. span )
477488 }
478489
490+ /// njn: phase this out in favour of Parser::uninterpolated_token_span?
479491 /// For interpolated tokens, returns a span of the fragment to which the interpolated
480492 /// token refers. For all other tokens this is just a regular span.
481493 /// It is particularly important to use this for identifiers and lifetimes
@@ -531,9 +543,7 @@ impl Token {
531543 PathSep | // global path
532544 Lifetime ( ..) | // labeled loop
533545 Pound => true , // expression attributes
534- Interpolated ( ref nt) => matches ! ( & * * nt, NtLiteral ( ..) |
535- NtExpr ( ..) |
536- NtBlock ( ..) ) ,
546+ Interpolated ( ref nt) => matches ! ( & * * nt, NtBlock ( ..) ) ,
537547 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
538548 NonterminalKind :: Block |
539549 NonterminalKind :: Expr |
@@ -561,7 +571,7 @@ impl Token {
561571 | DotDot | DotDotDot | DotDotEq // ranges
562572 | Lt | BinOp ( Shl ) // associated path
563573 | PathSep => true , // global path
564- Interpolated ( ref nt) => matches ! ( & * * nt, NtLiteral ( .. ) | NtBlock ( ..) ) ,
574+ Interpolated ( ref nt) => matches ! ( & * * nt, NtBlock ( ..) ) ,
565575 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
566576 NonterminalKind :: Block |
567577 NonterminalKind :: PatParam { .. } |
@@ -603,6 +613,7 @@ impl Token {
603613 match self . kind {
604614 OpenDelim ( Delimiter :: Brace ) | Literal ( ..) | BinOp ( Minus ) => true ,
605615 Ident ( name, IdentIsRaw :: No ) if name. is_bool_lit ( ) => true ,
616+ Interpolated ( ref nt) => matches ! ( & * * nt, NtBlock ( ..) ) ,
606617 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
607618 NonterminalKind :: Expr
608619 | NonterminalKind :: Expr2021 { .. }
@@ -649,22 +660,24 @@ impl Token {
649660 ///
650661 /// In other words, would this token be a valid start of `parse_literal_maybe_minus`?
651662 ///
652- /// Keep this in sync with and `Lit::from_token`, excluding unary negation.
663+ /// Keep this in sync with `Lit::from_token` and
664+ /// `Parser::maybe_parse_token_lit` (excluding unary negation).
653665 pub fn can_begin_literal_maybe_minus ( & self ) -> bool {
654666 match self . uninterpolate ( ) . kind {
655667 Literal ( ..) | BinOp ( Minus ) => true ,
656668 Ident ( name, IdentIsRaw :: No ) if name. is_bool_lit ( ) => true ,
657- Interpolated ( ref nt) => match & * * nt {
658- NtLiteral ( _) => true ,
659- NtExpr ( e) => match & e. kind {
660- ast:: ExprKind :: Lit ( _) => true ,
661- ast:: ExprKind :: Unary ( ast:: UnOp :: Neg , e) => {
662- matches ! ( & e. kind, ast:: ExprKind :: Lit ( _) )
663- }
664- _ => false ,
665- } ,
666- _ => false ,
667- } ,
669+ // njn: fix up
670+ // Interpolated(ref nt) => match &**nt {
671+ // NtLiteral(_) => true,
672+ // NtExpr(e) => match &e.kind {
673+ // ast::ExprKind::Lit(_) => true,
674+ // ast::ExprKind::Unary(ast::UnOp::Neg, e) => {
675+ // matches!(&e.kind, ast::ExprKind::Lit(_))
676+ // }
677+ // _ => false,
678+ // },
679+ // _ => false,
680+ // },
668681 // njn: too simple compared to what's above?
669682 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
670683 NonterminalKind :: Literal | NonterminalKind :: Expr | NonterminalKind :: Expr2021 { .. } ,
@@ -676,14 +689,19 @@ impl Token {
676689 pub fn can_begin_string_literal ( & self ) -> bool {
677690 match self . uninterpolate ( ) . kind {
678691 Literal ( ..) => true ,
679- Interpolated ( ref nt) => match & * * nt {
680- NtLiteral ( _) => true ,
681- NtExpr ( e) => match & e. kind {
682- ast:: ExprKind :: Lit ( _) => true ,
683- _ => false ,
684- } ,
685- _ => false ,
686- } ,
692+ // njn: fix up
693+ // Interpolated(ref nt) => match &**nt {
694+ // NtLiteral(_) => true,
695+ // NtExpr(e) => match &e.kind {
696+ // ast::ExprKind::Lit(_) => true,
697+ // _ => false,
698+ // },
699+ // _ => false,
700+ // },
701+ // njn: too simple compared to what's above?
702+ OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
703+ NonterminalKind :: Literal | NonterminalKind :: Expr | NonterminalKind :: Expr2021 ,
704+ ) ) ) => true ,
687705 _ => false ,
688706 }
689707 }
@@ -738,16 +756,19 @@ impl Token {
738756 self . ident ( ) . is_some_and ( |( ident, _) | ident. name == name)
739757 }
740758
741- /// Would `maybe_whole_expr ` in `parser.rs` return `Ok(..)`?
759+ /// Would `maybe_reparse_metavar_expr ` in `parser.rs` return `Ok(..)`?
742760 /// That is, is this a pre-parsed expression dropped into the token stream
743761 /// (which happens while parsing the result of macro expansion)?
744- pub fn is_whole_expr ( & self ) -> bool {
745- #[ allow( irrefutable_let_patterns) ] // njn: temp
762+ pub fn is_metavar_expr ( & self ) -> bool {
763+ #[ allow( irrefutable_let_patterns) ] // FIXME: temporary
746764 if let Interpolated ( nt) = & self . kind
747- && let NtExpr ( _ ) | NtLiteral ( _) = & * * nt
765+ && let NtBlock ( _) = & * * nt
748766 {
749767 true
750- } else if matches ! ( self . is_metavar_seq( ) , Some ( NonterminalKind :: Path ) ) {
768+ } else if matches ! (
769+ self . is_metavar_seq( ) ,
770+ Some ( NonterminalKind :: Expr | NonterminalKind :: Literal | NonterminalKind :: Path )
771+ ) {
751772 true
752773 } else {
753774 false
@@ -756,6 +777,7 @@ impl Token {
756777
757778 /// Is the token an interpolated block (`$b:block`)?
758779 pub fn is_whole_block ( & self ) -> bool {
780+ #[ allow( irrefutable_let_patterns) ] // FIXME: temporary
759781 if let Interpolated ( nt) = & self . kind
760782 && let NtBlock ( ..) = & * * nt
761783 {
@@ -928,8 +950,6 @@ impl PartialEq<TokenKind> for Token {
928950/// For interpolation during macro expansion.
929951pub enum Nonterminal {
930952 NtBlock ( P < ast:: Block > ) ,
931- NtExpr ( P < ast:: Expr > ) ,
932- NtLiteral ( P < ast:: Expr > ) ,
933953}
934954
935955#[ derive( Debug , Copy , Clone , PartialEq , Eq , Encodable , Decodable , Hash , HashStable_Generic ) ]
@@ -1027,15 +1047,12 @@ impl Nonterminal {
10271047 pub fn use_span ( & self ) -> Span {
10281048 match self {
10291049 NtBlock ( block) => block. span ,
1030- NtExpr ( expr) | NtLiteral ( expr) => expr. span ,
10311050 }
10321051 }
10331052
10341053 pub fn descr ( & self ) -> & ' static str {
10351054 match self {
10361055 NtBlock ( ..) => "block" ,
1037- NtExpr ( ..) => "expression" ,
1038- NtLiteral ( ..) => "literal" ,
10391056 }
10401057 }
10411058}
@@ -1054,8 +1071,6 @@ impl fmt::Debug for Nonterminal {
10541071 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
10551072 match * self {
10561073 NtBlock ( ..) => f. pad ( "NtBlock(..)" ) ,
1057- NtExpr ( ..) => f. pad ( "NtExpr(..)" ) ,
1058- NtLiteral ( ..) => f. pad ( "NtLiteral(..)" ) ,
10591074 }
10601075 }
10611076}
@@ -1077,7 +1092,7 @@ mod size_asserts {
10771092 // tidy-alphabetical-start
10781093 static_assert_size ! ( Lit , 12 ) ;
10791094 static_assert_size ! ( LitKind , 2 ) ;
1080- static_assert_size ! ( Nonterminal , 16 ) ;
1095+ static_assert_size ! ( Nonterminal , 8 ) ;
10811096 static_assert_size ! ( Token , 24 ) ;
10821097 static_assert_size ! ( TokenKind , 16 ) ;
10831098 // tidy-alphabetical-end
0 commit comments