@@ -64,14 +64,26 @@ impl EffectiveVisibility {
6464 self . at_level ( level) . is_public ( )
6565 }
6666
67- pub fn from_vis ( vis : Visibility ) -> EffectiveVisibility {
67+ pub const fn from_vis ( vis : Visibility ) -> EffectiveVisibility {
6868 EffectiveVisibility {
6969 direct : vis,
7070 reexported : vis,
7171 reachable : vis,
7272 reachable_through_impl_trait : vis,
7373 }
7474 }
75+
76+ #[ must_use]
77+ pub fn min ( mut self , lhs : EffectiveVisibility , tcx : TyCtxt < ' _ > ) -> Self {
78+ for l in Level :: all_levels ( ) {
79+ let rhs_vis = self . at_level_mut ( l) ;
80+ let lhs_vis = * lhs. at_level ( l) ;
81+ if rhs_vis. is_at_least ( lhs_vis, tcx) {
82+ * rhs_vis = lhs_vis;
83+ } ;
84+ }
85+ self
86+ }
7587}
7688
7789/// Holds a map of effective visibilities for reachable HIR nodes.
@@ -137,24 +149,6 @@ impl EffectiveVisibilities {
137149 } ;
138150 }
139151
140- pub fn set_public_at_level (
141- & mut self ,
142- id : LocalDefId ,
143- lazy_private_vis : impl FnOnce ( ) -> Visibility ,
144- level : Level ,
145- ) {
146- let mut effective_vis = self
147- . effective_vis ( id)
148- . copied ( )
149- . unwrap_or_else ( || EffectiveVisibility :: from_vis ( lazy_private_vis ( ) ) ) ;
150- for l in Level :: all_levels ( ) {
151- if l <= level {
152- * effective_vis. at_level_mut ( l) = Visibility :: Public ;
153- }
154- }
155- self . map . insert ( id, effective_vis) ;
156- }
157-
158152 pub fn check_invariants ( & self , tcx : TyCtxt < ' _ > , early : bool ) {
159153 if !cfg ! ( debug_assertions) {
160154 return ;
@@ -219,7 +213,7 @@ impl<Id: Eq + Hash> EffectiveVisibilities<Id> {
219213 pub fn update (
220214 & mut self ,
221215 id : Id ,
222- nominal_vis : Visibility ,
216+ nominal_vis : Option < Visibility > ,
223217 lazy_private_vis : impl FnOnce ( ) -> Visibility ,
224218 inherited_effective_vis : EffectiveVisibility ,
225219 level : Level ,
@@ -243,12 +237,11 @@ impl<Id: Eq + Hash> EffectiveVisibilities<Id> {
243237 if !( inherited_effective_vis_at_prev_level == inherited_effective_vis_at_level
244238 && level != l)
245239 {
246- calculated_effective_vis =
247- if nominal_vis. is_at_least ( inherited_effective_vis_at_level, tcx) {
248- inherited_effective_vis_at_level
249- } else {
250- nominal_vis
251- } ;
240+ calculated_effective_vis = if let Some ( nominal_vis) = nominal_vis && !nominal_vis. is_at_least ( inherited_effective_vis_at_level, tcx) {
241+ nominal_vis
242+ } else {
243+ inherited_effective_vis_at_level
244+ }
252245 }
253246 // effective visibility can't be decreased at next update call for the
254247 // same id
0 commit comments