Remove WhereClause::Error

Chalk doesn't have it, and judging from the removed code, it wasn't
useful anyway.
This commit is contained in:
Florian Diebold 2021-03-20 10:51:00 +01:00
parent 7a5fb37cf1
commit 8e7e405f6a
7 changed files with 8 additions and 42 deletions

View file

@ -731,16 +731,6 @@ fn write_bounds_like_dyn_trait(
} }
ty.hir_fmt(f)?; ty.hir_fmt(f)?;
} }
WhereClause::Error => {
if angle_open {
// impl Trait<X, {error}>
write!(f, ", ")?;
} else if !first {
// impl Trait + {error}
write!(f, " + ")?;
}
p.hir_fmt(f)?;
}
} }
first = false; first = false;
} }
@ -796,7 +786,7 @@ impl HirDisplay for WhereClause {
)?; )?;
ty.hir_fmt(f)?; ty.hir_fmt(f)?;
} }
WhereClause::AliasEq(_) | WhereClause::Error => write!(f, "{{error}}")?, WhereClause::AliasEq(_) => write!(f, "{{error}}")?,
} }
Ok(()) Ok(())
} }

View file

@ -569,16 +569,9 @@ pub enum WhereClause {
Implemented(TraitRef), Implemented(TraitRef),
/// An associated type bindings like in `Iterator<Item = T>`. /// An associated type bindings like in `Iterator<Item = T>`.
AliasEq(AliasEq), AliasEq(AliasEq),
/// We couldn't resolve the trait reference. (If some type parameters can't
/// be resolved, they will just be Unknown).
Error,
} }
impl WhereClause { impl WhereClause {
pub fn is_error(&self) -> bool {
matches!(self, WhereClause::Error)
}
pub fn is_implemented(&self) -> bool { pub fn is_implemented(&self) -> bool {
matches!(self, WhereClause::Implemented(_)) matches!(self, WhereClause::Implemented(_))
} }
@ -589,7 +582,7 @@ impl WhereClause {
WhereClause::AliasEq(AliasEq { alias: AliasTy::Projection(proj), .. }) => { WhereClause::AliasEq(AliasEq { alias: AliasTy::Projection(proj), .. }) => {
Some(proj.trait_ref(db)) Some(proj.trait_ref(db))
} }
WhereClause::AliasEq(_) | WhereClause::Error => None, WhereClause::AliasEq(_) => None,
} }
} }
} }
@ -599,7 +592,6 @@ impl TypeWalk for WhereClause {
match self { match self {
WhereClause::Implemented(trait_ref) => trait_ref.walk(f), WhereClause::Implemented(trait_ref) => trait_ref.walk(f),
WhereClause::AliasEq(alias_eq) => alias_eq.walk(f), WhereClause::AliasEq(alias_eq) => alias_eq.walk(f),
WhereClause::Error => {}
} }
} }
@ -611,7 +603,6 @@ impl TypeWalk for WhereClause {
match self { match self {
WhereClause::Implemented(trait_ref) => trait_ref.walk_mut_binders(f, binders), WhereClause::Implemented(trait_ref) => trait_ref.walk_mut_binders(f, binders),
WhereClause::AliasEq(alias_eq) => alias_eq.walk_mut_binders(f, binders), WhereClause::AliasEq(alias_eq) => alias_eq.walk_mut_binders(f, binders),
WhereClause::Error => {}
} }
} }
} }

View file

