@@ -80,7 +80,7 @@ use crate::parse::{Directory, ParseSess};
80
80
use crate :: parse:: parser:: { Parser , PathStyle } ;
81
81
use crate :: parse:: token:: { self , DocComment , Nonterminal , Token } ;
82
82
use crate :: print:: pprust;
83
- use crate :: symbol:: kw ;
83
+ use crate :: symbol:: { kw , sym , Symbol } ;
84
84
use crate :: tokenstream:: { DelimSpan , TokenStream } ;
85
85
86
86
use errors:: FatalError ;
@@ -598,7 +598,7 @@ fn inner_parse_loop<'root, 'tt>(
598
598
TokenTree :: MetaVarDecl ( _, _, id) => {
599
599
// Built-in nonterminals never start with these tokens,
600
600
// so we can eliminate them from consideration.
601
- if may_begin_with ( & * id. as_str ( ) , token) {
601
+ if may_begin_with ( id. name , token) {
602
602
bb_items. push ( item) ;
603
603
}
604
604
}
@@ -784,7 +784,7 @@ pub fn parse(
784
784
let match_cur = item. match_cur ;
785
785
item. push_match (
786
786
match_cur,
787
- MatchedNonterminal ( Lrc :: new ( parse_nt ( & mut parser, span, & ident. as_str ( ) ) ) ) ,
787
+ MatchedNonterminal ( Lrc :: new ( parse_nt ( & mut parser, span, ident. name ) ) ) ,
788
788
) ;
789
789
item. idx += 1 ;
790
790
item. match_cur += 1 ;
@@ -812,7 +812,7 @@ fn get_macro_ident(token: &Token) -> Option<(Ident, bool)> {
812
812
///
813
813
/// Returning `false` is a *stability guarantee* that such a matcher will *never* begin with that
814
814
/// token. Be conservative (return true) if not sure.
815
- fn may_begin_with ( name : & str , token : & Token ) -> bool {
815
+ fn may_begin_with ( name : Symbol , token : & Token ) -> bool {
816
816
/// Checks whether the non-terminal may contain a single (non-keyword) identifier.
817
817
fn may_be_ident ( nt : & token:: Nonterminal ) -> bool {
818
818
match * nt {
@@ -822,16 +822,16 @@ fn may_begin_with(name: &str, token: &Token) -> bool {
822
822
}
823
823
824
824
match name {
825
- " expr" => token. can_begin_expr ( ) ,
826
- "ty" => token. can_begin_type ( ) ,
827
- " ident" => get_macro_ident ( token) . is_some ( ) ,
828
- " literal" => token. can_begin_literal_or_bool ( ) ,
829
- " vis" => match * token {
825
+ sym :: expr => token. can_begin_expr ( ) ,
826
+ sym :: ty => token. can_begin_type ( ) ,
827
+ sym :: ident => get_macro_ident ( token) . is_some ( ) ,
828
+ sym :: literal => token. can_begin_literal_or_bool ( ) ,
829
+ sym :: vis => match * token {
830
830
// The follow-set of :vis + "priv" keyword + interpolated
831
831
Token :: Comma | Token :: Ident ( ..) | Token :: Interpolated ( _) => true ,
832
832
_ => token. can_begin_type ( ) ,
833
833
} ,
834
- " block" => match * token {
834
+ sym :: block => match * token {
835
835
Token :: OpenDelim ( token:: Brace ) => true ,
836
836
Token :: Interpolated ( ref nt) => match * * nt {
837
837
token:: NtItem ( _)
@@ -845,15 +845,15 @@ fn may_begin_with(name: &str, token: &Token) -> bool {
845
845
} ,
846
846
_ => false ,
847
847
} ,
848
- " path" | " meta" => match * token {
848
+ sym :: path | sym :: meta => match * token {
849
849
Token :: ModSep | Token :: Ident ( ..) => true ,
850
850
Token :: Interpolated ( ref nt) => match * * nt {
851
851
token:: NtPath ( _) | token:: NtMeta ( _) => true ,
852
852
_ => may_be_ident ( & nt) ,
853
853
} ,
854
854
_ => false ,
855
855
} ,
856
- " pat" => match * token {
856
+ sym :: pat => match * token {
857
857
Token :: Ident ( ..) | // box, ref, mut, and other identifiers (can stricten)
858
858
Token :: OpenDelim ( token:: Paren ) | // tuple pattern
859
859
Token :: OpenDelim ( token:: Bracket ) | // slice pattern
@@ -869,7 +869,7 @@ fn may_begin_with(name: &str, token: &Token) -> bool {
869
869
Token :: Interpolated ( ref nt) => may_be_ident ( nt) ,
870
870
_ => false ,
871
871
} ,
872
- " lifetime" => match * token {
872
+ sym :: lifetime => match * token {
873
873
Token :: Lifetime ( _) => true ,
874
874
Token :: Interpolated ( ref nt) => match * * nt {
875
875
token:: NtLifetime ( _) | token:: NtTT ( _) => true ,
@@ -896,34 +896,34 @@ fn may_begin_with(name: &str, token: &Token) -> bool {
896
896
/// # Returns
897
897
///
898
898
/// The parsed non-terminal.
899
- fn parse_nt < ' a > ( p : & mut Parser < ' a > , sp : Span , name : & str ) -> Nonterminal {
900
- if name == "tt" {
899
+ fn parse_nt < ' a > ( p : & mut Parser < ' a > , sp : Span , name : Symbol ) -> Nonterminal {
900
+ if name == sym :: tt {
901
901
return token:: NtTT ( p. parse_token_tree ( ) ) ;
902
902
}
903
903
// check at the beginning and the parser checks after each bump
904
904
p. process_potential_macro_variable ( ) ;
905
905
match name {
906
- " item" => match panictry ! ( p. parse_item( ) ) {
906
+ sym :: item => match panictry ! ( p. parse_item( ) ) {
907
907
Some ( i) => token:: NtItem ( i) ,
908
908
None => {
909
909
p. fatal ( "expected an item keyword" ) . emit ( ) ;
910
910
FatalError . raise ( ) ;
911
911
}
912
912
} ,
913
- " block" => token:: NtBlock ( panictry ! ( p. parse_block( ) ) ) ,
914
- " stmt" => match panictry ! ( p. parse_stmt( ) ) {
913
+ sym :: block => token:: NtBlock ( panictry ! ( p. parse_block( ) ) ) ,
914
+ sym :: stmt => match panictry ! ( p. parse_stmt( ) ) {
915
915
Some ( s) => token:: NtStmt ( s) ,
916
916
None => {
917
917
p. fatal ( "expected a statement" ) . emit ( ) ;
918
918
FatalError . raise ( ) ;
919
919
}
920
920
} ,
921
- " pat" => token:: NtPat ( panictry ! ( p. parse_pat( None ) ) ) ,
922
- " expr" => token:: NtExpr ( panictry ! ( p. parse_expr( ) ) ) ,
923
- " literal" => token:: NtLiteral ( panictry ! ( p. parse_literal_maybe_minus( ) ) ) ,
924
- "ty" => token:: NtTy ( panictry ! ( p. parse_ty( ) ) ) ,
921
+ sym :: pat => token:: NtPat ( panictry ! ( p. parse_pat( None ) ) ) ,
922
+ sym :: expr => token:: NtExpr ( panictry ! ( p. parse_expr( ) ) ) ,
923
+ sym :: literal => token:: NtLiteral ( panictry ! ( p. parse_literal_maybe_minus( ) ) ) ,
924
+ sym :: ty => token:: NtTy ( panictry ! ( p. parse_ty( ) ) ) ,
925
925
// this could be handled like a token, since it is one
926
- " ident" => if let Some ( ( ident, is_raw) ) = get_macro_ident ( & p. token ) {
926
+ sym :: ident => if let Some ( ( ident, is_raw) ) = get_macro_ident ( & p. token ) {
927
927
let span = p. span ;
928
928
p. bump ( ) ;
929
929
token:: NtIdent ( Ident :: new ( ident. name , span) , is_raw)
@@ -932,10 +932,10 @@ fn parse_nt<'a>(p: &mut Parser<'a>, sp: Span, name: &str) -> Nonterminal {
932
932
p. fatal ( & format ! ( "expected ident, found {}" , & token_str) ) . emit ( ) ;
933
933
FatalError . raise ( )
934
934
}
935
- " path" => token:: NtPath ( panictry ! ( p. parse_path( PathStyle :: Type ) ) ) ,
936
- " meta" => token:: NtMeta ( panictry ! ( p. parse_meta_item( ) ) ) ,
937
- " vis" => token:: NtVis ( panictry ! ( p. parse_visibility( true ) ) ) ,
938
- " lifetime" => if p. check_lifetime ( ) {
935
+ sym :: path => token:: NtPath ( panictry ! ( p. parse_path( PathStyle :: Type ) ) ) ,
936
+ sym :: meta => token:: NtMeta ( panictry ! ( p. parse_meta_item( ) ) ) ,
937
+ sym :: vis => token:: NtVis ( panictry ! ( p. parse_visibility( true ) ) ) ,
938
+ sym :: lifetime => if p. check_lifetime ( ) {
939
939
token:: NtLifetime ( p. expect_lifetime ( ) . ident )
940
940
} else {
941
941
let token_str = pprust:: token_to_string ( & p. token ) ;
0 commit comments