@@ -107,7 +107,7 @@ impl Lit {
107
107
/// Keep this in sync with `Token::can_begin_literal_or_bool` excluding unary negation.
108
108
pub fn from_token ( token : & Token ) -> Option < Lit > {
109
109
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 ) ) ,
111
111
Literal ( token_lit) => Some ( token_lit) ,
112
112
Interpolated ( ref nt)
113
113
if let NtExpr ( expr) | NtLiteral ( expr) = & nt. 0
@@ -183,7 +183,7 @@ impl LitKind {
183
183
}
184
184
}
185
185
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 {
187
187
let ident_token = Token :: new ( Ident ( name, is_raw) , span) ;
188
188
189
189
!ident_token. is_reserved_ident ( )
@@ -214,7 +214,7 @@ pub fn ident_can_begin_expr(name: Symbol, span: Span, is_raw: bool) -> bool {
214
214
. contains ( & name)
215
215
}
216
216
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 {
218
218
let ident_token = Token :: new ( Ident ( name, is_raw) , span) ;
219
219
220
220
!ident_token. is_reserved_ident ( )
@@ -223,6 +223,24 @@ fn ident_can_begin_type(name: Symbol, span: Span, is_raw: bool) -> bool {
223
223
. contains ( & name)
224
224
}
225
225
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
+
226
244
// SAFETY: due to the `Clone` impl below, all fields of all variants other than
227
245
// `Interpolated` must impl `Copy`.
228
246
#[ derive( PartialEq , Encodable , Decodable , Debug , HashStable_Generic ) ]
@@ -298,7 +316,7 @@ pub enum TokenKind {
298
316
/// Do not forget about `NtIdent` when you want to match on identifiers.
299
317
/// It's recommended to use `Token::(ident,uninterpolate,uninterpolated_span)` to
300
318
/// treat regular and interpolated identifiers in the same way.
301
- Ident ( Symbol , /* is_raw */ bool ) ,
319
+ Ident ( Symbol , IdentIsRaw ) ,
302
320
/// Lifetime identifier token.
303
321
/// Do not forget about `NtLifetime` when you want to match on lifetime identifiers.
304
322
/// It's recommended to use `Token::(lifetime,uninterpolate,uninterpolated_span)` to
@@ -411,7 +429,7 @@ impl Token {
411
429
412
430
/// Recovers a `Token` from an `Ident`. This creates a raw identifier if necessary.
413
431
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 )
415
433
}
416
434
417
435
/// For interpolated tokens, returns a span of the fragment to which the interpolated
@@ -567,7 +585,7 @@ impl Token {
567
585
pub fn can_begin_literal_maybe_minus ( & self ) -> bool {
568
586
match self . uninterpolate ( ) . kind {
569
587
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 ,
571
589
Interpolated ( ref nt) => match & nt. 0 {
572
590
NtLiteral ( _) => true ,
573
591
NtExpr ( e) => match & e. kind {
@@ -602,7 +620,7 @@ impl Token {
602
620
603
621
/// Returns an identifier if this token is an identifier.
604
622
#[ inline]
605
- pub fn ident ( & self ) -> Option < ( Ident , /* is_raw */ bool ) > {
623
+ pub fn ident ( & self ) -> Option < ( Ident , IdentIsRaw ) > {
606
624
// We avoid using `Token::uninterpolate` here because it's slow.
607
625
match & self . kind {
608
626
& Ident ( name, is_raw) => Some ( ( Ident :: new ( name, self . span ) , is_raw) ) ,
@@ -755,7 +773,7 @@ impl Token {
755
773
/// Returns `true` if the token is a non-raw identifier for which `pred` holds.
756
774
pub fn is_non_raw_ident_where ( & self , pred : impl FnOnce ( Ident ) -> bool ) -> bool {
757
775
match self . ident ( ) {
758
- Some ( ( id, false ) ) => pred ( id) ,
776
+ Some ( ( id, IdentIsRaw :: No ) ) => pred ( id) ,
759
777
_ => false ,
760
778
}
761
779
}
@@ -806,7 +824,7 @@ impl Token {
806
824
_ => return None ,
807
825
} ,
808
826
SingleQuote => match joint. kind {
809
- Ident ( name, false ) => Lifetime ( Symbol :: intern ( & format ! ( "'{name}" ) ) ) ,
827
+ Ident ( name, IdentIsRaw :: No ) => Lifetime ( Symbol :: intern ( & format ! ( "'{name}" ) ) ) ,
810
828
_ => return None ,
811
829
} ,
812
830
@@ -836,7 +854,7 @@ pub enum Nonterminal {
836
854
NtPat ( P < ast:: Pat > ) ,
837
855
NtExpr ( P < ast:: Expr > ) ,
838
856
NtTy ( P < ast:: Ty > ) ,
839
- NtIdent ( Ident , /* is_raw */ bool ) ,
857
+ NtIdent ( Ident , IdentIsRaw ) ,
840
858
NtLifetime ( Ident ) ,
841
859
NtLiteral ( P < ast:: Expr > ) ,
842
860
/// Stuff inside brackets for attributes
0 commit comments