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:
@@ -1308,9 +1308,9 @@ pub struct LetExpr<'hir> {
|
||||
pub pat: &'hir Pat<'hir>,
|
||||
pub ty: Option<&'hir Ty<'hir>>,
|
||||
pub init: &'hir Expr<'hir>,
|
||||
/// `Some` when this let expressions is not in a syntanctically valid location.
|
||||
/// `Recovered::Yes` when this let expressions is not in a syntanctically valid location.
|
||||
/// Used to prevent building MIR in such situations.
|
||||
pub is_recovered: Option<ErrorGuaranteed>,
|
||||
pub recovered: ast::Recovered,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, HashStable_Generic)]
|
||||
@@ -3030,11 +3030,7 @@ pub enum VariantData<'hir> {
|
||||
/// A struct variant.
|
||||
///
|
||||
/// E.g., `Bar { .. }` as in `enum Foo { Bar { .. } }`.
|
||||
Struct {
|
||||
fields: &'hir [FieldDef<'hir>],
|
||||
// FIXME: investigate making this a `Option<ErrorGuaranteed>`
|
||||
recovered: bool,
|
||||
},
|
||||
Struct { fields: &'hir [FieldDef<'hir>], recovered: ast::Recovered },
|
||||
/// A tuple variant.
|
||||
///
|
||||
/// E.g., `Bar(..)` as in `enum Foo { Bar(..) }`.
|
||||
|
||||
Reference in New Issue
Block a user