Skip to content

Commit

Permalink
fix perf issue in macro parser
Browse files Browse the repository at this point in the history
For a fuller description of the performance issue fixed by this:

#51754 (comment)
  • Loading branch information
ExpHP committed Jul 7, 2018
1 parent 9fd3d78 commit 191e76c
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/libsyntax/ext/tt/macro_parser.rs
Expand Up @@ -696,10 +696,17 @@ pub fn parse(
} else {
return Failure(parser.span, token::Eof);
}
} else {
// Performance hack: eof_items may share matchers via Rc with other things that we want
// to modify. Dropping eof_items now may drop these refcounts to 1, preventing an
// unnecessary implicit clone later in Rc::make_mut.
drop(eof_items);
}

// Another possibility is that we need to call out to parse some rust nonterminal
// (black-box) parser. However, if there is not EXACTLY ONE of these, something is wrong.
else if (!bb_items.is_empty() && !next_items.is_empty()) || bb_items.len() > 1 {
assert!(!token_name_eq(&parser.token, &token::Eof));
if (!bb_items.is_empty() && !next_items.is_empty()) || bb_items.len() > 1 {
let nts = bb_items
.iter()
.map(|item| match item.top_elts.get_tt(item.idx) {
Expand Down

0 comments on commit 191e76c

Please sign in to comment.