diff options
| author | Aaron Hill <aa1ronham@gmail.com> | 2021-04-12 11:15:38 -0400 |
|---|---|---|
| committer | Aaron Hill <aa1ronham@gmail.com> | 2021-04-12 11:50:16 -0400 |
| commit | eb7b1a150f4433241510610b25a6bca295514fb0 (patch) | |
| tree | b09c518ffd0f007be274235992ee84aa0c936db8 /compiler/rustc_parse/src | |
| parent | c18c0ad2bc5988ca7953459e5a35ece8e69e35e7 (diff) | |
| download | rust-eb7b1a150f4433241510610b25a6bca295514fb0.tar.gz rust-eb7b1a150f4433241510610b25a6bca295514fb0.zip | |
Fix lookahead with None-delimited group
Diffstat (limited to 'compiler/rustc_parse/src')
| -rw-r--r-- | compiler/rustc_parse/src/parser/mod.rs | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/compiler/rustc_parse/src/parser/mod.rs b/compiler/rustc_parse/src/parser/mod.rs index 4b97c8b0a81..0aa4fc4a139 100644 --- a/compiler/rustc_parse/src/parser/mod.rs +++ b/compiler/rustc_parse/src/parser/mod.rs @@ -929,16 +929,20 @@ impl<'a> Parser<'a> { return looker(&self.token); } - let frame = &self.token_cursor.frame; - 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(); + while i < dist { + token = cursor.next().0; + if matches!( + token.kind, + token::OpenDelim(token::NoDelim) | token::CloseDelim(token::NoDelim) + ) { + continue; + } + i += 1; } + return looker(&token); } /// Returns whether any of the given keywords are `dist` tokens ahead of the current one. |
