Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/chalk_db.rs')
| -rw-r--r-- | crates/hir-ty/src/chalk_db.rs | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/crates/hir-ty/src/chalk_db.rs b/crates/hir-ty/src/chalk_db.rs index e5be852bc6..b47a22c342 100644 --- a/crates/hir-ty/src/chalk_db.rs +++ b/crates/hir-ty/src/chalk_db.rs @@ -1,5 +1,6 @@ //! The implementation of `RustIrDatabase` for Chalk, which provides information //! about the code that Chalk needs. +use core::ops; use std::{iter, sync::Arc}; use tracing::debug; @@ -126,7 +127,6 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> { let in_deps = self.db.trait_impls_in_deps(self.krate); let in_self = self.db.trait_impls_in_crate(self.krate); - let impl_maps = [in_deps, in_self]; let block_impls = iter::successors(self.block, |&block_id| { cov_mark::hit!(block_local_impls); self.db.block_def_map(block_id).parent().and_then(|module| module.containing_block()) @@ -146,29 +146,31 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> { match fps { [] => { debug!("Unrestricted search for {:?} impls...", trait_); - let mut f = |impls: Arc<TraitImpls>| { + let mut f = |impls: &TraitImpls| { result.extend(impls.for_trait(trait_).map(id_to_chalk)); }; - impl_maps.into_iter().chain(block_impls).for_each(&mut f); + f(&in_self); + in_deps.iter().map(ops::Deref::deref).for_each(&mut f); + block_impls.for_each(|it| f(&it)); def_blocks .into_iter() .flatten() - .map(|it| self.db.trait_impls_in_block(it)) - .for_each(f); + .for_each(|it| f(&self.db.trait_impls_in_block(it))); } fps => { let mut f = - |impls: Arc<TraitImpls>| { + |impls: &TraitImpls| { result.extend(fps.iter().flat_map(|fp| { impls.for_trait_and_self_ty(trait_, *fp).map(id_to_chalk) })); }; - impl_maps.into_iter().chain(block_impls).for_each(&mut f); + f(&in_self); + in_deps.iter().map(ops::Deref::deref).for_each(&mut f); + block_impls.for_each(|it| f(&it)); def_blocks .into_iter() .flatten() - .map(|it| self.db.trait_impls_in_block(it)) - .for_each(f); + .for_each(|it| f(&self.db.trait_impls_in_block(it))); } } |