Skip to content

Commit f1c32c1

Browse files
committed
Move desugaring code into its own function.
It's not hot, so shouldn't be within the always inlined part.
1 parent d235ac7 commit f1c32c1

File tree

1 file changed

+60
-67
lines changed
  • compiler/rustc_parse/src/parser

1 file changed

+60
-67
lines changed

compiler/rustc_parse/src/parser/mod.rs

Lines changed: 60 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -261,25 +261,28 @@ impl TokenCursor {
261261
/// This always-inlined version should only be used on hot code paths.
262262
#[inline(always)]
263263
fn inlined_next(&mut self, desugar_doc_comments: bool) -> (Token, Spacing) {
264-
let (token, spacing) = loop {
264+
loop {
265265
if !self.frame.open_delim {
266266
self.frame.open_delim = true;
267267
return (
268268
Token::new(token::OpenDelim(self.frame.delim), self.frame.span.open),
269269
Spacing::Alone,
270270
);
271271
} else if let Some((tree, spacing)) = self.frame.tree_cursor.next_with_spacing() {
272-
match tree {
273-
TokenTree::Token(token) => {
274-
break (token, spacing);
275-
}
272+
return match tree {
273+
TokenTree::Token(token) => match (desugar_doc_comments, &token) {
274+
(true, &Token { kind: token::DocComment(_, attr_style, data), span }) => {
275+
self.desugar(attr_style, data, span)
276+
}
277+
_ => (token, spacing),
278+
},
276279
TokenTree::Delimited(sp, delim, tts) => {
277280
// Set `open_delim` to true here because we deal with it immediately.
278281
let frame = TokenCursorFrame::new(sp, delim, true, tts, false);
279282
self.stack.push(mem::replace(&mut self.frame, frame));
280-
return (Token::new(token::OpenDelim(delim), sp.open), Spacing::Alone);
283+
(Token::new(token::OpenDelim(delim), sp.open), Spacing::Alone)
281284
}
282-
}
285+
};
283286
} else if !self.frame.close_delim {
284287
self.frame.close_delim = true;
285288
return (
@@ -291,69 +294,59 @@ impl TokenCursor {
291294
} else {
292295
return (Token::new(token::Eof, DUMMY_SP), Spacing::Alone);
293296
}
294-
};
297+
}
298+
}
295299

296-
match (desugar_doc_comments, &token) {
297-
(true, &Token { kind: token::DocComment(_, attr_style, data), span }) => {
298-
// Searches for the occurrences of `"#*` and returns the minimum number of `#`s
299-
// required to wrap the text.
300-
let mut num_of_hashes = 0;
301-
let mut count = 0;
302-
for ch in data.as_str().chars() {
303-
count = match ch {
304-
'"' => 1,
305-
'#' if count > 0 => count + 1,
306-
_ => 0,
307-
};
308-
num_of_hashes = cmp::max(num_of_hashes, count);
309-
}
300+
fn desugar(&mut self, attr_style: AttrStyle, data: Symbol, span: Span) -> (Token, Spacing) {
301+
// Searches for the occurrences of `"#*` and returns the minimum number of `#`s
302+
// required to wrap the text.
303+
let mut num_of_hashes = 0;
304+
let mut count = 0;
305+
for ch in data.as_str().chars() {
306+
count = match ch {
307+
'"' => 1,
308+
'#' if count > 0 => count + 1,
309+
_ => 0,
310+
};
311+
num_of_hashes = cmp::max(num_of_hashes, count);
312+
}
310313

311-
let delim_span = DelimSpan::from_single(span);
312-
let body = TokenTree::Delimited(
313-
delim_span,
314-
token::Bracket,
315-
[
316-
TokenTree::token(token::Ident(sym::doc, false), span),
317-
TokenTree::token(token::Eq, span),
318-
TokenTree::token(
319-
TokenKind::lit(token::StrRaw(num_of_hashes), data, None),
320-
span,
321-
),
322-
]
323-
.iter()
324-
.cloned()
325-
.collect::<TokenStream>(),
326-
);
314+
let delim_span = DelimSpan::from_single(span);
315+
let body = TokenTree::Delimited(
316+
delim_span,
317+
token::Bracket,
318+
[
319+
TokenTree::token(token::Ident(sym::doc, false), span),
320+
TokenTree::token(token::Eq, span),
321+
TokenTree::token(TokenKind::lit(token::StrRaw(num_of_hashes), data, None), span),
322+
]
323+
.iter()
324+
.cloned()
325+
.collect::<TokenStream>(),
326+
);
327327

328-
self.stack.push(mem::replace(
329-
&mut self.frame,
330-
TokenCursorFrame::new(
331-
delim_span,
332-
token::NoDelim,
333-
false,
334-
if attr_style == AttrStyle::Inner {
335-
[
336-
TokenTree::token(token::Pound, span),
337-
TokenTree::token(token::Not, span),
338-
body,
339-
]
340-
.iter()
341-
.cloned()
342-
.collect::<TokenStream>()
343-
} else {
344-
[TokenTree::token(token::Pound, span), body]
345-
.iter()
346-
.cloned()
347-
.collect::<TokenStream>()
348-
},
349-
false,
350-
),
351-
));
352-
353-
self.next(/* desugar_doc_comments */ false)
354-
}
355-
_ => (token, spacing),
356-
}
328+
self.stack.push(mem::replace(
329+
&mut self.frame,
330+
TokenCursorFrame::new(
331+
delim_span,
332+
token::NoDelim,
333+
false,
334+
if attr_style == AttrStyle::Inner {
335+
[TokenTree::token(token::Pound, span), TokenTree::token(token::Not, span), body]
336+
.iter()
337+
.cloned()
338+
.collect::<TokenStream>()
339+
} else {
340+
[TokenTree::token(token::Pound, span), body]
341+
.iter()
342+
.cloned()
343+
.collect::<TokenStream>()
344+
},
345+
false,
346+
),
347+
));
348+
349+
self.next(/* desugar_doc_comments */ false)
357350
}
358351
}
359352

0 commit comments

Comments
 (0)