@@ -4,7 +4,6 @@ pub use Nonterminal::*;
44pub use TokenKind :: * ;
55
66use crate :: ast;
7- use crate :: ptr:: P ;
87use crate :: util:: case:: Case ;
98
109use rustc_data_structures:: stable_hasher:: { HashStable , StableHasher } ;
@@ -134,17 +133,27 @@ impl Lit {
134133 }
135134 }
136135
137- /// Keep this in sync with `Token::can_begin_literal_maybe_minus` excluding unary negation.
136+ /// Keep this in sync with `Token::can_begin_literal_maybe_minus` and
137+ /// `Parser::maybe_parse_token_lit` (excluding unary negation).
138138 pub fn from_token ( token : & Token ) -> Option < Lit > {
139139 match token. uninterpolate ( ) . kind {
140140 Ident ( name, IdentIsRaw :: No ) if name. is_bool_lit ( ) => Some ( Lit :: new ( Bool , name, None ) ) ,
141141 Literal ( token_lit) => Some ( token_lit) ,
142- // njn: deal with later, with NtExpr/NtLiteral
143- Interpolated ( ref nt)
144- if let NtExpr ( expr) | NtLiteral ( expr) = & nt. 0
145- && let ast:: ExprKind :: Lit ( token_lit) = expr. kind =>
146- {
147- Some ( token_lit)
142+ OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar ( NonterminalKind :: Literal ) ) ) => {
143+ panic ! ( "njn: FROM_TOKEN (1)" ) ;
144+ // if let NtExpr(expr) | NtLiteral(expr) = &**nt
145+ // && let ast::ExprKind::Lit(token_lit) = expr.kind =>
146+ // {
147+ // Some(token_lit)
148+ // }
149+ }
150+ OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar ( NonterminalKind :: Expr ) ) ) => {
151+ panic ! ( "njn: FROM_TOKEN (2)" ) ;
152+ // if let NtExpr(expr) | NtLiteral(expr) = &**nt
153+ // && let ast::ExprKind::Lit(token_lit) = expr.kind =>
154+ // {
155+ // Some(token_lit)
156+ // }
148157 }
149158 _ => None ,
150159 }
@@ -464,6 +473,7 @@ impl Token {
464473 Token :: new ( Ident ( ident. name , ident. is_raw_guess ( ) . into ( ) ) , ident. span )
465474 }
466475
476+ /// njn: phase this out in favour of Parser::uninterpolated_span
467477 /// For interpolated tokens, returns a span of the fragment to which the interpolated
468478 /// token refers. For all other tokens this is just a regular span.
469479 /// It is particularly important to use this for identifiers and lifetimes
@@ -520,7 +530,6 @@ impl Token {
520530 PathSep | // global path
521531 Lifetime ( ..) | // labeled loop
522532 Pound => true , // expression attributes
523- Interpolated ( ref nt) => matches ! ( & nt. 0 , NtLiteral ( ..) | NtExpr ( ..) ) ,
524533 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
525534 NonterminalKind :: Block |
526535 NonterminalKind :: Expr |
@@ -547,7 +556,6 @@ impl Token {
547556 | DotDot | DotDotDot | DotDotEq // ranges
548557 | Lt | BinOp ( Shl ) // associated path
549558 | PathSep => true , // global path
550- Interpolated ( ref nt) => matches ! ( & nt. 0 , NtLiteral ( ..) ) ,
551559 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
552560 NonterminalKind :: Block |
553561 NonterminalKind :: PatParam { .. } |
@@ -588,7 +596,6 @@ impl Token {
588596 pub fn can_begin_const_arg ( & self ) -> bool {
589597 match self . kind {
590598 OpenDelim ( Delimiter :: Brace ) => true ,
591- Interpolated ( ref nt) => matches ! ( & nt. 0 , NtExpr ( ..) | NtLiteral ( ..) ) ,
592599 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
593600 NonterminalKind :: Expr | NonterminalKind :: Block | NonterminalKind :: Literal ,
594601 ) ) ) => true ,
@@ -631,22 +638,24 @@ impl Token {
631638 ///
632639 /// In other words, would this token be a valid start of `parse_literal_maybe_minus`?
633640 ///
634- /// Keep this in sync with and `Lit::from_token`, excluding unary negation.
641+ /// Keep this in sync with `Lit::from_token` and
642+ /// `Parser::maybe_parse_token_lit` (excluding unary negation).
635643 pub fn can_begin_literal_maybe_minus ( & self ) -> bool {
636644 match self . uninterpolate ( ) . kind {
637645 Literal ( ..) | BinOp ( Minus ) => true ,
638646 Ident ( name, IdentIsRaw :: No ) if name. is_bool_lit ( ) => true ,
639- Interpolated ( ref nt) => match & nt. 0 {
640- NtLiteral ( _) => true ,
641- NtExpr ( e) => match & e. kind {
642- ast:: ExprKind :: Lit ( _) => true ,
643- ast:: ExprKind :: Unary ( ast:: UnOp :: Neg , e) => {
644- matches ! ( & e. kind, ast:: ExprKind :: Lit ( _) )
645- }
646- _ => false ,
647- } ,
648- _ => false ,
649- } ,
647+ // njn: fix up
648+ // Interpolated(ref nt) => match &nt.0 {
649+ // NtLiteral(_) => true,
650+ // NtExpr(e) => match &e.kind {
651+ // ast::ExprKind::Lit(_) => true,
652+ // ast::ExprKind::Unary(ast::UnOp::Neg, e) => {
653+ // matches!(&e.kind, ast::ExprKind::Lit(_))
654+ // }
655+ // _ => false,
656+ // },
657+ // _ => false,
658+ // },
650659 // njn: too simple compared to what's above?
651660 OpenDelim ( Delimiter :: Invisible ( InvisibleOrigin :: MetaVar (
652661 NonterminalKind :: Literal | NonterminalKind :: Expr ,
@@ -667,7 +676,6 @@ impl Token {
667676 Cow :: Owned ( Token :: new ( Ident ( ident. name , * is_raw) , ident. span ) )
668677 }
669678 NtLifetime ( ident) => Cow :: Owned ( Token :: new ( Lifetime ( ident. name ) , ident. span ) ) ,
670- _ => Cow :: Borrowed ( self ) ,
671679 } ,
672680 _ => Cow :: Borrowed ( self ) ,
673681 }
@@ -719,23 +727,19 @@ impl Token {
719727 self . ident ( ) . is_some_and ( |( ident, _) | ident. name == name)
720728 }
721729
722- /// Would `maybe_whole_expr ` in `parser.rs` return `Ok(..)`?
730+ /// Would `maybe_reparse_metavar_expr ` in `parser.rs` return `Ok(..)`?
723731 /// That is, is this a pre-parsed expression dropped into the token stream
724732 /// (which happens while parsing the result of macro expansion)?
725- pub fn is_whole_expr ( & self ) -> bool {
726- // njn: nothing needed, just deal with NtExpr/NtLiteral/NtPath/NtBlock later
727- if let Interpolated ( nt) = & self . kind
728- && let NtExpr ( _) | NtLiteral ( _) = & nt. 0
729- {
730- true
731- } else if matches ! (
733+ pub fn is_metavar_expr ( & self ) -> bool {
734+ matches ! (
732735 self . is_metavar_seq( ) ,
733- Some ( NonterminalKind :: Block | NonterminalKind :: Path )
734- ) {
735- true
736- } else {
737- false
738- }
736+ Some (
737+ NonterminalKind :: Expr
738+ | NonterminalKind :: Literal
739+ | NonterminalKind :: Block
740+ | NonterminalKind :: Path
741+ )
742+ )
739743 }
740744
741745 /// Are we at a block from a metavar (`$b:block`)?
@@ -904,10 +908,8 @@ impl PartialEq<TokenKind> for Token {
904908#[ derive( Clone , Encodable , Decodable ) ]
905909/// For interpolation during macro expansion.
906910pub enum Nonterminal {
907- NtExpr ( P < ast:: Expr > ) ,
908911 NtIdent ( Ident , IdentIsRaw ) ,
909912 NtLifetime ( Ident ) ,
910- NtLiteral ( P < ast:: Expr > ) ,
911913}
912914
913915#[ derive( Debug , Copy , Clone , PartialEq , Eq , Encodable , Decodable , Hash , HashStable_Generic ) ]
@@ -991,15 +993,12 @@ impl fmt::Display for NonterminalKind {
991993impl Nonterminal {
992994 pub fn use_span ( & self ) -> Span {
993995 match self {
994- NtExpr ( expr) | NtLiteral ( expr) => expr. span ,
995996 NtIdent ( ident, _) | NtLifetime ( ident) => ident. span ,
996997 }
997998 }
998999
9991000 pub fn descr ( & self ) -> & ' static str {
10001001 match self {
1001- NtExpr ( ..) => "expression" ,
1002- NtLiteral ( ..) => "literal" ,
10031002 NtIdent ( ..) => "identifier" ,
10041003 NtLifetime ( ..) => "lifetime" ,
10051004 }
@@ -1025,9 +1024,7 @@ impl PartialEq for Nonterminal {
10251024impl fmt:: Debug for Nonterminal {
10261025 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
10271026 match * self {
1028- NtExpr ( ..) => f. pad ( "NtExpr(..)" ) ,
10291027 NtIdent ( ..) => f. pad ( "NtIdent(..)" ) ,
1030- NtLiteral ( ..) => f. pad ( "NtLiteral(..)" ) ,
10311028 NtLifetime ( ..) => f. pad ( "NtLifetime(..)" ) ,
10321029 }
10331030 }
0 commit comments