Bring back the firewall query
This commit is contained in:
parent
919e8ef72b
commit
e019a37aa8
3 changed files with 22 additions and 15 deletions
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue