Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/generics.rs')
| -rw-r--r-- | crates/hir-ty/src/generics.rs | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/crates/hir-ty/src/generics.rs b/crates/hir-ty/src/generics.rs index d174da9997..42fe129f91 100644 --- a/crates/hir-ty/src/generics.rs +++ b/crates/hir-ty/src/generics.rs @@ -65,7 +65,7 @@ impl Generics { } pub(crate) fn iter_id(&self) -> impl Iterator<Item = GenericParamId> + '_ { - self.iter_self_id().chain(self.iter_parent_id()) + self.iter_parent_id().chain(self.iter_self_id()) } pub(crate) fn iter_self_id(&self) -> impl Iterator<Item = GenericParamId> + '_ { @@ -82,11 +82,11 @@ impl Generics { self.params.iter_type_or_consts().map(from_toc_id(self)).map(TupleExt::head) } - /// Iterate over the params followed by the parent params. + /// Iterate over the parent params followed by self params. pub(crate) fn iter( &self, ) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamDataRef<'_>)> + '_ { - self.iter_self().chain(self.iter_parent()) + self.iter_parent().chain(self.iter_self()) } pub(crate) fn iter_parents_with_store( @@ -166,13 +166,10 @@ impl Generics { if self.params.trait_self_param() == Some(param.local_id) { return Some(idx); } - Some(self.params.len_lifetimes() + idx) + Some(self.parent_generics().map_or(0, |g| g.len()) + self.params.len_lifetimes() + idx) } else { debug_assert_eq!(self.parent_generics().map(|it| it.def), Some(param.parent)); - self.parent_generics() - .and_then(|g| g.find_type_or_const_param(param)) - // Remember that parent parameters come after parameters for self. - .map(|idx| self.len_self() + idx) + self.parent_generics().and_then(|g| g.find_type_or_const_param(param)) } } @@ -184,12 +181,14 @@ impl Generics { if lifetime.parent == self.def { let idx = lifetime.local_id.into_raw().into_u32() as usize; debug_assert!(idx <= self.params.len_lifetimes()); - Some(self.params.trait_self_param().is_some() as usize + idx) + Some( + self.parent_generics().map_or(0, |g| g.len()) + + self.params.trait_self_param().is_some() as usize + + idx, + ) } else { debug_assert_eq!(self.parent_generics().map(|it| it.def), Some(lifetime.parent)); - self.parent_generics() - .and_then(|g| g.find_lifetime(lifetime)) - .map(|idx| self.len_self() + idx) + self.parent_generics().and_then(|g| g.find_lifetime(lifetime)) } } @@ -253,8 +252,7 @@ pub(crate) fn trait_self_param_idx(db: &dyn DefDatabase, def: GenericDefId) -> O let parent_def = parent_generic_def(db, def)?; let parent_params = db.generic_params(parent_def); let parent_self_idx = parent_params.trait_self_param()?.into_raw().into_u32() as usize; - let self_params = db.generic_params(def); - Some(self_params.len() + parent_self_idx) + Some(parent_self_idx) } } } |