Fix TyBuilder methods

This commit is contained in:
Florian Diebold 2021-04-07 21:12:42 +02:00
parent b24e6f6030
commit 1332e72d09

View file

@ -4,6 +4,7 @@ use std::iter;
use chalk_ir::{
cast::{Cast, CastTo, Caster},
fold::Fold,
interner::HasInterner,
AdtId, BoundVar, DebruijnIndex, Safety, Scalar,
};
@ -32,8 +33,7 @@ impl<D> TyBuilder<D> {
fn build_internal(self) -> (D, Substitution) {
assert_eq!(self.vec.len(), self.param_count);
// FIXME: would be good to have a way to construct a chalk_ir::Substitution from the interned form
let subst = Substitution::intern(self.vec);
let subst = Substitution::from_iter(&Interner, self.vec);
(self.data, subst)
}
@ -141,7 +141,7 @@ impl TyBuilder<hir_def::AdtId> {
self.vec.push(fallback().cast(&Interner));
} else {
// each default can depend on the previous parameters
let subst_so_far = Substitution::intern(self.vec.clone());
let subst_so_far = Substitution::from_iter(&Interner, self.vec.clone());
self.vec
.push(default_ty.clone().substitute(&Interner, &subst_so_far).cast(&Interner));
}
@ -196,13 +196,13 @@ impl TyBuilder<TypeAliasId> {
}
}
impl<T: TypeWalk + HasInterner<Interner = Interner>> TyBuilder<Binders<T>> {
impl<T: HasInterner<Interner = Interner> + Fold<Interner>> TyBuilder<Binders<T>> {
fn subst_binders(b: Binders<T>) -> Self {
let param_count = b.binders.len(&Interner);
TyBuilder::new(b, param_count)
}
pub fn build(self) -> T {
pub fn build(self) -> <T as Fold<Interner>>::Result {
let (b, subst) = self.build_internal();
b.substitute(&Interner, &subst)
}