@@ -12,7 +12,7 @@ use crate::symbol::kw;
1212use crate :: syntax:: parse:: parse_stream_from_source_str;
1313use crate :: tokenstream:: { self , DelimSpan , TokenStream , TokenTree } ;
1414
15- use syntax_pos:: symbol:: { self , Symbol } ;
15+ use syntax_pos:: symbol:: Symbol ;
1616use syntax_pos:: { self , Span , FileName , DUMMY_SP } ;
1717use log:: info;
1818
@@ -211,7 +211,7 @@ pub enum TokenKind {
211211
212212 /* Name components */
213213 Ident ( ast:: Ident , /* is_raw */ bool ) ,
214- Lifetime ( ast:: Ident ) ,
214+ Lifetime ( ast:: Name ) ,
215215
216216 Interpolated ( Lrc < Nonterminal > ) ,
217217
@@ -364,7 +364,23 @@ impl TokenKind {
364364 _ => false ,
365365 }
366366 }
367+ }
368+
369+ impl Token {
370+ /// Returns a lifetime identifier if this token is a lifetime.
371+ pub fn lifetime ( & self ) -> Option < ast:: Ident > {
372+ match self . kind {
373+ Lifetime ( name) => Some ( ast:: Ident :: new ( name, self . span ) ) ,
374+ Interpolated ( ref nt) => match * * nt {
375+ NtLifetime ( ident) => Some ( ident) ,
376+ _ => None ,
377+ } ,
378+ _ => None ,
379+ }
380+ }
381+ }
367382
383+ impl TokenKind {
368384 /// Returns an identifier if this token is an identifier.
369385 pub fn ident ( & self ) -> Option < ( ast:: Ident , /* is_raw */ bool ) > {
370386 match * self {
@@ -376,12 +392,12 @@ impl TokenKind {
376392 _ => None ,
377393 }
378394 }
379- /// Returns a lifetime identifier if this token is a lifetime.
380- pub fn lifetime ( & self ) -> Option < ast:: Ident > {
395+ /// Returns a lifetime name if this token is a lifetime.
396+ pub fn lifetime_name ( & self ) -> Option < ast:: Name > {
381397 match * self {
382- Lifetime ( ident ) => Some ( ident ) ,
398+ Lifetime ( name ) => Some ( name ) ,
383399 Interpolated ( ref nt) => match * * nt {
384- NtLifetime ( ident) => Some ( ident) ,
400+ NtLifetime ( ident) => Some ( ident. name ) ,
385401 _ => None ,
386402 } ,
387403 _ => None ,
@@ -393,7 +409,7 @@ impl TokenKind {
393409 }
394410 /// Returns `true` if the token is a lifetime.
395411 crate fn is_lifetime ( & self ) -> bool {
396- self . lifetime ( ) . is_some ( )
412+ self . lifetime_name ( ) . is_some ( )
397413 }
398414
399415 /// Returns `true` if the token is a identifier whose name is the given
@@ -521,13 +537,7 @@ impl TokenKind {
521537 _ => return None ,
522538 } ,
523539 SingleQuote => match joint {
524- Ident ( ident, false ) => {
525- let name = Symbol :: intern ( & format ! ( "'{}" , ident) ) ;
526- Lifetime ( symbol:: Ident {
527- name,
528- span : ident. span ,
529- } )
530- }
540+ Ident ( ident, false ) => Lifetime ( Symbol :: intern ( & format ! ( "'{}" , ident) ) ) ,
531541 _ => return None ,
532542 } ,
533543
@@ -597,7 +607,7 @@ impl TokenKind {
597607
598608 ( & Literal ( a) , & Literal ( b) ) => a == b,
599609
600- ( & Lifetime ( a) , & Lifetime ( b) ) => a. name == b. name ,
610+ ( & Lifetime ( a) , & Lifetime ( b) ) => a == b,
601611 ( & Ident ( a, b) , & Ident ( c, d) ) => b == d && ( a. name == c. name ||
602612 a. name == kw:: DollarCrate ||
603613 c. name == kw:: DollarCrate ) ,
@@ -732,8 +742,7 @@ impl Nonterminal {
732742 Some ( TokenTree :: token ( ident. span , token) . into ( ) )
733743 }
734744 Nonterminal :: NtLifetime ( ident) => {
735- let token = Lifetime ( ident) ;
736- Some ( TokenTree :: token ( ident. span , token) . into ( ) )
745+ Some ( TokenTree :: token ( ident. span , Lifetime ( ident. name ) ) . into ( ) )
737746 }
738747 Nonterminal :: NtTT ( ref tt) => {
739748 Some ( tt. clone ( ) . into ( ) )
0 commit comments