Skip to content

Commit 637a93c

Browse files
committed
Speed up Token::{ident,lifetime}.
They're hot enough that the repeated matching done by `uninterpolate` has a measurable effect.
1 parent baaa3b6 commit 637a93c

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

compiler/rustc_ast/src/token.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -475,19 +475,29 @@ impl Token {
475475
}
476476

477477
/// Returns an identifier if this token is an identifier.
478+
#[inline]
478479
pub fn ident(&self) -> Option<(Ident, /* is_raw */ bool)> {
479-
let token = self.uninterpolate();
480-
match token.kind {
481-
Ident(name, is_raw) => Some((Ident::new(name, token.span), is_raw)),
480+
// We avoid using `Token::uninterpolate` here because it's slow.
481+
match &self.kind {
482+
&Ident(name, is_raw) => Some((Ident::new(name, self.span), is_raw)),
483+
Interpolated(nt) => match **nt {
484+
NtIdent(ident, is_raw) => Some((ident, is_raw)),
485+
_ => None,
486+
},
482487
_ => None,
483488
}
484489
}
485490

486491
/// Returns a lifetime identifier if this token is a lifetime.
492+
#[inline]
487493
pub fn lifetime(&self) -> Option<Ident> {
488-
let token = self.uninterpolate();
489-
match token.kind {
490-
Lifetime(name) => Some(Ident::new(name, token.span)),
494+
// We avoid using `Token::uninterpolate` here because it's slow.
495+
match &self.kind {
496+
&Lifetime(name) => Some(Ident::new(name, self.span)),
497+
Interpolated(nt) => match **nt {
498+
NtLifetime(ident) => Some(ident),
499+
_ => None,
500+
},
491501
_ => None,
492502
}
493503
}

0 commit comments

Comments
 (0)