@@ -107,7 +107,7 @@ impl Lit {
107107 /// Keep this in sync with `Token::can_begin_literal_or_bool` excluding unary negation.
108108 pub fn from_token ( token : & Token ) -> Option < Lit > {
109109 match token. uninterpolate ( ) . kind {
110- Ident ( name, false ) if name. is_bool_lit ( ) => Some ( Lit :: new ( Bool , name, None ) ) ,
110+ Ident ( name, IdentIsRaw :: No ) if name. is_bool_lit ( ) => Some ( Lit :: new ( Bool , name, None ) ) ,
111111 Literal ( token_lit) => Some ( token_lit) ,
112112 Interpolated ( ref nt)
113113 if let NtExpr ( expr) | NtLiteral ( expr) = & nt. 0
@@ -183,7 +183,7 @@ impl LitKind {
183183 }
184184}
185185
186- pub fn ident_can_begin_expr ( name : Symbol , span : Span , is_raw : bool ) -> bool {
186+ pub fn ident_can_begin_expr ( name : Symbol , span : Span , is_raw : IdentIsRaw ) -> bool {
187187 let ident_token = Token :: new ( Ident ( name, is_raw) , span) ;
188188
189189 !ident_token. is_reserved_ident ( )
@@ -214,7 +214,7 @@ pub fn ident_can_begin_expr(name: Symbol, span: Span, is_raw: bool) -> bool {
214214 . contains ( & name)
215215}
216216
217- fn ident_can_begin_type ( name : Symbol , span : Span , is_raw : bool ) -> bool {
217+ fn ident_can_begin_type ( name : Symbol , span : Span , is_raw : IdentIsRaw ) -> bool {
218218 let ident_token = Token :: new ( Ident ( name, is_raw) , span) ;
219219
220220 !ident_token. is_reserved_ident ( )
@@ -223,6 +223,24 @@ fn ident_can_begin_type(name: Symbol, span: Span, is_raw: bool) -> bool {
223223 . contains ( & name)
224224}
225225
226+ #[ derive( PartialEq , Encodable , Decodable , Debug , Copy , Clone , HashStable_Generic ) ]
227+ pub enum IdentIsRaw {
228+ No ,
229+ Yes ,
230+ }
231+
232+ impl From < bool > for IdentIsRaw {
233+ fn from ( b : bool ) -> Self {
234+ if b { Self :: Yes } else { Self :: No }
235+ }
236+ }
237+
238+ impl From < IdentIsRaw > for bool {
239+ fn from ( is_raw : IdentIsRaw ) -> bool {
240+ matches ! ( is_raw, IdentIsRaw :: Yes )
241+ }
242+ }
243+
226244// SAFETY: due to the `Clone` impl below, all fields of all variants other than
227245// `Interpolated` must impl `Copy`.
228246#[ derive( PartialEq , Encodable , Decodable , Debug , HashStable_Generic ) ]
@@ -298,7 +316,7 @@ pub enum TokenKind {
298316 /// Do not forget about `NtIdent` when you want to match on identifiers.
299317 /// It's recommended to use `Token::(ident,uninterpolate,uninterpolated_span)` to
300318 /// treat regular and interpolated identifiers in the same way.
301- Ident ( Symbol , /* is_raw */ bool ) ,
319+ Ident ( Symbol , IdentIsRaw ) ,
302320 /// Lifetime identifier token.
303321 /// Do not forget about `NtLifetime` when you want to match on lifetime identifiers.
304322 /// It's recommended to use `Token::(lifetime,uninterpolate,uninterpolated_span)` to
@@ -411,7 +429,7 @@ impl Token {
411429
412430 /// Recovers a `Token` from an `Ident`. This creates a raw identifier if necessary.
413431 pub fn from_ast_ident ( ident : Ident ) -> Self {
414- Token :: new ( Ident ( ident. name , ident. is_raw_guess ( ) ) , ident. span )
432+ Token :: new ( Ident ( ident. name , ident. is_raw_guess ( ) . into ( ) ) , ident. span )
415433 }
416434
417435 /// For interpolated tokens, returns a span of the fragment to which the interpolated
@@ -567,7 +585,7 @@ impl Token {
567585 pub fn can_begin_literal_maybe_minus ( & self ) -> bool {
568586 match self . uninterpolate ( ) . kind {
569587 Literal ( ..) | BinOp ( Minus ) => true ,
570- Ident ( name, false ) if name. is_bool_lit ( ) => true ,
588+ Ident ( name, IdentIsRaw :: No ) if name. is_bool_lit ( ) => true ,
571589 Interpolated ( ref nt) => match & nt. 0 {
572590 NtLiteral ( _) => true ,
573591 NtExpr ( e) => match & e. kind {
@@ -602,7 +620,7 @@ impl Token {
602620
603621 /// Returns an identifier if this token is an identifier.
604622 #[ inline]
605- pub fn ident ( & self ) -> Option < ( Ident , /* is_raw */ bool ) > {
623+ pub fn ident ( & self ) -> Option < ( Ident , IdentIsRaw ) > {
606624 // We avoid using `Token::uninterpolate` here because it's slow.
607625 match & self . kind {
608626 & Ident ( name, is_raw) => Some ( ( Ident :: new ( name, self . span ) , is_raw) ) ,
@@ -755,7 +773,7 @@ impl Token {
755773 /// Returns `true` if the token is a non-raw identifier for which `pred` holds.
756774 pub fn is_non_raw_ident_where ( & self , pred : impl FnOnce ( Ident ) -> bool ) -> bool {
757775 match self . ident ( ) {
758- Some ( ( id, false ) ) => pred ( id) ,
776+ Some ( ( id, IdentIsRaw :: No ) ) => pred ( id) ,
759777 _ => false ,
760778 }
761779 }
@@ -806,7 +824,7 @@ impl Token {
806824 _ => return None ,
807825 } ,
808826 SingleQuote => match joint. kind {
809- Ident ( name, false ) => Lifetime ( Symbol :: intern ( & format ! ( "'{name}" ) ) ) ,
827+ Ident ( name, IdentIsRaw :: No ) => Lifetime ( Symbol :: intern ( & format ! ( "'{name}" ) ) ) ,
810828 _ => return None ,
811829 } ,
812830
@@ -836,7 +854,7 @@ pub enum Nonterminal {
836854 NtPat ( P < ast:: Pat > ) ,
837855 NtExpr ( P < ast:: Expr > ) ,
838856 NtTy ( P < ast:: Ty > ) ,
839- NtIdent ( Ident , /* is_raw */ bool ) ,
857+ NtIdent ( Ident , IdentIsRaw ) ,
840858 NtLifetime ( Ident ) ,
841859 NtLiteral ( P < ast:: Expr > ) ,
842860 /// Stuff inside brackets for attributes
0 commit comments