Skip to content

Commit 6f9ab0f

Browse files
committed
Bring back the firewall query
1 parent 889d84a commit 6f9ab0f

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

crates/hir-def/src/lib.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -257,13 +257,13 @@ impl_intern!(StructId, StructLoc, intern_struct, lookup_intern_struct);
257257

258258
impl StructId {
259259
pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields {
260-
&VariantFields::query(db, self.into()).0
260+
VariantFields::firewall(db, self.into())
261261
}
262262

263263
pub fn fields_with_source_map(
264264
self,
265265
db: &dyn DefDatabase,
266-
) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) {
266+
) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) {
267267
VariantFields::query(db, self.into())
268268
}
269269
}
@@ -273,13 +273,13 @@ impl_intern!(UnionId, UnionLoc, intern_union, lookup_intern_union);
273273

274274
impl UnionId {
275275
pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields {
276-
&VariantFields::query(db, self.into()).0
276+
VariantFields::firewall(db, self.into())
277277
}
278278

279279
pub fn fields_with_source_map(
280280
self,
281281
db: &dyn DefDatabase,
282-
) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) {
282+
) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) {
283283
VariantFields::query(db, self.into())
284284
}
285285
}
@@ -367,13 +367,13 @@ impl_loc!(EnumVariantLoc, id: Variant, parent: EnumId);
367367

368368
impl EnumVariantId {
369369
pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields {
370-
&VariantFields::query(db, self.into()).0
370+
VariantFields::firewall(db, self.into())
371371
}
372372

373373
pub fn fields_with_source_map(
374374
self,
375375
db: &dyn DefDatabase,
376-
) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) {
376+
) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) {
377377
VariantFields::query(db, self.into())
378378
}
379379
}
@@ -1066,13 +1066,13 @@ impl_from!(EnumVariantId, StructId, UnionId for VariantId);
10661066

10671067
impl VariantId {
10681068
pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields {
1069-
&VariantFields::query(db, self).0
1069+
VariantFields::firewall(db, self)
10701070
}
10711071

10721072
pub fn fields_with_source_map(
10731073
self,
10741074
db: &dyn DefDatabase,
1075-
) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) {
1075+
) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) {
10761076
VariantFields::query(db, self)
10771077
}
10781078

crates/hir-def/src/signatures.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -734,11 +734,11 @@ pub struct VariantFields {
734734

735735
#[salsa::tracked]
736736
impl VariantFields {
737-
#[salsa::tracked(returns(ref))]
737+
#[salsa::tracked(returns(clone))]
738738
pub(crate) fn query(
739739
db: &dyn DefDatabase,
740740
id: VariantId,
741-
) -> (Self, Arc<ExpressionStoreSourceMap>) {
741+
) -> (Arc<Self>, Arc<ExpressionStoreSourceMap>) {
742742
let (shape, result) = match id {
743743
VariantId::EnumVariantId(id) => {
744744
let loc = id.lookup(db);
@@ -775,19 +775,25 @@ impl VariantFields {
775775
}
776776
};
777777
match result {
778-
Some((fields, store, source_map)) => {
779-
(VariantFields { fields, store: Arc::new(store), shape }, Arc::new(source_map))
780-
}
778+
Some((fields, store, source_map)) => (
779+
Arc::new(VariantFields { fields, store: Arc::new(store), shape }),
780+
Arc::new(source_map),
781+
),
781782
None => (
782-
VariantFields {
783+
Arc::new(VariantFields {
783784
fields: Arena::default(),
784785
store: ExpressionStore::empty_singleton(),
785786
shape,
786-
},
787+
}),
787788
ExpressionStoreSourceMap::empty_singleton(),
788789
),
789790
}
790791
}
792+
793+
#[salsa::tracked(returns(deref))]
794+
pub(crate) fn firewall(db: &dyn DefDatabase, id: VariantId) -> Arc<Self> {
795+
Self::query(db, id).0
796+
}
791797
}
792798

793799
impl VariantFields {

0 commit comments

Comments
 (0)