diff options
| author | Aaron Hill <aa1ronham@gmail.com> | 2021-04-12 17:26:26 -0400 |
|---|---|---|
| committer | Aaron Hill <aa1ronham@gmail.com> | 2021-04-12 17:26:26 -0400 |
| commit | c6d67f83170adf586abc93adedc8048e325611e1 (patch) | |
| tree | 131c90037a8b13386b1eef9b43e7ceef3d1ec5d9 /compiler/rustc_parse/src | |
| parent | eb7b1a150f4433241510610b25a6bca295514fb0 (diff) | |
| download | rust-c6d67f83170adf586abc93adedc8048e325611e1.tar.gz rust-c6d67f83170adf586abc93adedc8048e325611e1.zip | |
Add fast path when None delimiters are not involved
Diffstat (limited to 'compiler/rustc_parse/src')
| -rw-r--r-- | compiler/rustc_parse/src/parser/mod.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/compiler/rustc_parse/src/parser/mod.rs b/compiler/rustc_parse/src/parser/mod.rs index 0aa4fc4a139..ed95a5661b1 100644 --- a/compiler/rustc_parse/src/parser/mod.rs +++ b/compiler/rustc_parse/src/parser/mod.rs @@ -929,6 +929,25 @@ impl<'a> Parser<'a> { return looker(&self.token); } + let frame = &self.token_cursor.frame; + if frame.delim != DelimToken::NoDelim { + let all_normal = (0..dist).all(|i| { + let token = frame.tree_cursor.look_ahead(i); + !matches!(token, Some(TokenTree::Delimited(_, DelimToken::NoDelim, _))) + }); + if all_normal { + return match frame.tree_cursor.look_ahead(dist - 1) { + Some(tree) => match tree { + TokenTree::Token(token) => looker(token), + TokenTree::Delimited(dspan, delim, _) => { + looker(&Token::new(token::OpenDelim(*delim), dspan.open)) + } + }, + None => looker(&Token::new(token::CloseDelim(frame.delim), frame.span.close)), + }; + } + } + let mut cursor = self.token_cursor.clone(); let mut i = 0; let mut token = Token::dummy(); |
