Bring back the firewall query

This commit is contained in:
Lukas Wirth 2025-06-26 14:08:33 +02:00
parent 919e8ef72b
commit e019a37aa8
3 changed files with 22 additions and 15 deletions

View file

@ -257,13 +257,13 @@ impl_intern!(StructId, StructLoc, intern_struct, lookup_intern_struct);
impl StructId {
pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields {
&VariantFields::query(db, self.into()).0
VariantFields::firewall(db, self.into())
}
pub fn fields_with_source_map(
self,
db: &dyn DefDatabase,
) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) {
) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) {
VariantFields::query(db, self.into())
}
}
@ -273,13 +273,13 @@ impl_intern!(UnionId, UnionLoc, intern_union, lookup_intern_union);
impl UnionId {
pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields {
&VariantFields::query(db, self.into()).0
VariantFields::firewall(db, self.into())
}
pub fn fields_with_source_map(
self,
db: &dyn DefDatabase,
) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) {
) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) {
VariantFields::query(db, self.into())
}
}
@ -367,13 +367,13 @@ impl_loc!(EnumVariantLoc, id: Variant, parent: EnumId);
impl EnumVariantId {
pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields {
&VariantFields::query(db, self.into()).0
VariantFields::firewall(db, self.into())
}
pub fn fields_with_source_map(
self,
db: &dyn DefDatabase,
) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) {
) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) {
VariantFields::query(db, self.into())
}
}
@ -1066,13 +1066,13 @@ impl_from!(EnumVariantId, StructId, UnionId for VariantId);
impl VariantId {
pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields {
&VariantFields::query(db, self).0
VariantFields::firewall(db, self)
}
pub fn fields_with_source_map(
self,
db: &dyn DefDatabase,
) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) {
) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) {
VariantFields::query(db, self)
}

View file

@ -734,11 +734,11 @@ pub struct VariantFields {
#[salsa::tracked]
impl VariantFields {
#[salsa::tracked(returns(ref))]
#[salsa::tracked(returns(clone))]
pub(crate) fn query(
db: &dyn DefDatabase,
id: VariantId,
) -> (Self, Arc<ExpressionStoreSourceMap>) {
) -> (Arc<Self>, Arc<ExpressionStoreSourceMap>) {
let (shape, result) = match id {
VariantId::EnumVariantId(id) => {
let loc = id.lookup(db);
@ -775,19 +775,25 @@ impl VariantFields {
}
};
match result {
Some((fields, store, source_map)) => {
(VariantFields { fields, store: Arc::new(store), shape }, Arc::new(source_map))
}
Some((fields, store, source_map)) => (
Arc::new(VariantFields { fields, store: Arc::new(store), shape }),
Arc::new(source_map),
),
None => (
VariantFields {
Arc::new(VariantFields {
fields: Arena::default(),
store: ExpressionStore::empty_singleton(),
shape,
},
}),
ExpressionStoreSourceMap::empty_singleton(),
),
}
}
#[salsa::tracked(returns(deref))]
pub(crate) fn firewall(db: &dyn DefDatabase, id: VariantId) -> Arc<Self> {
Self::query(db, id).0
}
}
impl VariantFields {

View file

@ -596,6 +596,7 @@ fn main() {
"struct_signature_with_source_map_shim",
"generic_predicates_shim",
"value_ty_shim",
"firewall_",
"query_",
"lang_item",
"inherent_impls_in_crate_shim",