@@ -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
}
@@ -791,7 +791,7 @@ pub fn parse(
791
791
let match_cur = item. match_cur ;
792
792
item. push_match (
793
793
match_cur,
794
- MatchedNonterminal ( Lrc :: new ( parse_nt ( & mut parser, span, & ident. as_str ( ) ) ) ) ,
794
+ MatchedNonterminal ( Lrc :: new ( parse_nt ( & mut parser, span, ident. name ) ) ) ,
795
795
) ;
796
796
item. idx += 1 ;
797
797
item. match_cur += 1 ;
@@ -819,7 +819,7 @@ fn get_macro_ident(token: &Token) -> Option<(Ident, bool)> {
819
819
///
820
820
/// Returning `false` is a *stability guarantee* that such a matcher will *never* begin with that
821
821
/// token. Be conservative (return true) if not sure.
822
- fn may_begin_with ( name : & str , token : & Token ) -> bool {
822
+ fn may_begin_with ( name : Symbol , token : & Token ) -> bool {
823
823
/// Checks whether the non-terminal may contain a single (non-keyword) identifier.
824
824
fn may_be_ident ( nt : & token:: Nonterminal ) -> bool {
825
825
match * nt {
@@ -829,16 +829,16 @@ fn may_begin_with(name: &str, token: &Token) -> bool {
829
829
}
830
830
831
831
match name {
832
- " expr" => token. can_begin_expr ( ) ,
833
- "ty" => token. can_begin_type ( ) ,
834
- " ident" => get_macro_ident ( token) . is_some ( ) ,
835
- " literal" => token. can_begin_literal_or_bool ( ) ,
836
- " vis" => match * token {
832
+ sym :: expr => token. can_begin_expr ( ) ,
833
+ sym :: ty => token. can_begin_type ( ) ,
834
+ sym :: ident => get_macro_ident ( token) . is_some ( ) ,
835
+ sym :: literal => token. can_begin_literal_or_bool ( ) ,
836
+ sym :: vis => match * token {
837
837
// The follow-set of :vis + "priv" keyword + interpolated
838
838
Token :: Comma | Token :: Ident ( ..) | Token :: Interpolated ( _) => true ,
839
839
_ => token. can_begin_type ( ) ,
840
840
} ,
841
- " block" => match * token {
841
+ sym :: block => match * token {
842
842
Token :: OpenDelim ( token:: Brace ) => true ,
843
843
Token :: Interpolated ( ref nt) => match * * nt {
844
844
token:: NtItem ( _)
@@ -852,15 +852,15 @@ fn may_begin_with(name: &str, token: &Token) -> bool {
852
852
} ,
853
853
_ => false ,
854
854
} ,
855
- " path" | " meta" => match * token {
855
+ sym :: path | sym :: meta => match * token {
856
856
Token :: ModSep | Token :: Ident ( ..) => true ,
857
857
Token :: Interpolated ( ref nt) => match * * nt {
858
858
token:: NtPath ( _) | token:: NtMeta ( _) => true ,
859
859
_ => may_be_ident ( & nt) ,
860
860
} ,
861
861
_ => false ,
862
862
} ,
863
- " pat" => match * token {
863
+ sym :: pat => match * token {
864
864
Token :: Ident ( ..) | // box, ref, mut, and other identifiers (can stricten)
865
865
Token :: OpenDelim ( token:: Paren ) | // tuple pattern
866
866
Token :: OpenDelim ( token:: Bracket ) | // slice pattern
@@ -876,7 +876,7 @@ fn may_begin_with(name: &str, token: &Token) -> bool {
876
876
Token :: Interpolated ( ref nt) => may_be_ident ( nt) ,
877
877
_ => false ,
878
878
} ,
879
- " lifetime" => match * token {
879
+ sym :: lifetime => match * token {
880
880
Token :: Lifetime ( _) => true ,
881
881
Token :: Interpolated ( ref nt) => match * * nt {
882
882
token:: NtLifetime ( _) | token:: NtTT ( _) => true ,
@@ -903,34 +903,34 @@ fn may_begin_with(name: &str, token: &Token) -> bool {
903
903
/// # Returns
904
904
///
905
905
/// The parsed non-terminal.
906
- fn parse_nt < ' a > ( p : & mut Parser < ' a > , sp : Span , name : & str ) -> Nonterminal {
907
- if name == "tt" {
906
+ fn parse_nt < ' a > ( p : & mut Parser < ' a > , sp : Span , name : Symbol ) -> Nonterminal {
907
+ if name == sym :: tt {
908
908
return token:: NtTT ( p. parse_token_tree ( ) ) ;
909
909
}
910
910
// check at the beginning and the parser checks after each bump
911
911
p. process_potential_macro_variable ( ) ;
912
912
match name {
913
- " item" => match panictry ! ( p. parse_item( ) ) {
913
+ sym :: item => match panictry ! ( p. parse_item( ) ) {
914
914
Some ( i) => token:: NtItem ( i) ,
915
915
None => {
916
916
p. fatal ( "expected an item keyword" ) . emit ( ) ;
917
917
FatalError . raise ( ) ;
918
918
}
919
919
} ,
920
- " block" => token:: NtBlock ( panictry ! ( p. parse_block( ) ) ) ,
921
- " stmt" => match panictry ! ( p. parse_stmt( ) ) {
920
+ sym :: block => token:: NtBlock ( panictry ! ( p. parse_block( ) ) ) ,
921
+ sym :: stmt => match panictry ! ( p. parse_stmt( ) ) {
922
922
Some ( s) => token:: NtStmt ( s) ,
923
923
None => {
924
924
p. fatal ( "expected a statement" ) . emit ( ) ;
925
925
FatalError . raise ( ) ;
926
926
}
927
927
} ,
928
- " pat" => token:: NtPat ( panictry ! ( p. parse_pat( None ) ) ) ,
929
- " expr" => token:: NtExpr ( panictry ! ( p. parse_expr( ) ) ) ,
930
- " literal" => token:: NtLiteral ( panictry ! ( p. parse_literal_maybe_minus( ) ) ) ,
931
- "ty" => token:: NtTy ( panictry ! ( p. parse_ty( ) ) ) ,
928
+ sym :: pat => token:: NtPat ( panictry ! ( p. parse_pat( None ) ) ) ,
929
+ sym :: expr => token:: NtExpr ( panictry ! ( p. parse_expr( ) ) ) ,
930
+ sym :: literal => token:: NtLiteral ( panictry ! ( p. parse_literal_maybe_minus( ) ) ) ,
931
+ sym :: ty => token:: NtTy ( panictry ! ( p. parse_ty( ) ) ) ,
932
932
// this could be handled like a token, since it is one
933
- " ident" => if let Some ( ( ident, is_raw) ) = get_macro_ident ( & p. token ) {
933
+ sym :: ident => if let Some ( ( ident, is_raw) ) = get_macro_ident ( & p. token ) {
934
934
let span = p. span ;
935
935
p. bump ( ) ;
936
936
token:: NtIdent ( Ident :: new ( ident. name , span) , is_raw)
@@ -939,10 +939,10 @@ fn parse_nt<'a>(p: &mut Parser<'a>, sp: Span, name: &str) -> Nonterminal {
939
939
p. fatal ( & format ! ( "expected ident, found {}" , & token_str) ) . emit ( ) ;
940
940
FatalError . raise ( )
941
941
}
942
- " path" => token:: NtPath ( panictry ! ( p. parse_path( PathStyle :: Type ) ) ) ,
943
- " meta" => token:: NtMeta ( panictry ! ( p. parse_meta_item( ) ) ) ,
944
- " vis" => token:: NtVis ( panictry ! ( p. parse_visibility( true ) ) ) ,
945
- " lifetime" => if p. check_lifetime ( ) {
942
+ sym :: path => token:: NtPath ( panictry ! ( p. parse_path( PathStyle :: Type ) ) ) ,
943
+ sym :: meta => token:: NtMeta ( panictry ! ( p. parse_meta_item( ) ) ) ,
944
+ sym :: vis => token:: NtVis ( panictry ! ( p. parse_visibility( true ) ) ) ,
945
+ sym :: lifetime => if p. check_lifetime ( ) {
946
946
token:: NtLifetime ( p. expect_lifetime ( ) . ident )
947
947
} else {
948
948
let token_str = pprust:: token_to_string ( & p. token ) ;
0 commit comments