Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions crates/hir-ty/src/chalk_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> {
}
});
})
.filter_map(|block_id| self.db.trait_impls_in_block(block_id));
.map(|block_id| self.db.trait_impls_in_block(block_id));

let id_to_chalk = |id: hir_def::ImplId| id.to_chalk(self.db);
let mut result = vec![];
Expand All @@ -152,7 +152,8 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> {
impl_maps.into_iter().chain(block_impls).for_each(&mut f);
def_blocks
.into_iter()
.filter_map(|it| self.db.trait_impls_in_block(it?))
.flatten()
.map(|it| self.db.trait_impls_in_block(it))
.for_each(f);
}
fps => {
Expand All @@ -165,7 +166,8 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> {
impl_maps.into_iter().chain(block_impls).for_each(&mut f);
def_blocks
.into_iter()
.filter_map(|it| self.db.trait_impls_in_block(it?))
.flatten()
.map(|it| self.db.trait_impls_in_block(it))
.for_each(f);
}
}
Expand Down
4 changes: 2 additions & 2 deletions crates/hir-ty/src/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ pub trait HirDatabase: DefDatabase + Upcast<dyn DefDatabase> {
fn inherent_impls_in_crate(&self, krate: CrateId) -> Arc<InherentImpls>;

#[salsa::invoke(InherentImpls::inherent_impls_in_block_query)]
fn inherent_impls_in_block(&self, block: BlockId) -> Option<Arc<InherentImpls>>;
fn inherent_impls_in_block(&self, block: BlockId) -> Arc<InherentImpls>;

/// Collects all crates in the dependency graph that have impls for the
/// given fingerprint. This is only used for primitive types and types
Expand All @@ -132,7 +132,7 @@ pub trait HirDatabase: DefDatabase + Upcast<dyn DefDatabase> {
fn trait_impls_in_crate(&self, krate: CrateId) -> Arc<TraitImpls>;

#[salsa::invoke(TraitImpls::trait_impls_in_block_query)]
fn trait_impls_in_block(&self, block: BlockId) -> Option<Arc<TraitImpls>>;
fn trait_impls_in_block(&self, block: BlockId) -> Arc<TraitImpls>;

#[salsa::invoke(TraitImpls::trait_impls_in_deps_query)]
fn trait_impls_in_deps(&self, krate: CrateId) -> Arc<TraitImpls>;
Expand Down
37 changes: 15 additions & 22 deletions crates/hir-ty/src/method_resolution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,18 +149,15 @@ impl TraitImpls {
Arc::new(impls)
}

pub(crate) fn trait_impls_in_block_query(
db: &dyn HirDatabase,
block: BlockId,
) -> Option<Arc<Self>> {
pub(crate) fn trait_impls_in_block_query(db: &dyn HirDatabase, block: BlockId) -> Arc<Self> {
let _p = profile::span("trait_impls_in_block_query");
let mut impls = Self { map: FxHashMap::default() };

let block_def_map = db.block_def_map(block);
impls.collect_def_map(db, &block_def_map);
impls.shrink_to_fit();

Some(Arc::new(impls))
Arc::new(impls)
}

pub(crate) fn trait_impls_in_deps_query(db: &dyn HirDatabase, krate: CrateId) -> Arc<Self> {
Expand Down Expand Up @@ -283,18 +280,15 @@ impl InherentImpls {
Arc::new(impls)
}

pub(crate) fn inherent_impls_in_block_query(
db: &dyn HirDatabase,
block: BlockId,
) -> Option<Arc<Self>> {
pub(crate) fn inherent_impls_in_block_query(db: &dyn HirDatabase, block: BlockId) -> Arc<Self> {
let _p = profile::span("inherent_impls_in_block_query");
let mut impls = Self { map: FxHashMap::default(), invalid_impls: Vec::default() };

let block_def_map = db.block_def_map(block);
impls.collect_def_map(db, &block_def_map);
impls.shrink_to_fit();

Some(Arc::new(impls))
Arc::new(impls)
}

fn shrink_to_fit(&mut self) {
Expand Down Expand Up @@ -1178,18 +1172,17 @@ fn iterate_inherent_methods(
};

while let Some(block_id) = block {
if let Some(impls) = db.inherent_impls_in_block(block_id) {
impls_for_self_ty(
&impls,
self_ty,
table,
name,
receiver_ty,
receiver_adjustments.clone(),
module,
callback,
)?;
}
let impls = db.inherent_impls_in_block(block_id);
impls_for_self_ty(
&impls,
self_ty,
table,
name,
receiver_ty,
receiver_adjustments.clone(),
module,
callback,
)?;

block = db.block_def_map(block_id).parent().and_then(|module| module.containing_block());
}
Expand Down