@@ -251,7 +251,7 @@ impl Token {
251251 Lt | BinOp ( Shl ) | // associated path
252252 ModSep => true , // global path
253253 Interpolated ( ref nt) => match nt. 0 {
254- NtIdent ( ..) | NtTy ( ..) | NtPath ( ..) => true ,
254+ NtIdent ( ..) | NtTy ( ..) | NtPath ( ..) | NtLifetime ( .. ) => true ,
255255 _ => false ,
256256 } ,
257257 _ => false ,
@@ -314,14 +314,26 @@ impl Token {
314314 false
315315 }
316316
317- /// Returns `true` if the token is a lifetime.
318- pub fn is_lifetime ( & self ) -> bool {
317+ /// Returns a lifetime with the span and a dummy id if it is a lifetime,
318+ /// or the original lifetime if it is an interpolated lifetime, ignoring
319+ /// the span.
320+ pub fn lifetime ( & self , span : Span ) -> Option < ast:: Lifetime > {
319321 match * self {
320- Lifetime ( ..) => true ,
321- _ => false ,
322+ Lifetime ( ident) =>
323+ Some ( ast:: Lifetime { ident : ident, span : span, id : ast:: DUMMY_NODE_ID } ) ,
324+ Interpolated ( ref nt) => match nt. 0 {
325+ NtLifetime ( lifetime) => Some ( lifetime) ,
326+ _ => None ,
327+ } ,
328+ _ => None ,
322329 }
323330 }
324331
332+ /// Returns `true` if the token is a lifetime.
333+ pub fn is_lifetime ( & self ) -> bool {
334+ self . lifetime ( syntax_pos:: DUMMY_SP ) . is_some ( )
335+ }
336+
325337 /// Returns `true` if the token is either the `mut` or `const` keyword.
326338 pub fn is_mutability ( & self ) -> bool {
327339 self . is_keyword ( keywords:: Mut ) ||
@@ -486,6 +498,10 @@ impl Token {
486498 let token = Token :: Ident ( ident. node ) ;
487499 tokens = Some ( TokenTree :: Token ( ident. span , token) . into ( ) ) ;
488500 }
501+ Nonterminal :: NtLifetime ( lifetime) => {
502+ let token = Token :: Lifetime ( lifetime. ident ) ;
503+ tokens = Some ( TokenTree :: Token ( lifetime. span , token) . into ( ) ) ;
504+ }
489505 Nonterminal :: NtTT ( ref tt) => {
490506 tokens = Some ( tt. clone ( ) . into ( ) ) ;
491507 }
@@ -524,6 +540,7 @@ pub enum Nonterminal {
524540 NtGenerics ( ast:: Generics ) ,
525541 NtWhereClause ( ast:: WhereClause ) ,
526542 NtArg ( ast:: Arg ) ,
543+ NtLifetime ( ast:: Lifetime ) ,
527544}
528545
529546impl fmt:: Debug for Nonterminal {
@@ -546,6 +563,7 @@ impl fmt::Debug for Nonterminal {
546563 NtWhereClause ( ..) => f. pad ( "NtWhereClause(..)" ) ,
547564 NtArg ( ..) => f. pad ( "NtArg(..)" ) ,
548565 NtVis ( ..) => f. pad ( "NtVis(..)" ) ,
566+ NtLifetime ( ..) => f. pad ( "NtLifetime(..)" ) ,
549567 }
550568 }
551569}
0 commit comments