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:
parent
d235ac7801
commit
f1c32c10c4
1 changed files with 62 additions and 69 deletions
|
@ -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)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue