More TyBuilder use
This commit is contained in:
parent
66fec39aa0
commit
77333a571f
@ -8,7 +8,7 @@ use chalk_ir::{cast::Cast, Mutability, TyVariableKind};
|
|||||||
use hir_def::lang_item::LangItemTarget;
|
use hir_def::lang_item::LangItemTarget;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
autoderef, to_chalk_trait_id, traits::Solution, Interner, Substitution, TraitRef, Ty,
|
autoderef, traits::Solution, Interner, Ty,
|
||||||
TyBuilder, TyKind,
|
TyBuilder, TyKind,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -131,18 +131,15 @@ impl<'a> InferenceContext<'a> {
|
|||||||
_ => return None,
|
_ => return None,
|
||||||
};
|
};
|
||||||
|
|
||||||
let generic_params = crate::utils::generics(self.db.upcast(), coerce_unsized_trait.into());
|
let trait_ref = {
|
||||||
if generic_params.len() != 2 {
|
let b = TyBuilder::trait_ref(self.db, coerce_unsized_trait);
|
||||||
// The CoerceUnsized trait should have two generic params: Self and T.
|
if b.remaining() != 2 {
|
||||||
return None;
|
// The CoerceUnsized trait should have two generic params: Self and T.
|
||||||
}
|
return None;
|
||||||
|
}
|
||||||
|
b.push(from_ty.clone()).push(to_ty.clone()).build()
|
||||||
|
};
|
||||||
|
|
||||||
let substs = Substitution::build_for_generics(&generic_params)
|
|
||||||
.push(from_ty.clone())
|
|
||||||
.push(to_ty.clone())
|
|
||||||
.build();
|
|
||||||
let trait_ref =
|
|
||||||
TraitRef { trait_id: to_chalk_trait_id(coerce_unsized_trait), substitution: substs };
|
|
||||||
let goal = InEnvironment::new(self.trait_env.env.clone(), trait_ref.cast(&Interner));
|
let goal = InEnvironment::new(self.trait_env.env.clone(), trait_ref.cast(&Interner));
|
||||||
|
|
||||||
let canonicalizer = self.canonicalizer();
|
let canonicalizer = self.canonicalizer();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user