Skip to content

Commit 7a7446b

Browse files
committed
Intern ModPath within RawVisibility
1 parent 71c6e23 commit 7a7446b

File tree

4 files changed

+31
-20
lines changed

4 files changed

+31
-20
lines changed

src/tools/rust-analyzer/crates/hir-def/src/data.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ impl TraitAliasData {
323323
pub struct ImplData {
324324
pub target_trait: Option<Interned<TraitRef>>,
325325
pub self_ty: Interned<TypeRef>,
326-
pub items: Vec<AssocItemId>,
326+
pub items: Box<[AssocItemId]>,
327327
pub is_negative: bool,
328328
pub is_unsafe: bool,
329329
// box it as the vec is usually empty anyways

src/tools/rust-analyzer/crates/hir-def/src/db.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + Upcast<dyn ExpandDataba
193193
#[salsa::invoke(Attrs::fields_attrs_query)]
194194
fn fields_attrs(&self, def: VariantId) -> Arc<ArenaMap<LocalFieldId, Attrs>>;
195195

196+
// should this really be a query?
196197
#[salsa::invoke(crate::attr::fields_attrs_source_map)]
197198
fn fields_attrs_source_map(
198199
&self,

src/tools/rust-analyzer/crates/hir-def/src/item_tree.rs

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -616,24 +616,30 @@ impl Index<RawVisibilityId> for ItemTree {
616616
type Output = RawVisibility;
617617
fn index(&self, index: RawVisibilityId) -> &Self::Output {
618618
static VIS_PUB: RawVisibility = RawVisibility::Public;
619-
static VIS_PRIV_IMPLICIT: RawVisibility = RawVisibility::Module(
620-
ModPath::from_kind(PathKind::SELF),
621-
VisibilityExplicitness::Implicit,
622-
);
623-
static VIS_PRIV_EXPLICIT: RawVisibility = RawVisibility::Module(
624-
ModPath::from_kind(PathKind::SELF),
625-
VisibilityExplicitness::Explicit,
626-
);
627-
static VIS_PUB_CRATE: RawVisibility = RawVisibility::Module(
628-
ModPath::from_kind(PathKind::Crate),
629-
VisibilityExplicitness::Explicit,
630-
);
619+
static VIS_PRIV_IMPLICIT: OnceCell<RawVisibility> = OnceCell::new();
620+
static VIS_PRIV_EXPLICIT: OnceCell<RawVisibility> = OnceCell::new();
621+
static VIS_PUB_CRATE: OnceCell<RawVisibility> = OnceCell::new();
631622

632623
match index {
633-
RawVisibilityId::PRIV_IMPLICIT => &VIS_PRIV_IMPLICIT,
634-
RawVisibilityId::PRIV_EXPLICIT => &VIS_PRIV_EXPLICIT,
624+
RawVisibilityId::PRIV_IMPLICIT => VIS_PRIV_IMPLICIT.get_or_init(|| {
625+
RawVisibility::Module(
626+
Interned::new(ModPath::from_kind(PathKind::SELF)),
627+
VisibilityExplicitness::Implicit,
628+
)
629+
}),
630+
RawVisibilityId::PRIV_EXPLICIT => VIS_PRIV_EXPLICIT.get_or_init(|| {
631+
RawVisibility::Module(
632+
Interned::new(ModPath::from_kind(PathKind::SELF)),
633+
VisibilityExplicitness::Explicit,
634+
)
635+
}),
635636
RawVisibilityId::PUB => &VIS_PUB,
636-
RawVisibilityId::PUB_CRATE => &VIS_PUB_CRATE,
637+
RawVisibilityId::PUB_CRATE => VIS_PUB_CRATE.get_or_init(|| {
638+
RawVisibility::Module(
639+
Interned::new(ModPath::from_kind(PathKind::Crate)),
640+
VisibilityExplicitness::Explicit,
641+
)
642+
}),
637643
_ => &self.data().vis.arena[Idx::from_raw(index.0.into())],
638644
}
639645
}

src/tools/rust-analyzer/crates/hir-def/src/visibility.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
33
use std::iter;
44

5+
use intern::Interned;
56
use la_arena::ArenaMap;
67
use span::SyntaxContextId;
78
use syntax::ast;
@@ -20,14 +21,17 @@ use crate::{
2021
pub enum RawVisibility {
2122
/// `pub(in module)`, `pub(crate)` or `pub(super)`. Also private, which is
2223
/// equivalent to `pub(self)`.
23-
Module(ModPath, VisibilityExplicitness),
24+
Module(Interned<ModPath>, VisibilityExplicitness),
2425
/// `pub`.
2526
Public,
2627
}
2728

2829
impl RawVisibility {
29-
pub(crate) const fn private() -> RawVisibility {
30-
RawVisibility::Module(ModPath::from_kind(PathKind::SELF), VisibilityExplicitness::Implicit)
30+
pub(crate) fn private() -> RawVisibility {
31+
RawVisibility::Module(
32+
Interned::new(ModPath::from_kind(PathKind::SELF)),
33+
VisibilityExplicitness::Implicit,
34+
)
3135
}
3236

3337
pub(crate) fn from_ast(
@@ -60,7 +64,7 @@ impl RawVisibility {
6064
ast::VisibilityKind::PubSelf => ModPath::from_kind(PathKind::SELF),
6165
ast::VisibilityKind::Pub => return RawVisibility::Public,
6266
};
63-
RawVisibility::Module(path, VisibilityExplicitness::Explicit)
67+
RawVisibility::Module(Interned::new(path), VisibilityExplicitness::Explicit)
6468
}
6569

6670
pub fn resolve(

0 commit comments

Comments
 (0)