]> git.lizzy.rs Git - rust.git/commitdiff
More TyBuilder use
authorFlorian Diebold <flodiebold@gmail.com>
Sat, 3 Apr 2021 19:59:13 +0000 (21:59 +0200)
committerFlorian Diebold <flodiebold@gmail.com>
Sun, 4 Apr 2021 11:16:38 +0000 (13:16 +0200)
crates/hir_ty/src/infer/coerce.rs

index 744f30a93c2a2d1d4da3b29f77fca1207988b732..ed8c677a8f79d7a1379354432087d5a32fdd0fd4 100644 (file)
@@ -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();