@@ -616,24 +616,30 @@ impl Index<RawVisibilityId> for ItemTree {
616
616
type Output = RawVisibility ;
617
617
fn index ( & self , index : RawVisibilityId ) -> & Self :: Output {
618
618
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 ( ) ;
631
622
632
623
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
+ } ) ,
635
636
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
+ } ) ,
637
643
_ => & self . data ( ) . vis . arena [ Idx :: from_raw ( index. 0 . into ( ) ) ] ,
638
644
}
639
645
}
0 commit comments