Recover out of an enum or struct's braced block.
If we encounter a syntax error inside of a braced block, then we should fail by consuming the rest of the block if possible. This implements such recovery for enums and structs. Fixes #37113.
This commit is contained in:
parent
a5b6a9fa8a
commit
c9036ccffe
5 changed files with 112 additions and 2 deletions
|
@ -5132,7 +5132,11 @@ impl<'a> Parser<'a> {
|
|||
let mut fields = Vec::new();
|
||||
if self.eat(&token::OpenDelim(token::Brace)) {
|
||||
while self.token != token::CloseDelim(token::Brace) {
|
||||
fields.push(self.parse_struct_decl_field()?);
|
||||
fields.push(self.parse_struct_decl_field().map_err(|e| {
|
||||
self.recover_stmt();
|
||||
self.eat(&token::CloseDelim(token::Brace));
|
||||
e
|
||||
})?);
|
||||
}
|
||||
|
||||
self.bump();
|
||||
|
@ -5660,7 +5664,11 @@ impl<'a> Parser<'a> {
|
|||
generics.where_clause = self.parse_where_clause()?;
|
||||
self.expect(&token::OpenDelim(token::Brace))?;
|
||||
|
||||
let enum_definition = self.parse_enum_def(&generics)?;
|
||||
let enum_definition = self.parse_enum_def(&generics).map_err(|e| {
|
||||
self.recover_stmt();
|
||||
self.eat(&token::CloseDelim(token::Brace));
|
||||
e
|
||||
})?;
|
||||
Ok((id, ItemKind::Enum(enum_definition, generics), None))
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue