Skip to content

Commit 35c33ca

Browse files
committed
access_levels -> effective vis in access_levels.rs::visit_item
1 parent 0ec13c6 commit 35c33ca

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

compiler/rustc_resolve/src/access_levels.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ use rustc_hir::def_id::LocalDefId;
1212
use rustc_hir::def_id::CRATE_DEF_ID;
1313
use rustc_middle::middle::privacy::AccessLevel;
1414
use rustc_middle::ty::{DefIdTree, Visibility};
15-
use rustc_span::sym;
1615

1716
pub struct AccessLevelsVisitor<'r, 'a> {
1817
r: &'r mut Resolver<'a>,
@@ -156,16 +155,15 @@ impl<'r, 'ast> Visitor<'ast> for AccessLevelsVisitor<'ast, 'r> {
156155

157156
// Foreign modules inherit level from parents.
158157
ast::ItemKind::ForeignMod(..) => {
159-
let parent_level =
160-
self.r.access_levels.get_access_level(self.r.local_parent(def_id));
161-
self.set_access_level(item.id, parent_level);
158+
let parent_id = self.r.local_parent(def_id);
159+
self.update_effective_vis(def_id, Visibility::Public, parent_id, AccessLevel::Public);
162160
}
163161

164162
// Only exported `macro_rules!` items are public, but they always are
165163
ast::ItemKind::MacroDef(ref macro_def) if macro_def.macro_rules => {
166-
if item.attrs.iter().any(|attr| attr.has_name(sym::macro_export)) {
167-
self.set_access_level(item.id, Some(AccessLevel::Public));
168-
}
164+
let parent_id = self.r.local_parent(def_id);
165+
let vis = self.r.visibilities.get(&def_id).unwrap().clone();
166+
self.update_effective_vis(def_id, vis, parent_id, AccessLevel::Public);
169167
}
170168

171169
ast::ItemKind::Mod(..) => {
@@ -177,19 +175,24 @@ impl<'r, 'ast> Visitor<'ast> for AccessLevelsVisitor<'ast, 'r> {
177175
self.set_bindings_access_level(def_id);
178176
for variant in variants {
179177
let variant_def_id = self.r.local_def_id(variant.id);
180-
let variant_level = self.r.access_levels.get_access_level(variant_def_id);
181178
for field in variant.data.fields() {
182-
self.set_access_level(field.id, variant_level);
179+
let field_def_id = self.r.local_def_id(field.id);
180+
let vis = self.r.visibilities.get(&field_def_id).unwrap().clone();
181+
self.update_effective_vis(
182+
field_def_id,
183+
vis,
184+
variant_def_id,
185+
AccessLevel::Public,
186+
);
183187
}
184188
}
185189
}
186190

187191
ast::ItemKind::Struct(ref def, _) | ast::ItemKind::Union(ref def, _) => {
188-
let inherited_level = self.r.access_levels.get_access_level(def_id);
189192
for field in def.fields() {
190-
if field.vis.kind.is_pub() {
191-
self.set_access_level(field.id, inherited_level);
192-
}
193+
let field_def_id = self.r.local_def_id(field.id);
194+
let vis = self.r.visibilities.get(&field_def_id).unwrap();
195+
self.update_effective_vis(field_def_id, *vis, def_id, AccessLevel::Public);
193196
}
194197
}
195198

0 commit comments

Comments
 (0)