Add Interner parameter to Binders::substitute

This commit is contained in:
Florian Diebold 2021-04-05 18:49:26 +02:00
parent 05eba0db3d
commit 30a339e038
14 changed files with 52 additions and 43 deletions

View file

@ -419,7 +419,7 @@ impl<'a> InferenceContext<'a> {
self.result.record_field_resolutions.insert(field.expr, field_def);
}
let field_ty = field_def.map_or(self.err_ty(), |it| {
field_types[it.local_id].clone().substitute(&substs)
field_types[it.local_id].clone().substitute(&Interner, &substs)
});
self.infer_expr_coerce(field.expr, &Expectation::has_type(field_ty));
}
@ -462,7 +462,7 @@ impl<'a> InferenceContext<'a> {
Some(
self.db.field_types((*s).into())[field.local_id]
.clone()
.substitute(&parameters),
.substitute(&Interner, &parameters),
)
} else {
None
@ -476,7 +476,7 @@ impl<'a> InferenceContext<'a> {
Some(
self.db.field_types((*u).into())[field.local_id]
.clone()
.substitute(&parameters),
.substitute(&Interner, &parameters),
)
} else {
None
@ -852,7 +852,7 @@ impl<'a> InferenceContext<'a> {
None => (receiver_ty, Binders::empty(&Interner, self.err_ty()), None),
};
let substs = self.substs_for_method_call(def_generics, generic_args, &derefed_receiver_ty);
let method_ty = method_ty.substitute(&substs);
let method_ty = method_ty.substitute(&Interner, &substs);
let method_ty = self.insert_type_vars(method_ty);
self.register_obligations_for_call(&method_ty);
let (expected_receiver_ty, param_tys, ret_ty) = match method_ty.callable_sig(self.db) {
@ -949,8 +949,10 @@ impl<'a> InferenceContext<'a> {
let def: CallableDefId = from_chalk(self.db, *fn_def);
let generic_predicates = self.db.generic_predicates(def.into());
for predicate in generic_predicates.iter() {
let (predicate, binders) =
predicate.clone().substitute(parameters).into_value_and_skipped_binders();
let (predicate, binders) = predicate
.clone()
.substitute(&Interner, parameters)
.into_value_and_skipped_binders();
always!(binders.len(&Interner) == 0); // quantified where clauses not yet handled
self.push_obligation(predicate.cast(&Interner));
}