Unnamed repository; edit this file 'description' to name the repository.
Don't allocate `DefDatabase::crate_lang_items` if its empty
Lukas Wirth 2024-01-10
parent 9673915 · commit 4e16e0f
-rw-r--r--crates/hir-def/src/attr.rs2
-rw-r--r--crates/hir-def/src/db.rs6
-rw-r--r--crates/hir-def/src/lang_item.rs17
-rw-r--r--crates/hir/src/attrs.rs2
4 files changed, 15 insertions, 12 deletions
diff --git a/crates/hir-def/src/attr.rs b/crates/hir-def/src/attr.rs
index 26f76afb1f..a0dfcb6a28 100644
--- a/crates/hir-def/src/attr.rs
+++ b/crates/hir-def/src/attr.rs
@@ -355,7 +355,7 @@ fn parse_comma_sep<S>(subtree: &tt::Subtree<S>) -> Vec<SmolStr> {
}
impl AttrsWithOwner {
- pub(crate) fn attrs_with_owner(db: &dyn DefDatabase, owner: AttrDefId) -> Self {
+ pub fn attrs_with_owner(db: &dyn DefDatabase, owner: AttrDefId) -> Self {
Self { attrs: db.attrs(owner), owner }
}
diff --git a/crates/hir-def/src/db.rs b/crates/hir-def/src/db.rs
index 8c1e3aca98..70c0d5193d 100644
--- a/crates/hir-def/src/db.rs
+++ b/crates/hir-def/src/db.rs
@@ -214,10 +214,6 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + Upcast<dyn ExpandDataba
#[salsa::invoke(lang_item::lang_attr_query)]
fn lang_attr(&self, def: AttrDefId) -> Option<LangItem>;
- #[salsa::transparent]
- #[salsa::invoke(AttrsWithOwner::attrs_with_owner)]
- fn attrs_with_owner(&self, def: AttrDefId) -> AttrsWithOwner;
-
// endregion:attrs
#[salsa::invoke(LangItems::lang_item_query)]
@@ -241,7 +237,7 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + Upcast<dyn ExpandDataba
// endregion:visibilities
#[salsa::invoke(LangItems::crate_lang_items_query)]
- fn crate_lang_items(&self, krate: CrateId) -> Arc<LangItems>;
+ fn crate_lang_items(&self, krate: CrateId) -> Option<Arc<LangItems>>;
fn crate_supports_no_std(&self, crate_id: CrateId) -> bool;
}
diff --git a/crates/hir-def/src/lang_item.rs b/crates/hir-def/src/lang_item.rs
index 1ae6bd4c91..66e0d2cc34 100644
--- a/crates/hir-def/src/lang_item.rs
+++ b/crates/hir-def/src/lang_item.rs
@@ -87,7 +87,10 @@ impl LangItems {
}
/// Salsa query. This will look for lang items in a specific crate.
- pub(crate) fn crate_lang_items_query(db: &dyn DefDatabase, krate: CrateId) -> Arc<LangItems> {
+ pub(crate) fn crate_lang_items_query(
+ db: &dyn DefDatabase,
+ krate: CrateId,
+ ) -> Option<Arc<LangItems>> {
let _p = profile::span("crate_lang_items_query");
let mut lang_items = LangItems::default();
@@ -150,7 +153,11 @@ impl LangItems {
}
}
- Arc::new(lang_items)
+ if lang_items.items.is_empty() {
+ None
+ } else {
+ Some(Arc::new(lang_items))
+ }
}
/// Salsa query. Look for a lang item, starting from the specified crate and recursively
@@ -161,9 +168,9 @@ impl LangItems {
item: LangItem,
) -> Option<LangItemTarget> {
let _p = profile::span("lang_item_query");
- let lang_items = db.crate_lang_items(start_crate);
- let start_crate_target = lang_items.items.get(&item);
- if let Some(&target) = start_crate_target {
+ if let Some(target) =
+ db.crate_lang_items(start_crate).and_then(|it| it.items.get(&item).copied())
+ {
return Some(target);
}
db.crate_graph()[start_crate]
diff --git a/crates/hir/src/attrs.rs b/crates/hir/src/attrs.rs
index 60ddc4aa86..5a21f41dca 100644
--- a/crates/hir/src/attrs.rs
+++ b/crates/hir/src/attrs.rs
@@ -35,7 +35,7 @@ macro_rules! impl_has_attrs {
impl HasAttrs for $def {
fn attrs(self, db: &dyn HirDatabase) -> AttrsWithOwner {
let def = AttrDefId::$def_id(self.into());
- db.attrs_with_owner(def)
+ AttrsWithOwner::attrs_with_owner(db.upcast(), def)
}
fn attr_id(self) -> AttrDefId {
AttrDefId::$def_id(self.into())