@@ -64,14 +64,26 @@ impl EffectiveVisibility {
64
64
self . at_level ( level) . is_public ( )
65
65
}
66
66
67
- pub fn from_vis ( vis : Visibility ) -> EffectiveVisibility {
67
+ pub const fn from_vis ( vis : Visibility ) -> EffectiveVisibility {
68
68
EffectiveVisibility {
69
69
direct : vis,
70
70
reexported : vis,
71
71
reachable : vis,
72
72
reachable_through_impl_trait : vis,
73
73
}
74
74
}
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
+ }
75
87
}
76
88
77
89
/// Holds a map of effective visibilities for reachable HIR nodes.
@@ -137,24 +149,6 @@ impl EffectiveVisibilities {
137
149
} ;
138
150
}
139
151
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
-
158
152
pub fn check_invariants ( & self , tcx : TyCtxt < ' _ > , early : bool ) {
159
153
if !cfg ! ( debug_assertions) {
160
154
return ;
@@ -219,7 +213,7 @@ impl<Id: Eq + Hash> EffectiveVisibilities<Id> {
219
213
pub fn update (
220
214
& mut self ,
221
215
id : Id ,
222
- nominal_vis : Visibility ,
216
+ nominal_vis : Option < Visibility > ,
223
217
lazy_private_vis : impl FnOnce ( ) -> Visibility ,
224
218
inherited_effective_vis : EffectiveVisibility ,
225
219
level : Level ,
@@ -243,12 +237,11 @@ impl<Id: Eq + Hash> EffectiveVisibilities<Id> {
243
237
if !( inherited_effective_vis_at_prev_level == inherited_effective_vis_at_level
244
238
&& level != l)
245
239
{
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
+ }
252
245
}
253
246
// effective visibility can't be decreased at next update call for the
254
247
// same id
0 commit comments