@@ -511,14 +511,13 @@ impl<'a> Parser<'a> {
511
511
}
512
512
513
513
pub fn this_token_descr ( & self ) -> String {
514
- let s = self . this_token_to_string ( ) ;
515
- if self . token . is_strict_keyword ( ) {
516
- format ! ( "keyword `{}`" , s)
517
- } else if self . token . is_reserved_keyword ( ) {
518
- format ! ( "reserved keyword `{}`" , s)
519
- } else {
520
- format ! ( "`{}`" , s)
521
- }
514
+ let prefix = match & self . token {
515
+ t if t. is_special_ident ( ) => "reserved identifier " ,
516
+ t if t. is_used_keyword ( ) => "keyword " ,
517
+ t if t. is_unused_keyword ( ) => "reserved keyword " ,
518
+ _ => "" ,
519
+ } ;
520
+ format ! ( "{}`{}`" , prefix, self . this_token_to_string( ) )
522
521
}
523
522
524
523
pub fn unexpected_last < T > ( & self , t : & token:: Token ) -> PResult < ' a , T > {
@@ -637,10 +636,12 @@ impl<'a> Parser<'a> {
637
636
}
638
637
639
638
pub fn parse_ident ( & mut self ) -> PResult < ' a , ast:: Ident > {
640
- self . check_strict_keywords ( ) ;
641
- self . check_reserved_keywords ( ) ;
642
639
match self . token {
643
640
token:: Ident ( i) => {
641
+ if self . token . is_reserved_ident ( ) {
642
+ self . span_err ( self . span , & format ! ( "expected identifier, found {}" ,
643
+ self . this_token_descr( ) ) ) ;
644
+ }
644
645
self . bump ( ) ;
645
646
Ok ( i)
646
647
}
@@ -713,25 +714,6 @@ impl<'a> Parser<'a> {
713
714
}
714
715
}
715
716
716
- /// Signal an error if the given string is a strict keyword
717
- pub fn check_strict_keywords ( & mut self ) {
718
- if self . token . is_strict_keyword ( ) {
719
- let token_str = self . this_token_to_string ( ) ;
720
- let span = self . span ;
721
- self . span_err ( span,
722
- & format ! ( "expected identifier, found keyword `{}`" ,
723
- token_str) ) ;
724
- }
725
- }
726
-
727
- /// Signal an error if the current token is a reserved keyword
728
- pub fn check_reserved_keywords ( & mut self ) {
729
- if self . token . is_reserved_keyword ( ) {
730
- let token_str = self . this_token_to_string ( ) ;
731
- self . fatal ( & format ! ( "`{}` is a reserved keyword" , token_str) ) . emit ( )
732
- }
733
- }
734
-
735
717
fn check_ident ( & mut self ) -> bool {
736
718
if self . token . is_ident ( ) {
737
719
true
@@ -2301,7 +2283,7 @@ impl<'a> Parser<'a> {
2301
2283
ex = ExprKind :: Break ( lt, e) ;
2302
2284
hi = self . prev_span ;
2303
2285
} else if self . token . is_keyword ( keywords:: Let ) {
2304
- // Catch this syntax error here, instead of in `check_strict_keywords `, so
2286
+ // Catch this syntax error here, instead of in `parse_ident `, so
2305
2287
// that we can explicitly mention that let is not to be used as an expression
2306
2288
let mut db = self . fatal ( "expected expression, found statement (`let`)" ) ;
2307
2289
db. note ( "variable declaration using `let` is a statement" ) ;
@@ -3540,7 +3522,7 @@ impl<'a> Parser<'a> {
3540
3522
// Parse box pat
3541
3523
let subpat = self . parse_pat ( ) ?;
3542
3524
pat = PatKind :: Box ( subpat) ;
3543
- } else if self . token . is_ident ( ) && !self . token . is_any_keyword ( ) &&
3525
+ } else if self . token . is_ident ( ) && !self . token . is_reserved_ident ( ) &&
3544
3526
self . parse_as_ident ( ) {
3545
3527
// Parse ident @ pat
3546
3528
// This can give false positives and parse nullary enums,
@@ -3815,7 +3797,7 @@ impl<'a> Parser<'a> {
3815
3797
3816
3798
fn is_union_item ( & self ) -> bool {
3817
3799
self . token . is_keyword ( keywords:: Union ) &&
3818
- self . look_ahead ( 1 , |t| t. is_ident ( ) && !t. is_any_keyword ( ) )
3800
+ self . look_ahead ( 1 , |t| t. is_ident ( ) && !t. is_reserved_ident ( ) )
3819
3801
}
3820
3802
3821
3803
fn is_defaultness ( & self ) -> bool {
0 commit comments