Move desugaring code into its own function.

It's not hot, so shouldn't be within the always inlined part.
This commit is contained in:
Nicholas Nethercote 2022-04-19 17:01:26 +10:00
parent d235ac7801
commit f1c32c10c4

View file

@ -261,7 +261,7 @@ impl TokenCursor {
/// This always-inlined version should only be used on hot code paths. /// This always-inlined version should only be used on hot code paths.
#[inline(always)] #[inline(always)]
fn inlined_next(&mut self, desugar_doc_comments: bool) -> (Token, Spacing) { fn inlined_next(&mut self, desugar_doc_comments: bool) -> (Token, Spacing) {
let (token, spacing) = loop { loop {
if !self.frame.open_delim { if !self.frame.open_delim {
self.frame.open_delim = true; self.frame.open_delim = true;
return ( return (
@ -269,17 +269,20 @@ impl TokenCursor {
Spacing::Alone, Spacing::Alone,
); );
} else if let Some((tree, spacing)) = self.frame.tree_cursor.next_with_spacing() { } else if let Some((tree, spacing)) = self.frame.tree_cursor.next_with_spacing() {
match tree { return match tree {
TokenTree::Token(token) => { TokenTree::Token(token) => match (desugar_doc_comments, &token) {
break (token, spacing); (true, &Token { kind: token::DocComment(_, attr_style, data), span }) => {
self.desugar(attr_style, data, span)
} }
_ => (token, spacing),
},
TokenTree::Delimited(sp, delim, tts) => { TokenTree::Delimited(sp, delim, tts) => {
// Set `open_delim` to true here because we deal with it immediately. // Set `open_delim` to true here because we deal with it immediately.
let frame = TokenCursorFrame::new(sp, delim, true, tts, false); let frame = TokenCursorFrame::new(sp, delim, true, tts, false);
self.stack.push(mem::replace(&mut self.frame, frame)); self.stack.push(mem::replace(&mut self.frame, frame));
return (Token::new(token::OpenDelim(delim), sp.open), Spacing::Alone); (Token::new(token::OpenDelim(delim), sp.open), Spacing::Alone)
}
} }
};
} else if !self.frame.close_delim { } else if !self.frame.close_delim {
self.frame.close_delim = true; self.frame.close_delim = true;
return ( return (
@ -291,10 +294,10 @@ impl TokenCursor {
} else { } else {
return (Token::new(token::Eof, DUMMY_SP), Spacing::Alone); return (Token::new(token::Eof, DUMMY_SP), Spacing::Alone);
} }
}; }
}
match (desugar_doc_comments, &token) { fn desugar(&mut self, attr_style: AttrStyle, data: Symbol, span: Span) -> (Token, Spacing) {
(true, &Token { kind: token::DocComment(_, attr_style, data), span }) => {
// Searches for the occurrences of `"#*` and returns the minimum number of `#`s // Searches for the occurrences of `"#*` and returns the minimum number of `#`s
// required to wrap the text. // required to wrap the text.
let mut num_of_hashes = 0; let mut num_of_hashes = 0;
@ -315,10 +318,7 @@ impl TokenCursor {
[ [
TokenTree::token(token::Ident(sym::doc, false), span), TokenTree::token(token::Ident(sym::doc, false), span),
TokenTree::token(token::Eq, span), TokenTree::token(token::Eq, span),
TokenTree::token( TokenTree::token(TokenKind::lit(token::StrRaw(num_of_hashes), data, None), span),
TokenKind::lit(token::StrRaw(num_of_hashes), data, None),
span,
),
] ]
.iter() .iter()
.cloned() .cloned()
@ -332,11 +332,7 @@ impl TokenCursor {
token::NoDelim, token::NoDelim,
false, false,
if attr_style == AttrStyle::Inner { if attr_style == AttrStyle::Inner {
[ [TokenTree::token(token::Pound, span), TokenTree::token(token::Not, span), body]
TokenTree::token(token::Pound, span),
TokenTree::token(token::Not, span),
body,
]
.iter() .iter()
.cloned() .cloned()
.collect::<TokenStream>() .collect::<TokenStream>()
@ -352,9 +348,6 @@ impl TokenCursor {
self.next(/* desugar_doc_comments */ false) self.next(/* desugar_doc_comments */ false)
} }
_ => (token, spacing),
}
}
} }
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]