@@ -511,14 +511,13 @@ impl<'a> Parser<'a> {
511511 }
512512
513513 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( ) )
522521 }
523522
524523 pub fn unexpected_last < T > ( & self , t : & token:: Token ) -> PResult < ' a , T > {
@@ -637,10 +636,12 @@ impl<'a> Parser<'a> {
637636 }
638637
639638 pub fn parse_ident ( & mut self ) -> PResult < ' a , ast:: Ident > {
640- self . check_strict_keywords ( ) ;
641- self . check_reserved_keywords ( ) ;
642639 match self . token {
643640 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+ }
644645 self . bump ( ) ;
645646 Ok ( i)
646647 }
@@ -713,25 +714,6 @@ impl<'a> Parser<'a> {
713714 }
714715 }
715716
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-
735717 fn check_ident ( & mut self ) -> bool {
736718 if self . token . is_ident ( ) {
737719 true
@@ -2301,7 +2283,7 @@ impl<'a> Parser<'a> {
23012283 ex = ExprKind :: Break ( lt, e) ;
23022284 hi = self . prev_span ;
23032285 } 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
23052287 // that we can explicitly mention that let is not to be used as an expression
23062288 let mut db = self . fatal ( "expected expression, found statement (`let`)" ) ;
23072289 db. note ( "variable declaration using `let` is a statement" ) ;
@@ -3540,7 +3522,7 @@ impl<'a> Parser<'a> {
35403522 // Parse box pat
35413523 let subpat = self . parse_pat ( ) ?;
35423524 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 ( ) &&
35443526 self . parse_as_ident ( ) {
35453527 // Parse ident @ pat
35463528 // This can give false positives and parse nullary enums,
@@ -3815,7 +3797,7 @@ impl<'a> Parser<'a> {
38153797
38163798 fn is_union_item ( & self ) -> bool {
38173799 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 ( ) )
38193801 }
38203802
38213803 fn is_defaultness ( & self ) -> bool {
0 commit comments