mirror of
https://github.com/rust-lang/rust.git
synced 2026-06-02 15:56:09 +03:00
More TyBuilder use
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
use hir_def::lang_item::LangItemTarget;
|
||||
|
||||
use crate::{
|
||||
autoderef, to_chalk_trait_id, traits::Solution, Interner, Substitution, TraitRef, Ty,
|
||||
autoderef, traits::Solution, Interner, Ty,
|
||||
TyBuilder, TyKind,
|
||||
};
|
||||
|
||||
@@ -131,18 +131,15 @@ fn try_coerce_unsized(&mut self, from_ty: &Ty, to_ty: &Ty) -> Option<bool> {
|
||||
_ => return None,
|
||||
};
|
||||
|
||||
let generic_params = crate::utils::generics(self.db.upcast(), coerce_unsized_trait.into());
|
||||
if generic_params.len() != 2 {
|
||||
// The CoerceUnsized trait should have two generic params: Self and T.
|
||||
return None;
|
||||
}
|
||||
let trait_ref = {
|
||||
let b = TyBuilder::trait_ref(self.db, coerce_unsized_trait);
|
||||
if b.remaining() != 2 {
|
||||
// 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 canonicalizer = self.canonicalizer();
|
||||
|
||||
Reference in New Issue
Block a user