Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/lib.rs')
| -rw-r--r-- | crates/hir/src/lib.rs | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index f560157deb..65c8ec0c25 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -3773,17 +3773,23 @@ impl GenericSubstitution { TypeOrConstParamData::ConstParamData(_) => None, }); // The `Substitution` is first self then container, we want the reverse order. - let self_params = self.subst.type_parameters(Interner).zip(type_params); - let container_params = self.subst.as_slice(Interner)[generics.len()..] + let subst_type_params = self.subst.type_parameters(Interner).collect::<Vec<_>>(); + let mut self_params = subst_type_params .iter() - .filter_map(|param| param.ty(Interner).cloned()) - .zip(container_type_params.into_iter().flatten()); - container_params - .chain(self_params) + .zip(type_params) .filter_map(|(ty, name)| { - Some((name?.symbol().clone(), Type { ty, env: self.env.clone() })) + Some((name?.symbol().clone(), Type { ty: ty.clone(), env: self.env.clone() })) }) - .collect() + .collect::<Vec<_>>(); + let mut container_params = subst_type_params[self_params.len()..] + .iter() + .zip(container_type_params.into_iter().flatten()) + .filter_map(|(ty, name)| { + Some((name?.symbol().clone(), Type { ty: ty.clone(), env: self.env.clone() })) + }) + .collect::<Vec<_>>(); + container_params.append(&mut self_params); + container_params } } |