@@ -74,7 +74,7 @@ pub use NamedMatch::*;
74
74
pub use ParseResult :: * ;
75
75
use TokenTreeOrTokenTreeSlice :: * ;
76
76
77
- use crate :: ast:: Ident ;
77
+ use crate :: ast:: { Ident , Name } ;
78
78
use crate :: ext:: tt:: quoted:: { self , TokenTree } ;
79
79
use crate :: parse:: { Directory , ParseSess } ;
80
80
use crate :: parse:: parser:: { Parser , PathStyle } ;
@@ -429,8 +429,8 @@ pub fn parse_failure_msg(tok: TokenKind) -> String {
429
429
430
430
/// Performs a token equality check, ignoring syntax context (that is, an unhygienic comparison)
431
431
fn token_name_eq ( t1 : & TokenKind , t2 : & TokenKind ) -> bool {
432
- if let ( Some ( ( id1 , is_raw1) ) , Some ( ( id2 , is_raw2) ) ) = ( t1. ident ( ) , t2. ident ( ) ) {
433
- id1 . name == id2 . name && is_raw1 == is_raw2
432
+ if let ( Some ( ( name1 , is_raw1) ) , Some ( ( name2 , is_raw2) ) ) = ( t1. ident_name ( ) , t2. ident_name ( ) ) {
433
+ name1 == name2 && is_raw1 == is_raw2
434
434
} else if let ( Some ( name1) , Some ( name2) ) = ( t1. lifetime_name ( ) , t2. lifetime_name ( ) ) {
435
435
name1 == name2
436
436
} else {
@@ -466,8 +466,7 @@ fn inner_parse_loop<'root, 'tt>(
466
466
next_items : & mut Vec < MatcherPosHandle < ' root , ' tt > > ,
467
467
eof_items : & mut SmallVec < [ MatcherPosHandle < ' root , ' tt > ; 1 ] > ,
468
468
bb_items : & mut SmallVec < [ MatcherPosHandle < ' root , ' tt > ; 1 ] > ,
469
- token : & TokenKind ,
470
- span : syntax_pos:: Span ,
469
+ token : & Token ,
471
470
) -> ParseResult < ( ) > {
472
471
// Pop items from `cur_items` until it is empty.
473
472
while let Some ( mut item) = cur_items. pop ( ) {
@@ -510,7 +509,7 @@ fn inner_parse_loop<'root, 'tt>(
510
509
// Add matches from this repetition to the `matches` of `up`
511
510
for idx in item. match_lo ..item. match_hi {
512
511
let sub = item. matches [ idx] . clone ( ) ;
513
- let span = DelimSpan :: from_pair ( item. sp_open , span) ;
512
+ let span = DelimSpan :: from_pair ( item. sp_open , token . span ) ;
514
513
new_pos. push_match ( idx, MatchedSeq ( sub, span) ) ;
515
514
}
516
515
@@ -598,7 +597,7 @@ fn inner_parse_loop<'root, 'tt>(
598
597
TokenTree :: MetaVarDecl ( _, _, id) => {
599
598
// Built-in nonterminals never start with these tokens,
600
599
// so we can eliminate them from consideration.
601
- if may_begin_with ( id. name , token ) {
600
+ if may_begin_with ( token , id. name ) {
602
601
bb_items. push ( item) ;
603
602
}
604
603
}
@@ -698,7 +697,6 @@ pub fn parse(
698
697
& mut eof_items,
699
698
& mut bb_items,
700
699
& parser. token ,
701
- parser. span ,
702
700
) {
703
701
Success ( _) => { }
704
702
Failure ( token, msg) => return Failure ( token, msg) ,
@@ -806,10 +804,9 @@ pub fn parse(
806
804
807
805
/// The token is an identifier, but not `_`.
808
806
/// We prohibit passing `_` to macros expecting `ident` for now.
809
- fn get_macro_ident ( token : & TokenKind ) -> Option < ( Ident , bool ) > {
807
+ fn get_macro_name ( token : & TokenKind ) -> Option < ( Name , bool ) > {
810
808
match * token {
811
- token:: Ident ( ident, is_raw) if ident. name != kw:: Underscore =>
812
- Some ( ( ident, is_raw) ) ,
809
+ token:: Ident ( name, is_raw) if name != kw:: Underscore => Some ( ( name, is_raw) ) ,
813
810
_ => None ,
814
811
}
815
812
}
@@ -818,7 +815,7 @@ fn get_macro_ident(token: &TokenKind) -> Option<(Ident, bool)> {
818
815
///
819
816
/// Returning `false` is a *stability guarantee* that such a matcher will *never* begin with that
820
817
/// token. Be conservative (return true) if not sure.
821
- fn may_begin_with ( name : Symbol , token : & TokenKind ) -> bool {
818
+ fn may_begin_with ( token : & Token , name : Name ) -> bool {
822
819
/// Checks whether the non-terminal may contain a single (non-keyword) identifier.
823
820
fn may_be_ident ( nt : & token:: Nonterminal ) -> bool {
824
821
match * nt {
@@ -830,14 +827,14 @@ fn may_begin_with(name: Symbol, token: &TokenKind) -> bool {
830
827
match name {
831
828
sym:: expr => token. can_begin_expr ( ) ,
832
829
sym:: ty => token. can_begin_type ( ) ,
833
- sym:: ident => get_macro_ident ( token) . is_some ( ) ,
830
+ sym:: ident => get_macro_name ( token) . is_some ( ) ,
834
831
sym:: literal => token. can_begin_literal_or_bool ( ) ,
835
- sym:: vis => match * token {
832
+ sym:: vis => match token. kind {
836
833
// The follow-set of :vis + "priv" keyword + interpolated
837
834
token:: Comma | token:: Ident ( ..) | token:: Interpolated ( _) => true ,
838
835
_ => token. can_begin_type ( ) ,
839
836
} ,
840
- sym:: block => match * token {
837
+ sym:: block => match token. kind {
841
838
token:: OpenDelim ( token:: Brace ) => true ,
842
839
token:: Interpolated ( ref nt) => match * * nt {
843
840
token:: NtItem ( _)
@@ -851,15 +848,15 @@ fn may_begin_with(name: Symbol, token: &TokenKind) -> bool {
851
848
} ,
852
849
_ => false ,
853
850
} ,
854
- sym:: path | sym:: meta => match * token {
851
+ sym:: path | sym:: meta => match token. kind {
855
852
token:: ModSep | token:: Ident ( ..) => true ,
856
853
token:: Interpolated ( ref nt) => match * * nt {
857
854
token:: NtPath ( _) | token:: NtMeta ( _) => true ,
858
855
_ => may_be_ident ( & nt) ,
859
856
} ,
860
857
_ => false ,
861
858
} ,
862
- sym:: pat => match * token {
859
+ sym:: pat => match token. kind {
863
860
token:: Ident ( ..) | // box, ref, mut, and other identifiers (can stricten)
864
861
token:: OpenDelim ( token:: Paren ) | // tuple pattern
865
862
token:: OpenDelim ( token:: Bracket ) | // slice pattern
@@ -875,15 +872,15 @@ fn may_begin_with(name: Symbol, token: &TokenKind) -> bool {
875
872
token:: Interpolated ( ref nt) => may_be_ident ( nt) ,
876
873
_ => false ,
877
874
} ,
878
- sym:: lifetime => match * token {
875
+ sym:: lifetime => match token. kind {
879
876
token:: Lifetime ( _) => true ,
880
877
token:: Interpolated ( ref nt) => match * * nt {
881
878
token:: NtLifetime ( _) | token:: NtTT ( _) => true ,
882
879
_ => false ,
883
880
} ,
884
881
_ => false ,
885
882
} ,
886
- _ => match * token {
883
+ _ => match token. kind {
887
884
token:: CloseDelim ( _) => false ,
888
885
_ => true ,
889
886
} ,
@@ -929,10 +926,10 @@ fn parse_nt<'a>(p: &mut Parser<'a>, sp: Span, name: Symbol) -> Nonterminal {
929
926
sym:: literal => token:: NtLiteral ( panictry ! ( p. parse_literal_maybe_minus( ) ) ) ,
930
927
sym:: ty => token:: NtTy ( panictry ! ( p. parse_ty( ) ) ) ,
931
928
// this could be handled like a token, since it is one
932
- sym:: ident => if let Some ( ( ident , is_raw) ) = get_macro_ident ( & p. token ) {
929
+ sym:: ident => if let Some ( ( name , is_raw) ) = get_macro_name ( & p. token ) {
933
930
let span = p. span ;
934
931
p. bump ( ) ;
935
- token:: NtIdent ( Ident :: new ( ident . name , span) , is_raw)
932
+ token:: NtIdent ( Ident :: new ( name, span) , is_raw)
936
933
} else {
937
934
let token_str = pprust:: token_to_string ( & p. token ) ;
938
935
p. fatal ( & format ! ( "expected ident, found {}" , & token_str) ) . emit ( ) ;
0 commit comments