@ -703,10 +703,10 @@ impl<'a> TyLoweringContext<'a> {
let trait_ref = match bound { let trait_ref = match bound {
TypeBound::Path(path) => { TypeBound::Path(path) => {
bindings = self.lower_trait_ref_from_path(path, Some(self_ty)); bindings = self.lower_trait_ref_from_path(path, Some(self_ty));
Some(bindings.clone().map_or(WhereClause::Error, WhereClause::Implemented)) bindings.clone().map(WhereClause::Implemented)
} }
TypeBound::Lifetime(_) => None, TypeBound::Lifetime(_) => None,
TypeBound::Error => Some(WhereClause::Error), TypeBound::Error => None,
}; };
trait_ref.into_iter().chain( trait_ref.into_iter().chain(
bindings bindings
@ -919,9 +919,6 @@ pub(crate) fn trait_environment_query(
let mut clauses = Vec::new(); let mut clauses = Vec::new();
for pred in resolver.where_predicates_in_scope() { for pred in resolver.where_predicates_in_scope() {
for pred in ctx.lower_where_predicate(pred) { for pred in ctx.lower_where_predicate(pred) {
if pred.is_error() {
continue;
}
if let WhereClause::Implemented(tr) = &pred { if let WhereClause::Implemented(tr) = &pred {
traits_in_scope.push((tr.self_type_parameter().clone(), tr.hir_trait_id())); traits_in_scope.push((tr.self_type_parameter().clone(), tr.hir_trait_id()));
} }

View file

@ -1412,8 +1412,8 @@ fn weird_bounds() {
50..51 'b': impl 50..51 'b': impl
69..70 'c': impl Trait 69..70 'c': impl Trait
86..87 'd': impl 86..87 'd': impl
107..108 'e': impl {error} 107..108 'e': impl
123..124 'f': impl Trait + {error} 123..124 'f': impl Trait
147..149 '{}': () 147..149 '{}': ()
"#]], "#]],
); );

View file

@ -100,7 +100,6 @@ impl Obligation {
match predicate { match predicate {
WhereClause::Implemented(trait_ref) => Some(Obligation::Trait(trait_ref)), WhereClause::Implemented(trait_ref) => Some(Obligation::Trait(trait_ref)),
WhereClause::AliasEq(alias_eq) => Some(Obligation::AliasEq(alias_eq)), WhereClause::AliasEq(alias_eq) => Some(Obligation::AliasEq(alias_eq)),
WhereClause::Error => None,
} }
} }
} }

View file

@ -187,13 +187,7 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> {
let data = &datas.value.impl_traits[idx as usize]; let data = &datas.value.impl_traits[idx as usize];
let bound = OpaqueTyDatumBound { let bound = OpaqueTyDatumBound {
bounds: make_binders( bounds: make_binders(
data.bounds data.bounds.value.iter().cloned().map(|b| b.to_chalk(self.db)).collect(),
.value
.iter()
.cloned()
.filter(|b| !b.is_error())
.map(|b| b.to_chalk(self.db))
.collect(),
1, 1,
), ),
where_clauses: make_binders(vec![], 0), where_clauses: make_binders(vec![], 0),

View file

@ -98,7 +98,7 @@ impl ToChalk for Ty {
TyKind::Dyn(predicates) => { TyKind::Dyn(predicates) => {
let where_clauses = chalk_ir::QuantifiedWhereClauses::from_iter( let where_clauses = chalk_ir::QuantifiedWhereClauses::from_iter(
&Interner, &Interner,
predicates.iter().filter(|p| !p.is_error()).cloned().map(|p| p.to_chalk(db)), predicates.iter().cloned().map(|p| p.to_chalk(db)),
); );
let bounded_ty = chalk_ir::DynTy { let bounded_ty = chalk_ir::DynTy {
bounds: make_binders(where_clauses, 1), bounds: make_binders(where_clauses, 1),
@ -318,7 +318,6 @@ impl ToChalk for WhereClause {
chalk_ir::WhereClause::AliasEq(alias_eq.to_chalk(db).shifted_in(&Interner)), chalk_ir::WhereClause::AliasEq(alias_eq.to_chalk(db).shifted_in(&Interner)),
0, 0,
), ),
WhereClause::Error => panic!("tried passing GenericPredicate::Error to Chalk"),
} }
} }
@ -521,10 +520,6 @@ pub(super) fn convert_where_clauses(
let generic_predicates = db.generic_predicates(def); let generic_predicates = db.generic_predicates(def);
let mut result = Vec::with_capacity(generic_predicates.len()); let mut result = Vec::with_capacity(generic_predicates.len());
for pred in generic_predicates.iter() { for pred in generic_predicates.iter() {
if pred.value.is_error() {
// skip errored predicates completely
continue;
}
result.push(pred.clone().subst(substs).to_chalk(db)); result.push(pred.clone().subst(substs).to_chalk(db));
} }
result result