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.rs | 7 |
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 6948f2c14f..8f8e26eca2 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)), ), ) } |