Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/method_resolution.rs')
-rw-r--r--crates/hir-ty/src/method_resolution.rs7
1 files changed, 3 insertions, 4 deletions
diff --git a/crates/hir-ty/src/method_resolution.rs b/crates/hir-ty/src/method_resolution.rs
index d591ea8fe8..52aa355a38 100644
--- a/crates/hir-ty/src/method_resolution.rs
+++ b/crates/hir-ty/src/method_resolution.rs
@@ -655,7 +655,7 @@ pub fn is_dyn_method(
let fn_params = fn_subst.len(Interner) - trait_params;
let trait_ref = TraitRef {
trait_id: to_chalk_trait_id(trait_id),
- substitution: Substitution::from_iter(Interner, fn_subst.iter(Interner).skip(fn_params)),
+ substitution: Substitution::from_iter(Interner, fn_subst.iter(Interner).take(trait_params)),
};
let self_ty = trait_ref.self_type_parameter(Interner);
if let TyKind::Dyn(d) = self_ty.kind(Interner) {
@@ -694,10 +694,9 @@ pub(crate) fn lookup_impl_method_query(
return (func, fn_subst);
};
let trait_params = db.generic_params(trait_id.into()).len();
- let fn_params = fn_subst.len(Interner) - trait_params;
let trait_ref = TraitRef {
trait_id: to_chalk_trait_id(trait_id),
- substitution: Substitution::from_iter(Interner, fn_subst.iter(Interner).skip(fn_params)),
+ substitution: Substitution::from_iter(Interner, fn_subst.iter(Interner).take(trait_params)),
};
let name = &db.function_signature(func).name;
@@ -713,7 +712,7 @@ pub(crate) fn lookup_impl_method_query(
impl_fn,
Substitution::from_iter(
Interner,
- fn_subst.iter(Interner).take(fn_params).chain(impl_subst.iter(Interner)),
+ impl_subst.iter(Interner).chain(fn_subst.iter(Interner).skip(trait_params)),
),
)
}