@@ -136,16 +136,27 @@ impl Lit {
136136 }
137137 }
138138
139- /// Keep this in sync with `Token::can_begin_literal_maybe_minus` excluding unary negation.
139+ /// Keep this in sync with `Token::can_begin_literal_maybe_minus` and
140+ /// `Parser::maybe_parse_token_lit` (excluding unary negation).
140141 pub fn from_token ( token : & Token ) -> Option < Lit > {
141142 match token. uninterpolate ( ) . kind {
142143 Ident ( name, IdentIsRaw :: No ) if name. is_bool_lit ( ) => Some ( Lit :: new ( Bool , name, None ) ) ,
143144 Literal ( token_lit) => Some ( token_lit) ,
144- Interpolated ( ref nt)
145- if let NtExpr ( expr) | NtLiteral ( expr) = & * * nt
146- && let ast:: ExprKind :: Lit ( token_lit) = expr. kind =>
147- {
148- Some ( token_lit)
145+ OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar ( NonterminalKind :: Literal ) ) ) => {
146+ panic ! ( "njn: FROM_TOKEN (1)" ) ;
147+ // if let NtExpr(expr) | NtLiteral(expr) = &**nt
148+ // && let ast::ExprKind::Lit(token_lit) = expr.kind =>
149+ // {
150+ // Some(token_lit)
151+ // }
152+ }
153+ OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar ( NonterminalKind :: Expr ( _) ) ) ) => {
154+ panic ! ( "njn: FROM_TOKEN (2)" ) ;
155+ // if let NtExpr(expr) | NtLiteral(expr) = &**nt
156+ // && let ast::ExprKind::Lit(token_lit) = expr.kind =>
157+ // {
158+ // Some(token_lit)
159+ // }
149160 }
150161 _ => None ,
151162 }
@@ -478,6 +489,7 @@ impl Token {
478489 Token :: new ( Ident ( ident. name , ident. is_raw_guess ( ) . into ( ) ) , ident. span )
479490 }
480491
492+ /// njn: phase this out in favour of Parser::uninterpolated_token_span?
481493 /// For interpolated tokens, returns a span of the fragment to which the interpolated
482494 /// token refers. For all other tokens this is just a regular span.
483495 /// It is particularly important to use this for identifiers and lifetimes
@@ -533,9 +545,7 @@ impl Token {
533545 PathSep | // global path
534546 Lifetime ( ..) | // labeled loop
535547 Pound => true , // expression attributes
536- Interpolated ( ref nt) => matches ! ( & * * nt, NtLiteral ( ..) |
537- NtExpr ( ..) |
538- NtBlock ( ..) ) ,
548+ Interpolated ( ref nt) => matches ! ( & * * nt, NtBlock ( ..) ) ,
539549 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
540550 NonterminalKind :: Block |
541551 NonterminalKind :: Expr ( _) |
@@ -562,7 +572,7 @@ impl Token {
562572 | DotDot | DotDotDot | DotDotEq // ranges
563573 | Lt | BinOp ( Shl ) // associated path
564574 | PathSep => true , // global path
565- Interpolated ( ref nt) => matches ! ( & * * nt, NtLiteral ( .. ) | NtBlock ( ..) ) ,
575+ Interpolated ( ref nt) => matches ! ( & * * nt, NtBlock ( ..) ) ,
566576 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
567577 NonterminalKind :: Block |
568578 NonterminalKind :: Pat ( _) |
@@ -603,7 +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 ,
606- Interpolated ( ref nt) => matches ! ( & * * nt, NtExpr ( .. ) | NtBlock ( .. ) | NtLiteral ( ..) ) ,
616+ Interpolated ( ref nt) => matches ! ( & * * nt, NtBlock ( ..) ) ,
607617 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
608618 NonterminalKind :: Expr ( _) | NonterminalKind :: Block | NonterminalKind :: Literal ,
609619 ) ) ) => true ,
@@ -647,22 +657,24 @@ impl Token {
647657 ///
648658 /// In other words, would this token be a valid start of `parse_literal_maybe_minus`?
649659 ///
650- /// Keep this in sync with and `Lit::from_token`, excluding unary negation.
660+ /// Keep this in sync with `Lit::from_token` and
661+ /// `Parser::maybe_parse_token_lit` (excluding unary negation).
651662 pub fn can_begin_literal_maybe_minus ( & self ) -> bool {
652663 match self . uninterpolate ( ) . kind {
653664 Literal ( ..) | BinOp ( Minus ) => true ,
654665 Ident ( name, IdentIsRaw :: No ) if name. is_bool_lit ( ) => true ,
655- Interpolated ( ref nt) => match & * * nt {
656- NtLiteral ( _) => true ,
657- NtExpr ( e) => match & e. kind {
658- ast:: ExprKind :: Lit ( _) => true ,
659- ast:: ExprKind :: Unary ( ast:: UnOp :: Neg , e) => {
660- matches ! ( & e. kind, ast:: ExprKind :: Lit ( _) )
661- }
662- _ => false ,
663- } ,
664- _ => false ,
665- } ,
666+ // njn: fix up
667+ // Interpolated(ref nt) => match &**nt {
668+ // NtLiteral(_) => true,
669+ // NtExpr(e) => match &e.kind {
670+ // ast::ExprKind::Lit(_) => true,
671+ // ast::ExprKind::Unary(ast::UnOp::Neg, e) => {
672+ // matches!(&e.kind, ast::ExprKind::Lit(_))
673+ // }
674+ // _ => false,
675+ // },
676+ // _ => false,
677+ // },
666678 // njn: too simple compared to what's above?
667679 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
668680 NonterminalKind :: Literal | NonterminalKind :: Expr ( _) ,
@@ -674,14 +686,19 @@ impl Token {
674686 pub fn can_begin_string_literal ( & self ) -> bool {
675687 match self . uninterpolate ( ) . kind {
676688 Literal ( ..) => true ,
677- Interpolated ( ref nt) => match & * * nt {
678- NtLiteral ( _) => true ,
679- NtExpr ( e) => match & e. kind {
680- ast:: ExprKind :: Lit ( _) => true ,
681- _ => false ,
682- } ,
683- _ => false ,
684- } ,
689+ // njn: fix up
690+ // Interpolated(ref nt) => match &**nt {
691+ // NtLiteral(_) => true,
692+ // NtExpr(e) => match &e.kind {
693+ // ast::ExprKind::Lit(_) => true,
694+ // _ => false,
695+ // },
696+ // _ => false,
697+ // },
698+ // njn: too simple compared to what's above?
699+ OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
700+ NonterminalKind :: Literal | NonterminalKind :: Expr ( _) ,
701+ ) ) ) => true ,
685702 _ => false ,
686703 }
687704 }
@@ -736,16 +753,19 @@ impl Token {
736753 self . ident ( ) . is_some_and ( |( ident, _) | ident. name == name)
737754 }
738755
739- /// Would `maybe_whole_expr ` in `parser.rs` return `Ok(..)`?
756+ /// Would `maybe_reparse_metavar_expr ` in `parser.rs` return `Ok(..)`?
740757 /// That is, is this a pre-parsed expression dropped into the token stream
741758 /// (which happens while parsing the result of macro expansion)?
742- pub fn is_whole_expr ( & self ) -> bool {
743- #[ allow( irrefutable_let_patterns) ] // njn: temp
759+ pub fn is_metavar_expr ( & self ) -> bool {
760+ #[ allow( irrefutable_let_patterns) ] // FIXME: temporary
744761 if let Interpolated ( nt) = & self . kind
745- && let NtExpr ( _ ) | NtLiteral ( _) = & * * nt
762+ && let NtBlock ( _) = & * * nt
746763 {
747764 true
748- } else if matches ! ( self . is_metavar_seq( ) , Some ( NonterminalKind :: Path ) ) {
765+ } else if matches ! (
766+ self . is_metavar_seq( ) ,
767+ Some ( NonterminalKind :: Expr ( _) | NonterminalKind :: Literal | NonterminalKind :: Path )
768+ ) {
749769 true
750770 } else {
751771 false
@@ -754,6 +774,7 @@ impl Token {
754774
755775 /// Is the token an interpolated block (`$b:block`)?
756776 pub fn is_whole_block ( & self ) -> bool {
777+ #[ allow( irrefutable_let_patterns) ] // FIXME: temporary
757778 if let Interpolated ( nt) = & self . kind
758779 && let NtBlock ( ..) = & * * nt
759780 {
@@ -947,8 +968,6 @@ pub enum NtExprKind {
947968/// For interpolation during macro expansion.
948969pub enum Nonterminal {
949970 NtBlock ( P < ast:: Block > ) ,
950- NtExpr ( P < ast:: Expr > ) ,
951- NtLiteral ( P < ast:: Expr > ) ,
952971}
953972
954973#[ derive( Debug , Copy , Clone , PartialEq , Eq , Encodable , Decodable , Hash , HashStable_Generic ) ]
@@ -1038,15 +1057,12 @@ impl Nonterminal {
10381057 pub fn use_span ( & self ) -> Span {
10391058 match self {
10401059 NtBlock ( block) => block. span ,
1041- NtExpr ( expr) | NtLiteral ( expr) => expr. span ,
10421060 }
10431061 }
10441062
10451063 pub fn descr ( & self ) -> & ' static str {
10461064 match self {
10471065 NtBlock ( ..) => "block" ,
1048- NtExpr ( ..) => "expression" ,
1049- NtLiteral ( ..) => "literal" ,
10501066 }
10511067 }
10521068}
@@ -1065,8 +1081,6 @@ impl fmt::Debug for Nonterminal {
10651081 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
10661082 match * self {
10671083 NtBlock ( ..) => f. pad ( "NtBlock(..)" ) ,
1068- NtExpr ( ..) => f. pad ( "NtExpr(..)" ) ,
1069- NtLiteral ( ..) => f. pad ( "NtLiteral(..)" ) ,
10701084 }
10711085 }
10721086}
@@ -1088,7 +1102,7 @@ mod size_asserts {
10881102 // tidy-alphabetical-start
10891103 static_assert_size ! ( Lit , 12 ) ;
10901104 static_assert_size ! ( LitKind , 2 ) ;
1091- static_assert_size ! ( Nonterminal , 16 ) ;
1105+ static_assert_size ! ( Nonterminal , 8 ) ;
10921106 static_assert_size ! ( Token , 24 ) ;
10931107 static_assert_size ! ( TokenKind , 16 ) ;
10941108 // tidy-alphabetical-end
0 commit comments