diff --git a/src/librustc/hir/check_attr.rs b/src/librustc/hir/check_attr.rs index d525f364593361f65200cc20464daafeb0eaa31b..75f78104b488e9775d87e2616639a506e872790c 100644 --- a/src/librustc/hir/check_attr.rs +++ b/src/librustc/hir/check_attr.rs @@ -5,6 +5,7 @@ //! item. use crate::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use crate::hir::map::Map; use crate::lint::builtin::UNUSED_ATTRIBUTES; use crate::ty::query::Providers; use crate::ty::TyCtxt; @@ -519,7 +520,9 @@ fn check_used(&self, attrs: &'hir [Attribute], target: Target) { } impl Visitor<'tcx> for CheckAttrVisitor<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, Self::Map> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } diff --git a/src/librustc/hir/intravisit.rs b/src/librustc/hir/intravisit.rs index 9d6acbda62e4272a77ce149c227a33c69749cbf2..13b5be08d8a5566c04b2803707198ec3902a665c 100644 --- a/src/librustc/hir/intravisit.rs +++ b/src/librustc/hir/intravisit.rs @@ -31,8 +31,6 @@ //! This order consistency is required in a few places in rustc, for //! example generator inference, and possibly also HIR borrowck. -use crate::hir::map::Map; - use rustc_hir::itemlikevisit::{ItemLikeVisitor, ParItemLikeVisitor}; use rustc_hir::*; use rustc_span::Span; @@ -42,10 +40,7 @@ pub struct DeepVisitor<'v, V> { visitor: &'v mut V, } -impl<'v, 'hir, V> DeepVisitor<'v, V> -where - V: Visitor<'hir> + 'v, -{ +impl<'v, V> DeepVisitor<'v, V> { pub fn new(base: &'v mut V) -> Self { DeepVisitor { visitor: base } } @@ -122,6 +117,14 @@ pub fn header(&self) -> Option<&FnHeader> { } } +/// An abstract representation of the HIR `rustc::hir::map::Map`. +pub trait Map<'hir> { + fn body(&self, id: BodyId) -> &'hir Body<'hir>; + fn item(&self, id: HirId) -> &'hir Item<'hir>; + fn trait_item(&self, id: TraitItemId) -> &'hir TraitItem<'hir>; + fn impl_item(&self, id: ImplItemId) -> &'hir ImplItem<'hir>; +} + /// Specifies what nested things a visitor wants to visit. The most /// common choice is `OnlyBodies`, which will cause the visitor to /// visit fn bodies for fns that it encounters, but skip over nested @@ -129,7 +132,7 @@ pub fn header(&self) -> Option<&FnHeader> { /// /// See the comments on `ItemLikeVisitor` for more details on the overall /// visit strategy. -pub enum NestedVisitorMap<'this, 'tcx> { +pub enum NestedVisitorMap<'this, M> { /// Do not visit any nested things. When you add a new /// "non-nested" thing, you will want to audit such uses to see if /// they remain valid. @@ -146,20 +149,20 @@ pub enum NestedVisitorMap<'this, 'tcx> { /// to use `visit_all_item_likes()` as an outer loop, /// and to have the visitor that visits the contents of each item /// using this setting. - OnlyBodies(&'this Map<'tcx>), + OnlyBodies(&'this M), /// Visits all nested things, including item-likes. /// /// **This is an unusual choice.** It is used when you want to /// process everything within their lexical context. Typically you /// kick off the visit by doing `walk_krate()`. - All(&'this Map<'tcx>), + All(&'this M), } -impl<'this, 'tcx> NestedVisitorMap<'this, 'tcx> { +impl<'this, M> NestedVisitorMap<'this, M> { /// Returns the map to use for an "intra item-like" thing (if any). /// E.g., function body. - fn intra(self) -> Option<&'this Map<'tcx>> { + fn intra(self) -> Option<&'this M> { match self { NestedVisitorMap::None => None, NestedVisitorMap::OnlyBodies(map) => Some(map), @@ -169,7 +172,7 @@ fn intra(self) -> Option<&'this Map<'tcx>> { /// Returns the map to use for an "item-like" thing (if any). /// E.g., item, impl-item. - fn inter(self) -> Option<&'this Map<'tcx>> { + fn inter(self) -> Option<&'this M> { match self { NestedVisitorMap::None => None, NestedVisitorMap::OnlyBodies(_) => None, @@ -195,6 +198,8 @@ fn inter(self) -> Option<&'this Map<'tcx>> { /// to monitor future changes to `Visitor` in case a new method with a /// new default implementation gets introduced.) pub trait Visitor<'v>: Sized { + type Map: Map<'v>; + /////////////////////////////////////////////////////////////////////////// // Nested items. @@ -214,7 +219,7 @@ pub trait Visitor<'v>: Sized { /// `panic!()`. This way, if a new `visit_nested_XXX` variant is /// added in the future, we will see the panic in your code and /// fix it appropriately. - fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, 'v>; + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map>; /// Invoked when a nested item is encountered. By default does /// nothing unless you override `nested_visit_map` to return other than @@ -496,21 +501,16 @@ pub fn walk_lifetime<'v, V: Visitor<'v>>(visitor: &mut V, lifetime: &'v Lifetime } } -pub fn walk_poly_trait_ref<'v, V>( +pub fn walk_poly_trait_ref<'v, V: Visitor<'v>>( visitor: &mut V, trait_ref: &'v PolyTraitRef<'v>, _modifier: TraitBoundModifier, -) where - V: Visitor<'v>, -{ +) { walk_list!(visitor, visit_generic_param, trait_ref.bound_generic_params); visitor.visit_trait_ref(&trait_ref.trait_ref); } -pub fn walk_trait_ref<'v, V>(visitor: &mut V, trait_ref: &'v TraitRef<'v>) -where - V: Visitor<'v>, -{ +pub fn walk_trait_ref<'v, V: Visitor<'v>>(visitor: &mut V, trait_ref: &'v TraitRef<'v>) { visitor.visit_id(trait_ref.hir_ref_id); visitor.visit_path(&trait_ref.path, trait_ref.hir_ref_id) } diff --git a/src/librustc/hir/map/collector.rs b/src/librustc/hir/map/collector.rs index 7dca5451a30135e1311c4a8307b8b1e2b1ac9bc2..6aa1b6da368303269191b5493a7b52bd1e965b5a 100644 --- a/src/librustc/hir/map/collector.rs +++ b/src/librustc/hir/map/collector.rs @@ -1,7 +1,7 @@ use crate::dep_graph::{DepGraph, DepKind, DepNode, DepNodeIndex}; use crate::hir::intravisit::{self, NestedVisitorMap, Visitor}; use crate::hir::map::definitions::{self, DefPathHash}; -use crate::hir::map::{Entry, HirEntryMap}; +use crate::hir::map::{Entry, HirEntryMap, Map}; use crate::ich::StableHashingContext; use crate::middle::cstore::CrateStore; use rustc_data_structures::fingerprint::Fingerprint; @@ -336,11 +336,13 @@ fn with_dep_node_owner< } impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> { + type Map = Map<'hir>; + /// Because we want to track parent items and so forth, enable /// deep walking so that we walk nested items in the context of /// their outer items. - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'hir> { + fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, Self::Map> { panic!("`visit_nested_xxx` must be manually implemented in this visitor"); } diff --git a/src/librustc/hir/map/hir_id_validator.rs b/src/librustc/hir/map/hir_id_validator.rs index 63299707592033f04f0e65b83918461fd80fd9e6..2499acae5e656cc312a2d6d62aebb881dfcadae5 100644 --- a/src/librustc/hir/map/hir_id_validator.rs +++ b/src/librustc/hir/map/hir_id_validator.rs @@ -133,7 +133,9 @@ fn check)>(&mut self, hir_id: HirId, wal } impl<'a, 'hir> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> { - fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, 'hir> { + type Map = Map<'hir>; + + fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, Self::Map> { intravisit::NestedVisitorMap::OnlyBodies(self.hir_map) } diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index 69978efd81d3dca356acd50aebfbf089da932cad..f7b654eae1ead19cf5a129c673d1124a080c23f2 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -1093,6 +1093,24 @@ pub fn hir_to_pretty_string(&self, id: HirId) -> String { } } +impl<'hir> intravisit::Map<'hir> for Map<'hir> { + fn body(&self, id: BodyId) -> &'hir Body<'hir> { + self.body(id) + } + + fn item(&self, id: HirId) -> &'hir Item<'hir> { + self.item(id) + } + + fn trait_item(&self, id: TraitItemId) -> &'hir TraitItem<'hir> { + self.trait_item(id) + } + + fn impl_item(&self, id: ImplItemId) -> &'hir ImplItem<'hir> { + self.impl_item(id) + } +} + pub struct NodesMatchingSuffix<'a> { map: &'a Map<'a>, item_name: &'a String, diff --git a/src/librustc/hir/upvars.rs b/src/librustc/hir/upvars.rs index df02a79ef4cc2b0da07921125469ee0cdcaaeea3..b61a54a643f7019c08fdab2cf15418035dc33981 100644 --- a/src/librustc/hir/upvars.rs +++ b/src/librustc/hir/upvars.rs @@ -1,6 +1,7 @@ //! Upvar (closure capture) collection from cross-body HIR uses of `Res::Local`s. use crate::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use crate::hir::map::Map; use crate::ty::query::Providers; use crate::ty::TyCtxt; use rustc_data_structures::fx::{FxHashSet, FxIndexMap}; @@ -43,7 +44,9 @@ struct LocalCollector { } impl Visitor<'tcx> for LocalCollector { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, Self::Map> { NestedVisitorMap::None } @@ -70,7 +73,9 @@ fn visit_local_use(&mut self, var_id: HirId, span: Span) { } impl Visitor<'tcx> for CaptureCollector<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc/infer/error_reporting/need_type_info.rs b/src/librustc/infer/error_reporting/need_type_info.rs index 4dedf0a23e82711b1d8cca2691e3e6cee98f1f81..9c7bf261d9bd4e5709cf07ca80492ccabcf04d9e 100644 --- a/src/librustc/infer/error_reporting/need_type_info.rs +++ b/src/librustc/infer/error_reporting/need_type_info.rs @@ -66,7 +66,9 @@ fn node_matches_type(&mut self, hir_id: HirId) -> Option> { } impl<'a, 'tcx> Visitor<'tcx> for FindLocalByTypeVisitor<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, Self::Map> { NestedVisitorMap::OnlyBodies(&self.hir_map) } diff --git a/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs b/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs index 6edf8f1e78755f9274a52c77a9c489eda2a0a0ca..6ec956f15dd340034c59b2b749cb12f36d99638c 100644 --- a/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs +++ b/src/librustc/infer/error_reporting/nice_region_error/find_anon_type.rs @@ -1,4 +1,5 @@ use crate::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use crate::hir::map::Map; use crate::infer::error_reporting::nice_region_error::NiceRegionError; use crate::middle::resolve_lifetime as rl; use crate::ty::{self, Region, TyCtxt}; @@ -90,7 +91,9 @@ struct FindNestedTypeVisitor<'tcx> { } impl Visitor<'tcx> for FindNestedTypeVisitor<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, Self::Map> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } @@ -207,7 +210,9 @@ struct TyPathVisitor<'tcx> { } impl Visitor<'tcx> for TyPathVisitor<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, Map<'tcx>> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } diff --git a/src/librustc/middle/weak_lang_items.rs b/src/librustc/middle/weak_lang_items.rs index e9e35b7617c89dbe40caa9eec8302eed13af9560..71abbd8bcb131a147071c272cb2da8ff16a6cc8f 100644 --- a/src/librustc/middle/weak_lang_items.rs +++ b/src/librustc/middle/weak_lang_items.rs @@ -5,6 +5,7 @@ use crate::hir::intravisit; use crate::hir::intravisit::{NestedVisitorMap, Visitor}; +use crate::hir::map::Map; use crate::ty::TyCtxt; use errors::struct_span_err; use rustc_data_structures::fx::FxHashSet; @@ -136,7 +137,9 @@ fn register(&mut self, name: Symbol, span: Span) { } impl<'a, 'tcx, 'v> Visitor<'v> for Context<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'v> { + type Map = Map<'v>; + + fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, Map<'v>> { NestedVisitorMap::None } diff --git a/src/librustc_ast_lowering/lib.rs b/src/librustc_ast_lowering/lib.rs index 8b79d9b4f478e0f3f034f023f230c7f01d920bd4..6c4d7ec3a8a9ff99f7d873b39dd2d9c000923028 100644 --- a/src/librustc_ast_lowering/lib.rs +++ b/src/librustc_ast_lowering/lib.rs @@ -37,7 +37,8 @@ use rustc::arena::Arena; use rustc::dep_graph::DepGraph; use rustc::hir::intravisit; -use rustc::hir::map::{DefKey, DefPathData, Definitions}; +use rustc::hir::map::definitions::{DefKey, DefPathData, Definitions}; +use rustc::hir::map::Map; use rustc::lint; use rustc::lint::builtin::{self, ELIDED_LIFETIMES_IN_PATHS}; use rustc::middle::cstore::CrateStore; @@ -1484,7 +1485,9 @@ struct ImplTraitLifetimeCollector<'r, 'a, 'hir> { } impl<'r, 'a, 'v, 'hir> intravisit::Visitor<'v> for ImplTraitLifetimeCollector<'r, 'a, 'hir> { - fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, 'v> { + type Map = Map<'v>; + + fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap<'_, Self::Map> { intravisit::NestedVisitorMap::None } diff --git a/src/librustc_incremental/assert_dep_graph.rs b/src/librustc_incremental/assert_dep_graph.rs index 64547845e74f1478a9235c6231fc1efddad5f30d..e59a52923d9fb878a72d8dd5755b45908fee2c1b 100644 --- a/src/librustc_incremental/assert_dep_graph.rs +++ b/src/librustc_incremental/assert_dep_graph.rs @@ -37,6 +37,7 @@ use rustc::dep_graph::debug::{DepNodeFilter, EdgeFilter}; use rustc::dep_graph::{DepGraphQuery, DepKind, DepNode}; use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::ty::TyCtxt; use rustc_data_structures::fx::FxHashSet; use rustc_data_structures::graph::implementation::{Direction, NodeIndex, INCOMING, OUTGOING}; @@ -159,7 +160,9 @@ fn process_attrs(&mut self, hir_id: hir::HirId, attrs: &[ast::Attribute]) { } impl Visitor<'tcx> for IfThisChanged<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, Self::Map> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } diff --git a/src/librustc_incremental/persist/dirty_clean.rs b/src/librustc_incremental/persist/dirty_clean.rs index 40dd4c88a02b2bf44df79c43774fd9fc5114a77d..a7f915b833d929cbad7145e550128f80979791d2 100644 --- a/src/librustc_incremental/persist/dirty_clean.rs +++ b/src/librustc_incremental/persist/dirty_clean.rs @@ -15,6 +15,7 @@ use rustc::dep_graph::{label_strs, DepNode}; use rustc::hir::intravisit; +use rustc::hir::map::Map; use rustc::ty::TyCtxt; use rustc_data_structures::fingerprint::Fingerprint; use rustc_data_structures::fx::FxHashSet; @@ -547,7 +548,9 @@ fn report_unchecked_attrs(&self, checked_attrs: &FxHashSet) { } impl intravisit::Visitor<'tcx> for FindAllAttrs<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, Self::Map> { intravisit::NestedVisitorMap::All(&self.tcx.hir()) } diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs index c2e20d5cf758eb6be5d0b7fd37a819648edadac5..213ca308d5636d4feadeef226a45185b76834a91 100644 --- a/src/librustc_lint/builtin.rs +++ b/src/librustc_lint/builtin.rs @@ -25,6 +25,7 @@ use lint::{EarlyContext, EarlyLintPass, LateLintPass, LintPass}; use lint::{LateContext, LintArray, LintContext}; +use rustc::hir::map::Map; use rustc::lint; use rustc::lint::FutureIncompatibleInfo; use rustc::traits::misc::can_type_implement_copy; @@ -1093,7 +1094,9 @@ struct WalkAssocTypes<'a, 'db> { err: &'a mut DiagnosticBuilder<'db>, } impl<'a, 'db, 'v> Visitor<'v> for WalkAssocTypes<'a, 'db> { - fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, 'v> { + type Map = Map<'v>; + + fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap<'_, Self::Map> { intravisit::NestedVisitorMap::None } diff --git a/src/librustc_lint/late.rs b/src/librustc_lint/late.rs index 2e0a201fa98e9f3f8df793f5859b0bc1935ddd1b..da27e9225d78702dad93d484992cf3d46b29c281 100644 --- a/src/librustc_lint/late.rs +++ b/src/librustc_lint/late.rs @@ -16,6 +16,7 @@ use rustc::hir::intravisit as hir_visit; use rustc::hir::intravisit::Visitor; +use rustc::hir::map::Map; use rustc::lint::LateContext; use rustc::lint::LintPass; use rustc::lint::{LateLintPass, LateLintPassObject}; @@ -86,10 +87,12 @@ fn exit_attrs(&mut self, attrs: &'tcx [ast::Attribute]) { impl<'a, 'tcx, T: LateLintPass<'a, 'tcx>> hir_visit::Visitor<'tcx> for LateContextAndPass<'a, 'tcx, T> { + type Map = Map<'tcx>; + /// Because lints are scoped lexically, we want to walk nested /// items in the context of the outer item, so enable /// deep-walking. - fn nested_visit_map<'this>(&'this mut self) -> hir_visit::NestedVisitorMap<'this, 'tcx> { + fn nested_visit_map<'this>(&'this mut self) -> hir_visit::NestedVisitorMap<'this, Self::Map> { hir_visit::NestedVisitorMap::All(&self.context.tcx.hir()) } diff --git a/src/librustc_lint/levels.rs b/src/librustc_lint/levels.rs index e060d6b551ca7a2a65fe45e650463dfc3f2ddd57..f6f1ae2a08a6fd980eb92398f13ba5c55ba41764 100644 --- a/src/librustc_lint/levels.rs +++ b/src/librustc_lint/levels.rs @@ -1,4 +1,5 @@ use rustc::hir::intravisit; +use rustc::hir::map::Map; use rustc::lint::{LintLevelMap, LintLevelSets, LintLevelsBuilder, LintStore}; use rustc::ty::query::Providers; use rustc::ty::TyCtxt; @@ -50,7 +51,9 @@ fn with_lint_attrs(&mut self, id: hir::HirId, attrs: &[ast::Attribute], f: F) } impl<'tcx> intravisit::Visitor<'tcx> for LintLevelMapBuilder<'_, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, Self::Map> { intravisit::NestedVisitorMap::All(&self.tcx.hir()) } diff --git a/src/librustc_metadata/rmeta/encoder.rs b/src/librustc_metadata/rmeta/encoder.rs index 92bfc51d9d5f0d7c88aef47a0d99ec89a5ab5005..390472940c764b46234b30017e9f802f8097a931 100644 --- a/src/librustc_metadata/rmeta/encoder.rs +++ b/src/librustc_metadata/rmeta/encoder.rs @@ -2,6 +2,7 @@ use crate::rmeta::*; use rustc::hir::map::definitions::DefPathTable; +use rustc::hir::map::Map; use rustc::middle::cstore::{EncodedMetadata, ForeignModule, LinkagePreference, NativeLibrary}; use rustc::middle::dependency_format::Linkage; use rustc::middle::exported_symbols::{metadata_symbol_name, ExportedSymbol, SymbolExportLevel}; @@ -1520,7 +1521,9 @@ fn encode_info_for_foreign_item(&mut self, def_id: DefId, nitem: &hir::ForeignIt // FIXME(eddyb) make metadata encoding walk over all definitions, instead of HIR. impl Visitor<'tcx> for EncodeContext<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } fn visit_expr(&mut self, ex: &'tcx hir::Expr<'tcx>) { diff --git a/src/librustc_mir/hair/pattern/check_match.rs b/src/librustc_mir/hair/pattern/check_match.rs index 07bb87f7b543f4ee3c365022d486f00978d68380..ab76f010a0f0a30a504058b73bde2820a44c7a85 100644 --- a/src/librustc_mir/hair/pattern/check_match.rs +++ b/src/librustc_mir/hair/pattern/check_match.rs @@ -5,6 +5,7 @@ use super::{PatCtxt, PatKind, PatternError}; use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::lint; use rustc::session::Session; use rustc::ty::subst::{InternalSubsts, SubstsRef}; @@ -49,7 +50,9 @@ struct MatchVisitor<'a, 'tcx> { } impl<'tcx> Visitor<'tcx> for MatchVisitor<'_, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } @@ -730,7 +733,9 @@ struct AtBindingPatternVisitor<'a, 'b, 'tcx> { } impl<'v> Visitor<'v> for AtBindingPatternVisitor<'_, '_, '_> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'v> { + type Map = Map<'v>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc_mir/transform/check_unsafety.rs b/src/librustc_mir/transform/check_unsafety.rs index 5cf5c54dd4878b17eaee6f73eeda07ab9d5e5634..830609f7911aca5a9c9fbdc5bd74cb505bf87618 100644 --- a/src/librustc_mir/transform/check_unsafety.rs +++ b/src/librustc_mir/transform/check_unsafety.rs @@ -1,4 +1,5 @@ use rustc::hir::intravisit; +use rustc::hir::map::Map; use rustc::lint::builtin::{SAFE_PACKED_BORROWS, UNUSED_UNSAFE}; use rustc::mir::visit::{MutatingUseContext, PlaceContext, Visitor}; use rustc::mir::*; @@ -475,7 +476,9 @@ struct UnusedUnsafeVisitor<'a> { } impl<'a, 'tcx> intravisit::Visitor<'tcx> for UnusedUnsafeVisitor<'a> { - fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, Self::Map> { intravisit::NestedVisitorMap::None } diff --git a/src/librustc_mir/transform/mod.rs b/src/librustc_mir/transform/mod.rs index 82c31a09ce377ceaf64557cd39447b7de71510d1..50abf919f9daa76cde10e43df36afed1ebfb3c23 100644 --- a/src/librustc_mir/transform/mod.rs +++ b/src/librustc_mir/transform/mod.rs @@ -1,5 +1,6 @@ use crate::{build, shim}; use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::mir::{BodyAndCache, ConstQualifs, MirPhase, Promoted}; use rustc::ty::query::Providers; use rustc::ty::steal::Steal; @@ -85,7 +86,8 @@ fn visit_variant_data( } intravisit::walk_struct_def(self, v) } - fn nested_visit_map<'b>(&'b mut self) -> NestedVisitorMap<'b, 'tcx> { + type Map = Map<'tcx>; + fn nested_visit_map<'b>(&'b mut self) -> NestedVisitorMap<'b, Self::Map> { NestedVisitorMap::None } } diff --git a/src/librustc_passes/check_const.rs b/src/librustc_passes/check_const.rs index f6a9d1cace15fae6b524fc719f186abd9d25b09d..072a51391c877301b63a177aa1f462422dec9de6 100644 --- a/src/librustc_passes/check_const.rs +++ b/src/librustc_passes/check_const.rs @@ -200,7 +200,9 @@ fn recurse_into(&mut self, kind: Option, f: impl FnOnce(&mut Self)) { } impl<'tcx> Visitor<'tcx> for CheckConstVisitor<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } diff --git a/src/librustc_passes/dead.rs b/src/librustc_passes/dead.rs index 0c435a166636347d3e30edd62d71940c351400d9..5441a8bf717a022438c5cee0f27746cd7e3c7cf5 100644 --- a/src/librustc_passes/dead.rs +++ b/src/librustc_passes/dead.rs @@ -3,6 +3,7 @@ // from live codes are live, and everything else is dead. use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::lint; use rustc::middle::codegen_fn_attrs::CodegenFnAttrFlags; use rustc::middle::privacy; @@ -210,7 +211,9 @@ fn mark_as_used_if_union(&mut self, adt: &ty::AdtDef, fields: &[hir::Field<'_>]) } impl<'a, 'tcx> Visitor<'tcx> for MarkSymbolVisitor<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } @@ -563,11 +566,13 @@ fn warn_dead_code( } impl Visitor<'tcx> for DeadVisitor<'tcx> { + type Map = Map<'tcx>; + /// Walk nested items in place so that we don't report dead-code /// on inner functions when the outer function is already getting /// an error. We could do this also by checking the parents, but /// this is how the code is setup and it seems harmless enough. - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::All(&self.tcx.hir()) } diff --git a/src/librustc_passes/hir_stats.rs b/src/librustc_passes/hir_stats.rs index 3eca602cf86038addadc125a69395db28634c1ba..2c36181ce4b407c96ba7bb6fe7a3dd62bf9609a8 100644 --- a/src/librustc_passes/hir_stats.rs +++ b/src/librustc_passes/hir_stats.rs @@ -3,6 +3,7 @@ // completely accurate (some things might be counted twice, others missed). use rustc::hir::intravisit as hir_visit; +use rustc::hir::map::Map; use rustc::util::common::to_readable_str; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_hir as hir; @@ -92,7 +93,9 @@ fn visit_param(&mut self, param: &'v hir::Param<'v>) { hir_visit::walk_param(self, param) } - fn nested_visit_map<'this>(&'this mut self) -> hir_visit::NestedVisitorMap<'this, 'v> { + type Map = Map<'v>; + + fn nested_visit_map(&mut self) -> hir_visit::NestedVisitorMap<'_, Self::Map> { panic!("visit_nested_xxx must be manually implemented in this visitor") } diff --git a/src/librustc_passes/intrinsicck.rs b/src/librustc_passes/intrinsicck.rs index 2b9a692117cc7d7df1bb8ed2b6d2c87d32a48d19..68d9ba7f90e9a8f75c81948f41843460e8f4ed0d 100644 --- a/src/librustc_passes/intrinsicck.rs +++ b/src/librustc_passes/intrinsicck.rs @@ -1,12 +1,12 @@ use errors::struct_span_err; +use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::ty::layout::{LayoutError, Pointer, SizeSkeleton, VariantIdx}; use rustc::ty::query::Providers; use rustc::ty::{self, Ty, TyCtxt}; +use rustc_hir as hir; use rustc_hir::def::{DefKind, Res}; use rustc_hir::def_id::DefId; - -use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; -use rustc_hir as hir; use rustc_index::vec::Idx; use rustc_span::{sym, Span}; use rustc_target::spec::abi::Abi::RustIntrinsic; @@ -124,7 +124,9 @@ fn check_transmute(&self, span: Span, from: Ty<'tcx>, to: Ty<'tcx>) { } impl Visitor<'tcx> for ItemVisitor<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } @@ -139,7 +141,9 @@ fn visit_nested_body(&mut self, body_id: hir::BodyId) { } impl Visitor<'tcx> for ExprVisitor<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc_passes/lib_features.rs b/src/librustc_passes/lib_features.rs index df56bcff81f6f0abb2647d97ac49a555011faff5..9d5e8080055a85f180f82cb924cd003713028c06 100644 --- a/src/librustc_passes/lib_features.rs +++ b/src/librustc_passes/lib_features.rs @@ -6,6 +6,7 @@ use errors::struct_span_err; use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::middle::lib_features::LibFeatures; use rustc::ty::query::Providers; use rustc::ty::TyCtxt; @@ -113,7 +114,9 @@ fn span_feature_error(&self, span: Span, msg: &str) { } impl Visitor<'tcx> for LibFeatureCollector<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::All(&self.tcx.hir()) } diff --git a/src/librustc_passes/liveness.rs b/src/librustc_passes/liveness.rs index 3ae5e4f72b7444ec45200563b8fa708616238ae7..4b5b2148cd984ead3b4695541d97b6b7c7ef7d3e 100644 --- a/src/librustc_passes/liveness.rs +++ b/src/librustc_passes/liveness.rs @@ -98,6 +98,7 @@ use errors::Applicability; use rustc::hir::intravisit::{self, FnKind, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::lint; use rustc::ty::query::Providers; use rustc::ty::{self, TyCtxt}; @@ -153,7 +154,9 @@ fn live_node_kind_to_string(lnk: LiveNodeKind, tcx: TyCtxt<'_>) -> String { } impl<'tcx> Visitor<'tcx> for IrMaps<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } @@ -1348,7 +1351,9 @@ fn propagate_through_loop( // Checking for error conditions impl<'a, 'tcx> Visitor<'tcx> for Liveness<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc_passes/loops.rs b/src/librustc_passes/loops.rs index 262f2382da3a4decea39524db13d6d0d782a96dc..54ea73f1d3d215eb616b080848479b33f26fb270 100644 --- a/src/librustc_passes/loops.rs +++ b/src/librustc_passes/loops.rs @@ -44,7 +44,9 @@ pub(crate) fn provide(providers: &mut Providers<'_>) { } impl<'a, 'hir> Visitor<'hir> for CheckLoopVisitor<'a, 'hir> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'hir> { + type Map = Map<'hir>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::OnlyBodies(&self.hir_map) } diff --git a/src/librustc_passes/reachable.rs b/src/librustc_passes/reachable.rs index 9b529401049b0f924e2e262a2b6cb2296bd2b918..016cab9d11446953088e8e5f8ac2f34be9e88e77 100644 --- a/src/librustc_passes/reachable.rs +++ b/src/librustc_passes/reachable.rs @@ -7,6 +7,7 @@ use rustc::hir::intravisit; use rustc::hir::intravisit::{NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::middle::codegen_fn_attrs::{CodegenFnAttrFlags, CodegenFnAttrs}; use rustc::middle::privacy; use rustc::session::config; @@ -82,7 +83,9 @@ struct ReachableContext<'a, 'tcx> { } impl<'a, 'tcx> Visitor<'tcx> for ReachableContext<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc_passes/region.rs b/src/librustc_passes/region.rs index 75c74c4f923c2dfbd396de885a7eab74f0c23f61..a8a56ee7f09382521576aa3fc410c732e5569be3 100644 --- a/src/librustc_passes/region.rs +++ b/src/librustc_passes/region.rs @@ -7,6 +7,7 @@ //! [rustc guide]: https://rust-lang.github.io/rustc-guide/mir/borrowck.html use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::middle::region::*; use rustc::ty::query::Providers; use rustc::ty::TyCtxt; @@ -695,7 +696,9 @@ fn enter_node_scope_with_dtor(&mut self, id: hir::ItemLocalId) { } impl<'tcx> Visitor<'tcx> for RegionResolutionVisitor<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc_passes/stability.rs b/src/librustc_passes/stability.rs index 33c985bd66b182f5c202aefdc3ca2c6074534ab6..7891fab0aa6c6130dec3cebbb0aadb22505e8355 100644 --- a/src/librustc_passes/stability.rs +++ b/src/librustc_passes/stability.rs @@ -3,6 +3,7 @@ use errors::struct_span_err; use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::lint; use rustc::middle::privacy::AccessLevels; use rustc::middle::stability::{DeprecationEntry, Index}; @@ -204,7 +205,9 @@ impl<'a, 'tcx> Visitor<'tcx> for Annotator<'a, 'tcx> { /// Because stability levels are scoped lexically, we want to walk /// nested items in the context of the outer item, so enable /// deep-walking. - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::All(&self.tcx.hir()) } @@ -293,7 +296,9 @@ fn check_missing_stability(&self, hir_id: HirId, span: Span, name: &str) { } impl<'a, 'tcx> Visitor<'tcx> for MissingStabilityAnnotations<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } @@ -429,10 +434,12 @@ struct Checker<'tcx> { } impl Visitor<'tcx> for Checker<'tcx> { + type Map = Map<'tcx>; + /// Because stability levels are scoped lexically, we want to walk /// nested items in the context of the outer item, so enable /// deep-walking. - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index 17e56129247f364b230a25f2f2a7551ba0535920..3d0d4070a251a9f141befdb0e6d08d72225594ac 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -5,6 +5,7 @@ use rustc::bug; use rustc::hir::intravisit::{self, DeepVisitor, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::lint; use rustc::middle::privacy::{AccessLevel, AccessLevels}; use rustc::ty::fold::TypeVisitor; @@ -372,7 +373,9 @@ struct PubRestrictedVisitor<'tcx> { } impl Visitor<'tcx> for PubRestrictedVisitor<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::All(&self.tcx.hir()) } fn visit_vis(&mut self, vis: &'tcx hir::Visibility<'tcx>) { @@ -670,9 +673,11 @@ fn update_visibility_of_intermediate_use_statements( } impl Visitor<'tcx> for EmbargoVisitor<'tcx> { + type Map = Map<'tcx>; + /// We want to visit items in the context of their containing /// module and so forth, so supply a crate for doing a deep walk. - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::All(&self.tcx.hir()) } @@ -1039,9 +1044,11 @@ fn check_field( } impl<'a, 'tcx> Visitor<'tcx> for NamePrivacyVisitor<'a, 'tcx> { + type Map = Map<'tcx>; + /// We want to visit items in the context of their containing /// module and so forth, so supply a crate for doing a deep walk. - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::All(&self.tcx.hir()) } @@ -1179,9 +1186,11 @@ fn check_def_id(&mut self, def_id: DefId, kind: &str, descr: &dyn fmt::Display) } impl<'a, 'tcx> Visitor<'tcx> for TypePrivacyVisitor<'a, 'tcx> { + type Map = Map<'tcx>; + /// We want to visit items in the context of their containing /// module and so forth, so supply a crate for doing a deep walk. - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::All(&self.tcx.hir()) } @@ -1437,7 +1446,9 @@ fn item_is_public(&self, id: &hir::HirId, vis: &hir::Visibility<'_>) -> bool { } impl<'a, 'b, 'tcx, 'v> Visitor<'v> for ObsoleteCheckTypeForPrivatenessVisitor<'a, 'b, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'v> { + type Map = Map<'v>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } @@ -1463,9 +1474,11 @@ fn visit_expr(&mut self, _: &hir::Expr<'_>) {} } impl<'a, 'tcx> Visitor<'tcx> for ObsoleteVisiblePrivateTypesVisitor<'a, 'tcx> { + type Map = Map<'tcx>; + /// We want to visit items in the context of their containing /// module and so forth, so supply a crate for doing a deep walk. - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::All(&self.tcx.hir()) } @@ -1906,7 +1919,9 @@ fn check_assoc_item( } impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } diff --git a/src/librustc_resolve/lifetimes.rs b/src/librustc_resolve/lifetimes.rs index 15858f7d8abc89a2cc6ffdc664ae477609d65398..215ab0fde026e2061dd8fc89ab3dbc1456c005a9 100644 --- a/src/librustc_resolve/lifetimes.rs +++ b/src/librustc_resolve/lifetimes.rs @@ -361,7 +361,9 @@ fn sub_items_have_self_param(node: &hir::ItemKind<'_>) -> bool { } impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::All(&self.tcx.hir()) } @@ -1086,7 +1088,9 @@ struct GatherLabels<'a, 'tcx> { gather.visit_body(body); impl<'v, 'a, 'tcx> Visitor<'v> for GatherLabels<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'v> { + type Map = Map<'v>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } @@ -2129,7 +2133,9 @@ fn is_self_ty(&self, res: Res) -> bool { } impl<'a> Visitor<'a> for SelfVisitor<'a> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'a> { + type Map = Map<'a>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } @@ -2217,7 +2223,9 @@ struct GatherLifetimes<'a> { } impl<'v, 'a> Visitor<'v> for GatherLifetimes<'a> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'v> { + type Map = Map<'v>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } @@ -2802,7 +2810,9 @@ struct ConstrainedCollector { } impl<'v> Visitor<'v> for ConstrainedCollector { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'v> { + type Map = Map<'v>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } @@ -2843,7 +2853,9 @@ struct AllCollector { } impl<'v> Visitor<'v> for AllCollector { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'v> { + type Map = Map<'v>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc_traits/lowering/mod.rs b/src/librustc_traits/lowering/mod.rs index 47009ac41232fcc7c7f8108c08c2c84fc7c126a3..647d32d45f6befb33bad1c47e5ccfe2380aac2e4 100644 --- a/src/librustc_traits/lowering/mod.rs +++ b/src/librustc_traits/lowering/mod.rs @@ -2,6 +2,7 @@ use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; use rustc::hir::map::definitions::DefPathData; +use rustc::hir::map::Map; use rustc::traits::{ Clause, Clauses, DomainGoal, FromEnv, GoalKind, PolyDomainGoal, ProgramClause, ProgramClauseCategory, WellFormed, WhereClause, @@ -600,7 +601,9 @@ fn process_attrs(&mut self, hir_id: hir::HirId, attrs: &[ast::Attribute]) { } impl Visitor<'tcx> for ClauseDumper<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, Self::Map> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } diff --git a/src/librustc_typeck/check/compare_method.rs b/src/librustc_typeck/check/compare_method.rs index e1f2950469b86771354b0ea291f8fc587af98555..031f6e15d0dc9af5e670b2fc0fcec9bd511ed7a2 100644 --- a/src/librustc_typeck/check/compare_method.rs +++ b/src/librustc_typeck/check/compare_method.rs @@ -1,5 +1,6 @@ use errors::{pluralize, struct_span_err, Applicability, DiagnosticId}; use rustc::hir::intravisit; +use rustc::hir::map::Map; use rustc::infer::{self, InferOk}; use rustc::traits::{self, ObligationCause, ObligationCauseCode, Reveal}; use rustc::ty::error::{ExpectedFound, TypeError}; @@ -890,9 +891,10 @@ fn visit_ty(&mut self, ty: &'v hir::Ty<'v>) { } } } - fn nested_visit_map<'this>( - &'this mut self, - ) -> intravisit::NestedVisitorMap<'this, 'v> + type Map = Map<'v>; + fn nested_visit_map( + &mut self, + ) -> intravisit::NestedVisitorMap<'_, Self::Map> { intravisit::NestedVisitorMap::None } diff --git a/src/librustc_typeck/check/generator_interior.rs b/src/librustc_typeck/check/generator_interior.rs index f004d04fdfeba1528ce02c75e90d6c0ac9003d32..5936fe9b2a486e92b8e88002494b53e5a20147aa 100644 --- a/src/librustc_typeck/check/generator_interior.rs +++ b/src/librustc_typeck/check/generator_interior.rs @@ -5,6 +5,7 @@ use super::FnCtxt; use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::middle::region::{self, YieldData}; use rustc::ty::{self, Ty}; use rustc_data_structures::fx::FxHashMap; @@ -193,7 +194,9 @@ pub fn resolve_interior<'a, 'tcx>( // librustc/middle/region.rs since `expr_count` is compared against the results // there. impl<'a, 'tcx> Visitor<'tcx> for InteriorVisitor<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc_typeck/check/method/suggest.rs b/src/librustc_typeck/check/method/suggest.rs index 8bf9f488e59771fe459a16ed1c0b616ab3ff49d4..35e5588273b26fd7ca5e4f324895b12e7fc7ffcb 100644 --- a/src/librustc_typeck/check/method/suggest.rs +++ b/src/librustc_typeck/check/method/suggest.rs @@ -7,6 +7,7 @@ use errors::{pluralize, struct_span_err, Applicability, DiagnosticBuilder}; use rustc::hir::intravisit; use rustc::hir::map as hir_map; +use rustc::hir::map::Map; use rustc::infer::type_variable::{TypeVariableOrigin, TypeVariableOriginKind}; use rustc::traits::Obligation; use rustc::ty::print::with_crate_prefix; @@ -1124,7 +1125,9 @@ fn visit_mod(&mut self, module: &'tcx hir::Mod<'tcx>, _: Span, hir_id: hir::HirI } } - fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap<'_, Self::Map> { intravisit::NestedVisitorMap::None } } diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index e6fbae09ba1a0991bab35850d9ee8e811f1967a6..a977ecd8dafca95aa849a1d8480bfb240522f136 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -92,6 +92,7 @@ use crate::namespace::Namespace; use errors::{pluralize, struct_span_err, Applicability, DiagnosticBuilder, DiagnosticId}; use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::infer::canonical::{Canonical, OriginalQueryValues, QueryResponse}; use rustc::infer::error_reporting::TypeAnnotationNeeded::E0282; use rustc::infer::opaque_types::OpaqueTypeDecl; @@ -1170,7 +1171,9 @@ fn assign(&mut self, span: Span, nid: hir::HirId, ty_opt: Option>) } impl<'a, 'tcx> Visitor<'tcx> for GatherLocalsVisitor<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc_typeck/check/regionck.rs b/src/librustc_typeck/check/regionck.rs index 3b2f3d17e8da6a7e4bd89c31146dc6a0d7904151..b4fed3fe4e245e5640530d5dab658006930f3859 100644 --- a/src/librustc_typeck/check/regionck.rs +++ b/src/librustc_typeck/check/regionck.rs @@ -77,6 +77,7 @@ use crate::mem_categorization as mc; use crate::middle::region; use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::infer::outlives::env::OutlivesEnvironment; use rustc::infer::{self, RegionObligation, SuppressRegionErrors}; use rustc::ty::adjustment; @@ -414,7 +415,9 @@ impl<'a, 'tcx> Visitor<'tcx> for RegionCtxt<'a, 'tcx> { // hierarchy, and in particular the relationships between free // regions, until regionck, as described in #3238. - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc_typeck/check/upvar.rs b/src/librustc_typeck/check/upvar.rs index be912b6bcafc03d2c8d3df190f6e24d3da7af2cf..8c107db21502b94ebf25b821ee4c2c3a9b70f68c 100644 --- a/src/librustc_typeck/check/upvar.rs +++ b/src/librustc_typeck/check/upvar.rs @@ -36,6 +36,7 @@ use crate::mem_categorization as mc; use crate::mem_categorization::PlaceBase; use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::infer::UpvarRegion; use rustc::ty::{self, Ty, TyCtxt, UpvarSubsts}; use rustc_data_structures::fx::FxIndexMap; @@ -59,7 +60,9 @@ struct InferBorrowKindVisitor<'a, 'tcx> { } impl<'a, 'tcx> Visitor<'tcx> for InferBorrowKindVisitor<'a, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc_typeck/check/writeback.rs b/src/librustc_typeck/check/writeback.rs index ad9a2f2e2b45e44d5c23e00561f4f1a18160ddd4..f03bc21aef79d4a3de6a272537b62f4c3ded93f9 100644 --- a/src/librustc_typeck/check/writeback.rs +++ b/src/librustc_typeck/check/writeback.rs @@ -5,6 +5,7 @@ use crate::check::FnCtxt; use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::infer::error_reporting::TypeAnnotationNeeded::E0282; use rustc::infer::InferCtxt; use rustc::ty::adjustment::{Adjust, Adjustment, PointerCast}; @@ -242,7 +243,9 @@ fn fix_index_builtin_expr(&mut self, e: &hir::Expr<'_>) { // traffic in node-ids or update tables in the type context etc. impl<'cx, 'tcx> Visitor<'tcx> for WritebackCx<'cx, 'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs index 35c380612d2fb234f4cac571886665ae748a0211..50cd059fe8ddb404303a822544c11eb201e7204f 100644 --- a/src/librustc_typeck/collect.rs +++ b/src/librustc_typeck/collect.rs @@ -22,6 +22,7 @@ use crate::middle::weak_lang_items; use errors::{struct_span_err, Applicability, StashKey}; use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor}; +use rustc::hir::map::Map; use rustc::middle::codegen_fn_attrs::{CodegenFnAttrFlags, CodegenFnAttrs}; use rustc::mir::mono::Linkage; use rustc::traits; @@ -104,7 +105,9 @@ pub struct ItemCtxt<'tcx> { crate struct PlaceholderHirTyCollector(crate Vec); impl<'v> Visitor<'v> for PlaceholderHirTyCollector { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'v> { + type Map = Map<'v>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } fn visit_ty(&mut self, t: &'v hir::Ty<'v>) { @@ -185,7 +188,9 @@ fn reject_placeholder_type_signatures_in_item(tcx: TyCtxt<'tcx>, item: &'tcx hir } impl Visitor<'tcx> for CollectItemTypesVisitor<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::OnlyBodies(&self.tcx.hir()) } @@ -885,7 +890,9 @@ struct LateBoundRegionsDetector<'tcx> { } impl Visitor<'tcx> for LateBoundRegionsDetector<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> { NestedVisitorMap::None } @@ -1715,7 +1722,9 @@ fn check(&mut self, def_id: DefId) { } impl<'tcx> intravisit::Visitor<'tcx> for ConstraintLocator<'tcx> { - fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, 'tcx> { + type Map = Map<'tcx>; + + fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap<'_, Self::Map> { intravisit::NestedVisitorMap::All(&self.tcx.hir()) } fn visit_item(&mut self, it: &'tcx Item<'tcx>) { diff --git a/src/librustdoc/test.rs b/src/librustdoc/test.rs index d94e940a7f72cfee08d8984d15d7a1a6f81f3739..cbef4f8ae692a95f805548fa607ef66623c9b06e 100644 --- a/src/librustdoc/test.rs +++ b/src/librustdoc/test.rs @@ -899,7 +899,9 @@ fn visit_testable( } impl<'a, 'hir> intravisit::Visitor<'hir> for HirCollector<'a, 'hir> { - fn nested_visit_map<'this>(&'this mut self) -> intravisit::NestedVisitorMap<'this, 'hir> { + type Map = Map<'hir>; + + fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap<'_, Self::Map> { intravisit::NestedVisitorMap::All(&self.map) }