aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ty/infer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/ty/infer.rs')
-rw-r--r--crates/ra_hir/src/ty/infer.rs13
1 files changed, 10 insertions, 3 deletions
diff --git a/crates/ra_hir/src/ty/infer.rs b/crates/ra_hir/src/ty/infer.rs
index a6d08dbcb..41ae569f7 100644
--- a/crates/ra_hir/src/ty/infer.rs
+++ b/crates/ra_hir/src/ty/infer.rs
@@ -45,12 +45,11 @@ use crate::{
45use super::{ 45use super::{
46 Ty, TypableDef, Substs, primitive, op, ApplicationTy, TypeCtor, CallableDef, TraitRef, 46 Ty, TypableDef, Substs, primitive, op, ApplicationTy, TypeCtor, CallableDef, TraitRef,
47 traits::{Solution, Obligation, Guidance}, 47 traits::{Solution, Obligation, Guidance},
48 method_resolution,
48}; 49};
49 50
50mod unify; 51mod unify;
51 52
52pub(super) use unify::Canonical;
53
54/// The entry point of type inference. 53/// The entry point of type inference.
55pub fn infer(db: &impl HirDatabase, def: DefWithBody) -> Arc<InferenceResult> { 54pub fn infer(db: &impl HirDatabase, def: DefWithBody) -> Arc<InferenceResult> {
56 db.check_canceled(); 55 db.check_canceled();
@@ -878,9 +877,17 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
878 generic_args: Option<&GenericArgs>, 877 generic_args: Option<&GenericArgs>,
879 ) -> Ty { 878 ) -> Ty {
880 let receiver_ty = self.infer_expr(receiver, &Expectation::none()); 879 let receiver_ty = self.infer_expr(receiver, &Expectation::none());
881 let resolved = receiver_ty.clone().lookup_method(self.db, method_name, &self.resolver); 880 let mut canonicalizer = self.canonicalizer();
881 let canonical_receiver = canonicalizer.canonicalize_ty(receiver_ty.clone());
882 let resolved = method_resolution::lookup_method(
883 &canonical_receiver,
884 canonicalizer.ctx.db,
885 method_name,
886 &canonicalizer.ctx.resolver,
887 );
882 let (derefed_receiver_ty, method_ty, def_generics) = match resolved { 888 let (derefed_receiver_ty, method_ty, def_generics) = match resolved {
883 Some((ty, func)) => { 889 Some((ty, func)) => {
890 let ty = canonicalizer.decanonicalize_ty(ty);
884 self.write_method_resolution(tgt_expr, func); 891 self.write_method_resolution(tgt_expr, func);
885 ( 892 (
886 ty, 893 ty,