diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2021-01-30 17:47:51 +0100 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2021-02-15 19:32:10 +0100 |
| commit | cebbba081e4609099df3921de8a1422b7ea52599 (patch) | |
| tree | 96784e4ada9c7d62e8890ce8bac2d4f840eba6c4 /compiler/rustc_privacy | |
| parent | bd3cd5dbed5f56fb44a14a20dd2113e3049d2565 (diff) | |
| download | rust-cebbba081e4609099df3921de8a1422b7ea52599.tar.gz rust-cebbba081e4609099df3921de8a1422b7ea52599.zip | |
Only store a LocalDefId in hir::Item.
Items are guaranteed to be HIR owner.
Diffstat (limited to 'compiler/rustc_privacy')
| -rw-r--r-- | compiler/rustc_privacy/src/lib.rs | 64 |
1 files changed, 32 insertions, 32 deletions
diff --git a/compiler/rustc_privacy/src/lib.rs b/compiler/rustc_privacy/src/lib.rs index 48c4c1c2d54..d79e9cf505b 100644 --- a/compiler/rustc_privacy/src/lib.rs +++ b/compiler/rustc_privacy/src/lib.rs @@ -454,11 +454,9 @@ impl EmbargoVisitor<'tcx> { let module_def_id = self.tcx.hir().local_def_id(reachable_mod); let module = self.tcx.hir().get_module(module_def_id).0; for item_id in module.item_ids { - let hir_id = item_id.id; - let item_def_id = self.tcx.hir().local_def_id(hir_id); - let def_kind = self.tcx.def_kind(item_def_id); - let vis = self.tcx.visibility(item_def_id); - self.update_macro_reachable_def(hir_id, def_kind, vis, defining_mod); + let def_kind = self.tcx.def_kind(item_id.def_id); + let vis = self.tcx.visibility(item_id.def_id); + self.update_macro_reachable_def(item_id.hir_id(), def_kind, vis, defining_mod); } if let Some(exports) = self.tcx.module_exports(module_def_id) { for export in exports { @@ -590,12 +588,15 @@ impl EmbargoVisitor<'tcx> { if let hir::ItemKind::Mod(m) = &item.kind { for &item_id in m.item_ids { let item = self.tcx.hir().item(item_id); - let def_id = self.tcx.hir().local_def_id(item_id.id); - if !self.tcx.hygienic_eq(segment.ident, item.ident, def_id.to_def_id()) { + if !self.tcx.hygienic_eq( + segment.ident, + item.ident, + item_id.def_id.to_def_id(), + ) { continue; } if let hir::ItemKind::Use(..) = item.kind { - self.update(item.hir_id, Some(AccessLevel::Exported)); + self.update(item.hir_id(), Some(AccessLevel::Exported)); } } } @@ -616,7 +617,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) { let inherited_item_level = match item.kind { hir::ItemKind::Impl { .. } => { - Option::<AccessLevel>::of_impl(item.hir_id, self.tcx, &self.access_levels) + Option::<AccessLevel>::of_impl(item.hir_id(), self.tcx, &self.access_levels) } // Foreign modules inherit level from parents. hir::ItemKind::ForeignMod { .. } => self.prev_level, @@ -644,7 +645,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { }; // Update level of the item itself. - let item_level = self.update(item.hir_id, inherited_item_level); + let item_level = self.update(item.hir_id(), inherited_item_level); // Update levels of nested things. match item.kind { @@ -727,7 +728,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { // reachable if they are returned via `impl Trait`, even from private functions. let exist_level = cmp::max(item_level, Some(AccessLevel::ReachableFromImplTrait)); - self.reach(item.hir_id, exist_level).generics().predicates().ty(); + self.reach(item.hir_id(), exist_level).generics().predicates().ty(); } } // Visit everything. @@ -736,12 +737,12 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { | hir::ItemKind::Fn(..) | hir::ItemKind::TyAlias(..) => { if item_level.is_some() { - self.reach(item.hir_id, item_level).generics().predicates().ty(); + self.reach(item.hir_id(), item_level).generics().predicates().ty(); } } hir::ItemKind::Trait(.., trait_item_refs) => { if item_level.is_some() { - self.reach(item.hir_id, item_level).generics().predicates(); + self.reach(item.hir_id(), item_level).generics().predicates(); for trait_item_ref in trait_item_refs { let mut reach = self.reach(trait_item_ref.id.hir_id, item_level); @@ -759,13 +760,13 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { } hir::ItemKind::TraitAlias(..) => { if item_level.is_some() { - self.reach(item.hir_id, item_level).generics().predicates(); + self.reach(item.hir_id(), item_level).generics().predicates(); } } // Visit everything except for private impl items. hir::ItemKind::Impl(ref impl_) => { if item_level.is_some() { - self.reach(item.hir_id, item_level).generics().predicates().ty().trait_ref(); + self.reach(item.hir_id(), item_level).generics().predicates().ty().trait_ref(); for impl_item_ref in impl_.items { let impl_item_level = self.get(impl_item_ref.id.hir_id); @@ -782,7 +783,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { // Visit everything, but enum variants have their own levels. hir::ItemKind::Enum(ref def, _) => { if item_level.is_some() { - self.reach(item.hir_id, item_level).generics().predicates(); + self.reach(item.hir_id(), item_level).generics().predicates(); } for variant in def.variants { let variant_level = self.get(variant.id); @@ -792,7 +793,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { } // Corner case: if the variant is reachable, but its // enum is not, make the enum reachable as well. - self.update(item.hir_id, variant_level); + self.update(item.hir_id(), variant_level); } } } @@ -811,7 +812,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { // Visit everything except for private fields. hir::ItemKind::Struct(ref struct_def, _) | hir::ItemKind::Union(ref struct_def, _) => { if item_level.is_some() { - self.reach(item.hir_id, item_level).generics().predicates(); + self.reach(item.hir_id(), item_level).generics().predicates(); for field in struct_def.fields() { let field_level = self.get(field.hir_id); if field_level.is_some() { @@ -1037,7 +1038,7 @@ impl<'tcx> Visitor<'tcx> for NamePrivacyVisitor<'tcx> { } fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) { - let orig_current_item = self.current_item.replace(item.hir_id); + let orig_current_item = self.current_item.replace(item.hir_id()); intravisit::walk_item(self, item); self.current_item = orig_current_item; } @@ -1322,8 +1323,7 @@ impl<'tcx> Visitor<'tcx> for TypePrivacyVisitor<'tcx> { // Check types in item interfaces. fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) { - let orig_current_item = - mem::replace(&mut self.current_item, self.tcx.hir().local_def_id(item.hir_id)); + let orig_current_item = mem::replace(&mut self.current_item, item.def_id); let old_maybe_typeck_results = self.maybe_typeck_results.take(); intravisit::walk_item(self, item); self.maybe_typeck_results = old_maybe_typeck_results; @@ -1463,7 +1463,7 @@ impl<'a, 'tcx> Visitor<'tcx> for ObsoleteVisiblePrivateTypesVisitor<'a, 'tcx> { hir::ItemKind::ForeignMod { .. } => {} hir::ItemKind::Trait(.., ref bounds, _) => { - if !self.trait_is_public(item.hir_id) { + if !self.trait_is_public(item.hir_id()) { return; } @@ -1615,7 +1615,7 @@ impl<'a, 'tcx> Visitor<'tcx> for ObsoleteVisiblePrivateTypesVisitor<'a, 'tcx> { hir::ItemKind::TyAlias(..) => return, // Not at all public, so we don't care. - _ if !self.item_is_public(&item.hir_id, &item.vis) => { + _ if !self.item_is_public(&item.hir_id(), &item.vis) => { return; } @@ -1926,7 +1926,7 @@ impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx> fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) { let tcx = self.tcx; - let item_visibility = tcx.visibility(tcx.hir().local_def_id(item.hir_id).to_def_id()); + let item_visibility = tcx.visibility(item.def_id); match item.kind { // Crates are always public. @@ -1942,15 +1942,15 @@ impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx> | hir::ItemKind::Static(..) | hir::ItemKind::Fn(..) | hir::ItemKind::TyAlias(..) => { - self.check(item.hir_id, item_visibility).generics().predicates().ty(); + self.check(item.hir_id(), item_visibility).generics().predicates().ty(); } hir::ItemKind::OpaqueTy(..) => { // `ty()` for opaque types is the underlying type, // it's not a part of interface, so we skip it. - self.check(item.hir_id, item_visibility).generics().bounds(); + self.check(item.hir_id(), item_visibility).generics().bounds(); } hir::ItemKind::Trait(.., trait_item_refs) => { - self.check(item.hir_id, item_visibility).generics().predicates(); + self.check(item.hir_id(), item_visibility).generics().predicates(); for trait_item_ref in trait_item_refs { self.check_assoc_item( @@ -1966,10 +1966,10 @@ impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx> } } hir::ItemKind::TraitAlias(..) => { - self.check(item.hir_id, item_visibility).generics().predicates(); + self.check(item.hir_id(), item_visibility).generics().predicates(); } hir::ItemKind::Enum(ref def, _) => { - self.check(item.hir_id, item_visibility).generics().predicates(); + self.check(item.hir_id(), item_visibility).generics().predicates(); for variant in def.variants { for field in variant.data.fields() { @@ -1986,7 +1986,7 @@ impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx> } // Subitems of structs and unions have their own publicity. hir::ItemKind::Struct(ref struct_def, _) | hir::ItemKind::Union(ref struct_def, _) => { - self.check(item.hir_id, item_visibility).generics().predicates(); + self.check(item.hir_id(), item_visibility).generics().predicates(); for field in struct_def.fields() { let field_visibility = tcx.visibility(tcx.hir().local_def_id(field.hir_id)); @@ -1998,8 +1998,8 @@ impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx> // A trait impl is public when both its type and its trait are public // Subitems of trait impls have inherited publicity. hir::ItemKind::Impl(ref impl_) => { - let impl_vis = ty::Visibility::of_impl(item.hir_id, tcx, &Default::default()); - self.check(item.hir_id, impl_vis).generics().predicates(); + let impl_vis = ty::Visibility::of_impl(item.hir_id(), tcx, &Default::default()); + self.check(item.hir_id(), impl_vis).generics().predicates(); for impl_item_ref in impl_.items { let impl_item_vis = if impl_.of_trait.is_none() { min( |
