Skip to content

Commit eb7b1a1

Browse files
committed
Fix lookahead with None-delimited group
1 parent c18c0ad commit eb7b1a1

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

compiler/rustc_parse/src/parser/mod.rs

+13-9
Original file line numberDiff line numberDiff line change
@@ -929,16 +929,20 @@ impl<'a> Parser<'a> {
929929
return looker(&self.token);
930930
}
931931

932-
let frame = &self.token_cursor.frame;
933-
match frame.tree_cursor.look_ahead(dist - 1) {
934-
Some(tree) => match tree {
935-
TokenTree::Token(token) => looker(token),
936-
TokenTree::Delimited(dspan, delim, _) => {
937-
looker(&Token::new(token::OpenDelim(*delim), dspan.open))
938-
}
939-
},
940-
None => looker(&Token::new(token::CloseDelim(frame.delim), frame.span.close)),
932+
let mut cursor = self.token_cursor.clone();
933+
let mut i = 0;
934+
let mut token = Token::dummy();
935+
while i < dist {
936+
token = cursor.next().0;
937+
if matches!(
938+
token.kind,
939+
token::OpenDelim(token::NoDelim) | token::CloseDelim(token::NoDelim)
940+
) {
941+
continue;
942+
}
943+
i += 1;
941944
}
945+
return looker(&token);
942946
}
943947

944948
/// Returns whether any of the given keywords are `dist` tokens ahead of the current one.
+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// check-pass
2+
3+
macro_rules! make_struct {
4+
($name:ident) => {
5+
#[derive(Debug)]
6+
struct Foo {
7+
#[cfg(not(FALSE))]
8+
field: fn($name: bool)
9+
}
10+
}
11+
}
12+
13+
make_struct!(param_name);
14+
15+
fn main() {}

0 commit comments

Comments
 (0)