Add ErrorGuaranteed
to Recovered::Yes
and use it more.
The starting point for this was identical comments on two different fields, in `ast::VariantData::Struct` and `hir::VariantData::Struct`: ``` // FIXME: investigate making this a `Option<ErrorGuaranteed>` recovered: bool ``` I tried that, and then found that I needed to add an `ErrorGuaranteed` to `Recovered::Yes`. Then I ended up using `Recovered` instead of `Option<ErrorGuaranteed>` for these two places and elsewhere, which required moving `ErrorGuaranteed` from `rustc_parse` to `rustc_ast`. This makes things more consistent, because `Recovered` is used in more places, and there are fewer uses of `bool` and `Option<ErrorGuaranteed>`. And safer, because it's difficult/impossible to set `recovered` to `Recovered::Yes` without having emitted an error.
This commit is contained in:
parent
87293c9585
commit
fd91925bce
16 changed files with 91 additions and 105 deletions
|
@ -1422,7 +1422,7 @@ pub enum ExprKind {
|
|||
/// of `if` / `while` expressions. (e.g., `if let 0 = x { .. }`).
|
||||
///
|
||||
/// `Span` represents the whole `let pat = expr` statement.
|
||||
Let(P<Pat>, P<Expr>, Span, Option<ErrorGuaranteed>),
|
||||
Let(P<Pat>, P<Expr>, Span, Recovered),
|
||||
/// An `if` block, with an optional `else` block.
|
||||
///
|
||||
/// `if expr { block } else { expr }`
|
||||
|
@ -2881,17 +2881,20 @@ pub struct FieldDef {
|
|||
pub is_placeholder: bool,
|
||||
}
|
||||
|
||||
/// Was parsing recovery performed?
|
||||
#[derive(Copy, Clone, Debug, Encodable, Decodable, HashStable_Generic)]
|
||||
pub enum Recovered {
|
||||
No,
|
||||
Yes(ErrorGuaranteed),
|
||||
}
|
||||
|
||||
/// Fields and constructor ids of enum variants and structs.
|
||||
#[derive(Clone, Encodable, Decodable, Debug)]
|
||||
pub enum VariantData {
|
||||
/// Struct variant.
|
||||
///
|
||||
/// E.g., `Bar { .. }` as in `enum Foo { Bar { .. } }`.
|
||||
Struct {
|
||||
fields: ThinVec<FieldDef>,
|
||||
// FIXME: investigate making this a `Option<ErrorGuaranteed>`
|
||||
recovered: bool,
|
||||
},
|
||||
Struct { fields: ThinVec<FieldDef>, recovered: Recovered },
|
||||
/// Tuple variant.
|
||||
///
|
||||
/// E.g., `Bar(..)` as in `enum Foo { Bar(..) }`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue