about summary refs log tree commit diff
path: root/compiler/rustc_middle/src
diff options
context:
space:
mode:
authorMichael Goulet <michael@errs.io>2023-05-08 21:28:21 +0000
committerMichael Goulet <michael@errs.io>2023-05-08 21:47:44 +0000
commit5fcf2e6edc07e38e24201146be9fb58fe6cd72a0 (patch)
tree22d793771636f2e273ddc9169aa628f94913844b /compiler/rustc_middle/src
parente315bbf736acc6408955f48e2effb1645bf1a022 (diff)
downloadrust-5fcf2e6edc07e38e24201146be9fb58fe6cd72a0.tar.gz
rust-5fcf2e6edc07e38e24201146be9fb58fe6cd72a0.zip
Revert "Populate effective visibilities in `rustc_privacy`"
This reverts commit cff85f22f5030fbe7266d272da74a9e76160523c.
Diffstat (limited to 'compiler/rustc_middle/src')
-rw-r--r--compiler/rustc_middle/src/middle/privacy.rs45
1 files changed, 26 insertions, 19 deletions
diff --git a/compiler/rustc_middle/src/middle/privacy.rs b/compiler/rustc_middle/src/middle/privacy.rs
index aeb6a1601fc..967fed687b6 100644
--- a/compiler/rustc_middle/src/middle/privacy.rs
+++ b/compiler/rustc_middle/src/middle/privacy.rs
@@ -64,7 +64,7 @@ impl EffectiveVisibility {
         self.at_level(level).is_public()
     }
 
-    pub const fn from_vis(vis: Visibility) -> EffectiveVisibility {
+    pub fn from_vis(vis: Visibility) -> EffectiveVisibility {
         EffectiveVisibility {
             direct: vis,
             reexported: vis,
@@ -72,18 +72,6 @@ impl EffectiveVisibility {
             reachable_through_impl_trait: vis,
         }
     }
-
-    #[must_use]
-    pub fn min(mut self, lhs: EffectiveVisibility, tcx: TyCtxt<'_>) -> Self {
-        for l in Level::all_levels() {
-            let rhs_vis = self.at_level_mut(l);
-            let lhs_vis = *lhs.at_level(l);
-            if rhs_vis.is_at_least(lhs_vis, tcx) {
-                *rhs_vis = lhs_vis;
-            };
-        }
-        self
-    }
 }
 
 /// Holds a map of effective visibilities for reachable HIR nodes.
@@ -149,6 +137,24 @@ impl EffectiveVisibilities {
         };
     }
 
+    pub fn set_public_at_level(
+        &mut self,
+        id: LocalDefId,
+        lazy_private_vis: impl FnOnce() -> Visibility,
+        level: Level,
+    ) {
+        let mut effective_vis = self
+            .effective_vis(id)
+            .copied()
+            .unwrap_or_else(|| EffectiveVisibility::from_vis(lazy_private_vis()));
+        for l in Level::all_levels() {
+            if l <= level {
+                *effective_vis.at_level_mut(l) = Visibility::Public;
+            }
+        }
+        self.map.insert(id, effective_vis);
+    }
+
     pub fn check_invariants(&self, tcx: TyCtxt<'_>, early: bool) {
         if !cfg!(debug_assertions) {
             return;
@@ -213,7 +219,7 @@ impl<Id: Eq + Hash> EffectiveVisibilities<Id> {
     pub fn update(
         &mut self,
         id: Id,
-        nominal_vis: Option<Visibility>,
+        nominal_vis: Visibility,
         lazy_private_vis: impl FnOnce() -> Visibility,
         inherited_effective_vis: EffectiveVisibility,
         level: Level,
@@ -237,11 +243,12 @@ impl<Id: Eq + Hash> EffectiveVisibilities<Id> {
                 if !(inherited_effective_vis_at_prev_level == inherited_effective_vis_at_level
                     && level != l)
                 {
-                    calculated_effective_vis = if let Some(nominal_vis) = nominal_vis && !nominal_vis.is_at_least(inherited_effective_vis_at_level, tcx) {
-                        nominal_vis
-                    } else {
-                        inherited_effective_vis_at_level
-                    }
+                    calculated_effective_vis =
+                        if nominal_vis.is_at_least(inherited_effective_vis_at_level, tcx) {
+                            inherited_effective_vis_at_level
+                        } else {
+                            nominal_vis
+                        };
                 }
                 // effective visibility can't be decreased at next update call for the
                 // same id