From c7e1f4dcb78739fae7127c9d1ede182420f08a70 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Mon, 24 Jun 2019 09:41:29 +0200 Subject: [PATCH 1/6] HIR: remove the NodeId get_parent_node, HirIdify is_argument --- src/librustc/hir/map/mod.rs | 23 ++++++++--------------- src/librustc/middle/mem_categorization.rs | 2 +- src/librustc_save_analysis/lib.rs | 5 ++++- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index 0b8b69be0a480..b31941f28392d 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -615,23 +615,16 @@ impl<'hir> Map<'hir> { result } - /// Similar to `get_parent`; returns the parent node-ID, or just `hir_id` if there - /// is no parent. Note that the parent may be `CRATE_NODE_ID`, which is not itself + /// Similar to `get_parent`; returns the parent HIR Id, or just `hir_id` if there + /// is no parent. Note that the parent may be `CRATE_HIR_ID`, which is not itself /// present in the map, so passing the return value of `get_parent_node` to /// `get` may in fact panic. - /// This function returns the immediate parent in the AST, whereas `get_parent` + /// This function returns the immediate parent in the HIR, whereas `get_parent` /// returns the enclosing item. Note that this might not be the actual parent - /// node in the AST -- some kinds of nodes are not in the map and these will + /// node in the HIR -- some kinds of nodes are not in the map and these will /// never appear as the parent node. Thus, you can always walk the parent nodes - /// from a node to the root of the AST (unless you get back the same ID here, + /// from a node to the root of the HIR (unless you get back the same ID here, /// which can happen if the ID is not in the map itself or is just weird). - pub fn get_parent_node(&self, id: NodeId) -> NodeId { - let hir_id = self.node_to_hir_id(id); - let parent_hir_id = self.get_parent_node_by_hir_id(hir_id); - self.hir_to_node_id(parent_hir_id) - } - - // FIXME(@ljedrz): replace the `NodeId` variant. pub fn get_parent_node_by_hir_id(&self, hir_id: HirId) -> HirId { if self.dep_graph.is_fully_enabled() { let hir_id_owner = hir_id.owner; @@ -646,12 +639,12 @@ impl<'hir> Map<'hir> { /// Check if the node is an argument. An argument is a local variable whose /// immediate parent is an item or a closure. - pub fn is_argument(&self, id: NodeId) -> bool { - match self.find(id) { + pub fn is_argument(&self, id: HirId) -> bool { + match self.find_by_hir_id(id) { Some(Node::Binding(_)) => (), _ => return false, } - match self.find(self.get_parent_node(id)) { + match self.find_by_hir_id(self.get_parent_node_by_hir_id(id)) { Some(Node::Item(_)) | Some(Node::TraitItem(_)) | Some(Node::ImplItem(_)) => true, diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 10796abe5d4c4..e7253a73bd418 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -1526,7 +1526,7 @@ impl<'tcx> cmt_<'tcx> { "non-place".into() } Categorization::Local(vid) => { - if tcx.hir().is_argument(tcx.hir().hir_to_node_id(vid)) { + if tcx.hir().is_argument(vid) { "argument" } else { "local variable" diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index 23fe150c6ff65..edee8eeaeb30c 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -621,7 +621,10 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { Node::PathSegment(seg) => { match seg.res { Some(res) if res != Res::Err => res, - _ => self.get_path_res(self.tcx.hir().get_parent_node(id)), + _ => { + let parent_node = self.tcx.hir().get_parent_node_by_hir_id(hir_id); + self.get_path_res(self.tcx.hir().hir_to_node_id(parent_node)) + }, } } From d08bd72e977d05f7fe6d1140e10d7311f64f0f21 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Mon, 24 Jun 2019 09:46:38 +0200 Subject: [PATCH 2/6] HIR: rename get_parent_node_by_hir_id to get_parent_node --- src/librustc/hir/map/blocks.rs | 2 +- src/librustc/hir/map/mod.rs | 14 +++++++------- src/librustc/middle/resolve_lifetime.rs | 4 ++-- src/librustc/traits/error_reporting.rs | 4 ++-- src/librustc/ty/context.rs | 4 ++-- .../borrowck/gather_loans/gather_moves.rs | 2 +- src/librustc_borrowck/borrowck/mod.rs | 4 ++-- src/librustc_driver/pretty.rs | 2 +- src/librustc_lint/types.rs | 4 ++-- src/librustc_mir/hair/cx/expr.rs | 2 +- src/librustc_mir/transform/check_unsafety.rs | 2 +- src/librustc_privacy/lib.rs | 6 +++--- src/librustc_save_analysis/lib.rs | 2 +- src/librustc_typeck/astconv.rs | 4 ++-- src/librustc_typeck/check/_match.rs | 12 ++++++------ src/librustc_typeck/check/callee.rs | 2 +- src/librustc_typeck/check/coercion.rs | 4 ++-- src/librustc_typeck/check/demand.rs | 10 +++++----- src/librustc_typeck/check/method/suggest.rs | 4 ++-- src/librustc_typeck/check/mod.rs | 4 ++-- src/librustc_typeck/collect.rs | 2 +- 21 files changed, 47 insertions(+), 47 deletions(-) diff --git a/src/librustc/hir/map/blocks.rs b/src/librustc/hir/map/blocks.rs index 8c5fa97d4b72d..351f5818f7e67 100644 --- a/src/librustc/hir/map/blocks.rs +++ b/src/librustc/hir/map/blocks.rs @@ -87,7 +87,7 @@ impl<'a> Code<'a> { match map.get(id) { map::Node::Block(_) => { // Use the parent, hopefully an expression node. - Code::from_node(map, map.get_parent_node_by_hir_id(id)) + Code::from_node(map, map.get_parent_node(id)) } map::Node::Expr(expr) => Some(Code::Expr(expr)), node => FnLikeNode::from_node(node).map(Code::FnLike) diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index b31941f28392d..bb39f85e1c3bd 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -347,7 +347,7 @@ impl<'hir> Map<'hir> { if variant_data.ctor_hir_id().is_none() { return None; } - let ctor_of = match self.find_by_hir_id(self.get_parent_node_by_hir_id(hir_id)) { + let ctor_of = match self.find_by_hir_id(self.get_parent_node(hir_id)) { Some(Node::Item(..)) => def::CtorOf::Struct, Some(Node::Variant(..)) => def::CtorOf::Variant, _ => unreachable!(), @@ -424,7 +424,7 @@ impl<'hir> Map<'hir> { /// which this is the body of, i.e., a `fn`, `const` or `static` /// item (possibly associated), a closure, or a `hir::AnonConst`. pub fn body_owner(&self, BodyId { hir_id }: BodyId) -> HirId { - let parent = self.get_parent_node_by_hir_id(hir_id); + let parent = self.get_parent_node(hir_id); assert!(self.lookup(parent).map_or(false, |e| e.is_body_owner(hir_id))); parent } @@ -485,7 +485,7 @@ impl<'hir> Map<'hir> { match self.get(id) { Node::Item(&Item { node: ItemKind::Trait(..), .. }) | Node::Item(&Item { node: ItemKind::TraitAlias(..), .. }) => id, - Node::GenericParam(_) => self.get_parent_node_by_hir_id(id), + Node::GenericParam(_) => self.get_parent_node(id), _ => bug!("ty_param_owner: {} not a type parameter", self.node_to_string(id)) } } @@ -625,7 +625,7 @@ impl<'hir> Map<'hir> { /// never appear as the parent node. Thus, you can always walk the parent nodes /// from a node to the root of the HIR (unless you get back the same ID here, /// which can happen if the ID is not in the map itself or is just weird). - pub fn get_parent_node_by_hir_id(&self, hir_id: HirId) -> HirId { + pub fn get_parent_node(&self, hir_id: HirId) -> HirId { if self.dep_graph.is_fully_enabled() { let hir_id_owner = hir_id.owner; let def_path_hash = self.definitions.def_path_hash(hir_id_owner); @@ -644,7 +644,7 @@ impl<'hir> Map<'hir> { Some(Node::Binding(_)) => (), _ => return false, } - match self.find_by_hir_id(self.get_parent_node_by_hir_id(id)) { + match self.find_by_hir_id(self.get_parent_node(id)) { Some(Node::Item(_)) | Some(Node::TraitItem(_)) | Some(Node::ImplItem(_)) => true, @@ -680,7 +680,7 @@ impl<'hir> Map<'hir> { { let mut id = start_id; loop { - let parent_id = self.get_parent_node_by_hir_id(id); + let parent_id = self.get_parent_node(id); if parent_id == CRATE_HIR_ID { return Ok(CRATE_HIR_ID); } @@ -1022,7 +1022,7 @@ impl<'hir> Map<'hir> { Some(Node::Arm(arm)) => arm.span, Some(Node::Block(block)) => block.span, Some(Node::Ctor(..)) => match self.find_by_hir_id( - self.get_parent_node_by_hir_id(hir_id)) + self.get_parent_node(hir_id)) { Some(Node::Item(item)) => item.span, Some(Node::Variant(variant)) => variant.span, diff --git a/src/librustc/middle/resolve_lifetime.rs b/src/librustc/middle/resolve_lifetime.rs index b8e7db99d071c..ac2124f4a161f 100644 --- a/src/librustc/middle/resolve_lifetime.rs +++ b/src/librustc/middle/resolve_lifetime.rs @@ -662,7 +662,7 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> { if let Some(Region::LateBound(_, def_id, _)) = def { if let Some(hir_id) = self.tcx.hir().as_local_hir_id(def_id) { // Ensure that the parent of the def is an item, not HRTB - let parent_id = self.tcx.hir().get_parent_node_by_hir_id(hir_id); + let parent_id = self.tcx.hir().get_parent_node(hir_id); let parent_impl_id = hir::ImplItemId { hir_id: parent_id }; let parent_trait_id = hir::TraitItemId { hir_id: parent_id }; let krate = self.tcx.hir().forest.krate(); @@ -2051,7 +2051,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> { // and whether there's a `self` argument (treated specially). let mut assoc_item_kind = None; let mut impl_self = None; - let parent = self.tcx.hir().get_parent_node_by_hir_id(output.hir_id); + let parent = self.tcx.hir().get_parent_node(output.hir_id); let body = match self.tcx.hir().get(parent) { // `fn` definitions and methods. Node::Item(&hir::Item { diff --git a/src/librustc/traits/error_reporting.rs b/src/librustc/traits/error_reporting.rs index b433098c1b265..f99d68469765a 100644 --- a/src/librustc/traits/error_reporting.rs +++ b/src/librustc/traits/error_reporting.rs @@ -938,7 +938,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { err: &mut DiagnosticBuilder<'tcx>, ) { if let &ObligationCauseCode::VariableType(hir_id) = code { - let parent_node = self.tcx.hir().get_parent_node_by_hir_id(hir_id); + let parent_node = self.tcx.hir().get_parent_node(hir_id); if let Some(Node::Local(ref local)) = self.tcx.hir().find_by_hir_id(parent_node) { if let Some(ref expr) = local.init { if let hir::ExprKind::Index(_, _) = expr.node { @@ -1013,7 +1013,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { trait_ref: &ty::Binder>, ) { let hir = self.tcx.hir(); - let parent_node = hir.get_parent_node_by_hir_id(obligation.cause.body_id); + let parent_node = hir.get_parent_node(obligation.cause.body_id); let node = hir.find_by_hir_id(parent_node); if let Some(hir::Node::Item(hir::Item { node: hir::ItemKind::Fn(decl, _, _, body_id), diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 28399ed5439f7..45822fcba7ba4 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -2880,7 +2880,7 @@ impl<'tcx> TyCtxt<'tcx> { if lint::maybe_lint_level_root(self, id) { return id; } - let next = self.hir().get_parent_node_by_hir_id(id); + let next = self.hir().get_parent_node(id); if next == id { bug!("lint traversal reached the root of the crate"); } @@ -2898,7 +2898,7 @@ impl<'tcx> TyCtxt<'tcx> { if let Some(pair) = sets.level_and_source(lint, id, self.sess) { return pair } - let next = self.hir().get_parent_node_by_hir_id(id); + let next = self.hir().get_parent_node(id); if next == id { bug!("lint traversal reached the root of the crate"); } diff --git a/src/librustc_borrowck/borrowck/gather_loans/gather_moves.rs b/src/librustc_borrowck/borrowck/gather_loans/gather_moves.rs index fa286632dac84..658e4307348db 100644 --- a/src/librustc_borrowck/borrowck/gather_loans/gather_moves.rs +++ b/src/librustc_borrowck/borrowck/gather_loans/gather_moves.rs @@ -47,7 +47,7 @@ pub enum PatternSource<'tcx> { /// with a reference to the let fn get_pattern_source<'tcx>(tcx: TyCtxt<'tcx>, pat: &Pat) -> PatternSource<'tcx> { - let parent = tcx.hir().get_parent_node_by_hir_id(pat.hir_id); + let parent = tcx.hir().get_parent_node(pat.hir_id); match tcx.hir().get(parent) { Node::Expr(ref e) => { diff --git a/src/librustc_borrowck/borrowck/mod.rs b/src/librustc_borrowck/borrowck/mod.rs index 87c0b8563cadb..4ff669ddad9ca 100644 --- a/src/librustc_borrowck/borrowck/mod.rs +++ b/src/librustc_borrowck/borrowck/mod.rs @@ -1189,7 +1189,7 @@ impl BorrowckCtxt<'_, 'tcx> { } fn local_ty(&self, hir_id: hir::HirId) -> (Option<&hir::Ty>, bool) { - let parent = self.tcx.hir().get_parent_node_by_hir_id(hir_id); + let parent = self.tcx.hir().get_parent_node(hir_id); let parent_node = self.tcx.hir().get(parent); // The parent node is like a fn @@ -1287,7 +1287,7 @@ impl BorrowckCtxt<'_, 'tcx> { }, )) = ty.map(|t| &t.node) { - let borrow_expr_id = self.tcx.hir().get_parent_node_by_hir_id(borrowed_hir_id); + let borrow_expr_id = self.tcx.hir().get_parent_node(borrowed_hir_id); db.span_suggestion( self.tcx.hir().span(borrow_expr_id), "consider removing the `&mut`, as it is an \ diff --git a/src/librustc_driver/pretty.rs b/src/librustc_driver/pretty.rs index 030166182490b..1b78f77e4f915 100644 --- a/src/librustc_driver/pretty.rs +++ b/src/librustc_driver/pretty.rs @@ -631,7 +631,7 @@ fn print_flowgraph<'tcx, W: Write>( if let Some(n) = hir::map::blocks::FnLikeNode::from_node(node) { break n.body(); } - let parent = tcx.hir().get_parent_node_by_hir_id(hir_id); + let parent = tcx.hir().get_parent_node(hir_id); assert_ne!(hir_id, parent); hir_id = parent; } diff --git a/src/librustc_lint/types.rs b/src/librustc_lint/types.rs index 2fb534e8228e6..d0258ca30c507 100644 --- a/src/librustc_lint/types.rs +++ b/src/librustc_lint/types.rs @@ -275,7 +275,7 @@ fn lint_int_literal<'a, 'tcx>( return; } - let par_id = cx.tcx.hir().get_parent_node_by_hir_id(e.hir_id); + let par_id = cx.tcx.hir().get_parent_node(e.hir_id); if let Node::Expr(par_e) = cx.tcx.hir().get(par_id) { if let hir::ExprKind::Struct(..) = par_e.node { if is_range_literal(cx.sess(), par_e) @@ -314,7 +314,7 @@ fn lint_uint_literal<'a, 'tcx>( _ => bug!(), }; if lit_val < min || lit_val > max { - let parent_id = cx.tcx.hir().get_parent_node_by_hir_id(e.hir_id); + let parent_id = cx.tcx.hir().get_parent_node(e.hir_id); if let Node::Expr(par_e) = cx.tcx.hir().get(parent_id) { match par_e.node { hir::ExprKind::Cast(..) => { diff --git a/src/librustc_mir/hair/cx/expr.rs b/src/librustc_mir/hair/cx/expr.rs index 597f172da671f..94b4f6e8dd1c5 100644 --- a/src/librustc_mir/hair/cx/expr.rs +++ b/src/librustc_mir/hair/cx/expr.rs @@ -909,7 +909,7 @@ fn convert_path_expr<'a, 'tcx>( Res::Def(DefKind::ConstParam, def_id) => { let hir_id = cx.tcx.hir().as_local_hir_id(def_id).unwrap(); - let item_id = cx.tcx.hir().get_parent_node_by_hir_id(hir_id); + let item_id = cx.tcx.hir().get_parent_node(hir_id); let item_def_id = cx.tcx.hir().local_def_id_from_hir_id(item_id); let generics = cx.tcx.generics_of(item_def_id); let local_def_id = cx.tcx.hir().local_def_id_from_hir_id(hir_id); diff --git a/src/librustc_mir/transform/check_unsafety.rs b/src/librustc_mir/transform/check_unsafety.rs index 9c78d761cb2ca..545336a5906bb 100644 --- a/src/librustc_mir/transform/check_unsafety.rs +++ b/src/librustc_mir/transform/check_unsafety.rs @@ -570,7 +570,7 @@ fn is_enclosed( used_unsafe: &FxHashSet, id: hir::HirId, ) -> Option<(String, hir::HirId)> { - let parent_id = tcx.hir().get_parent_node_by_hir_id(id); + let parent_id = tcx.hir().get_parent_node(id); if parent_id != id { if used_unsafe.contains(&parent_id) { Some(("block".to_string(), parent_id)) diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index 0fdc9ac890350..e95911bbec29a 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -247,7 +247,7 @@ fn def_id_visibility<'tcx>( } } Node::Ctor(vdata) => { - let parent_hir_id = tcx.hir().get_parent_node_by_hir_id(hir_id); + let parent_hir_id = tcx.hir().get_parent_node(hir_id); match tcx.hir().get(parent_hir_id) { Node::Variant(..) => { let parent_did = tcx.hir().local_def_id_from_hir_id(parent_hir_id); @@ -784,7 +784,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> { if module_id == hir::CRATE_HIR_ID { break } - module_id = self.tcx.hir().get_parent_node_by_hir_id(module_id); + module_id = self.tcx.hir().get_parent_node(module_id); } } } @@ -1674,7 +1674,7 @@ impl<'a, 'tcx> PrivateItemsInPublicInterfacesVisitor<'a, 'tcx> { has_old_errors = true; break; } - let parent = self.tcx.hir().get_parent_node_by_hir_id(id); + let parent = self.tcx.hir().get_parent_node(id); if parent == id { break; } diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index edee8eeaeb30c..750222451db6f 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -622,7 +622,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { match seg.res { Some(res) if res != Res::Err => res, _ => { - let parent_node = self.tcx.hir().get_parent_node_by_hir_id(hir_id); + let parent_node = self.tcx.hir().get_parent_node(hir_id); self.get_path_res(self.tcx.hir().hir_to_node_id(parent_node)) }, } diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index 33d9b1ff0c6ce..0375ad4a08f26 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -2000,7 +2000,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { self.prohibit_generics(&path.segments); let hir_id = tcx.hir().as_local_hir_id(def_id).unwrap(); - let item_id = tcx.hir().get_parent_node_by_hir_id(hir_id); + let item_id = tcx.hir().get_parent_node(hir_id); let item_def_id = tcx.hir().local_def_id_from_hir_id(item_id); let generics = tcx.generics_of(item_def_id); let index = generics.param_def_id_to_index[&def_id]; @@ -2190,7 +2190,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { // Find the name and index of the const parameter by indexing the generics of the // parent item and construct a `ParamConst`. let hir_id = tcx.hir().as_local_hir_id(def_id).unwrap(); - let item_id = tcx.hir().get_parent_node_by_hir_id(hir_id); + let item_id = tcx.hir().get_parent_node(hir_id); let item_def_id = tcx.hir().local_def_id_from_hir_id(item_id); let generics = tcx.generics_of(item_def_id); let index = generics.param_def_id_to_index[&tcx.hir().local_def_id_from_hir_id(hir_id)]; diff --git a/src/librustc_typeck/check/_match.rs b/src/librustc_typeck/check/_match.rs index 293b68c871131..b435c99ad01f5 100644 --- a/src/librustc_typeck/check/_match.rs +++ b/src/librustc_typeck/check/_match.rs @@ -546,7 +546,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { ) { let tcx = self.tcx; if let PatKind::Binding(..) = inner.node { - let parent_id = tcx.hir().get_parent_node_by_hir_id(pat.hir_id); + let parent_id = tcx.hir().get_parent_node(pat.hir_id); let parent = tcx.hir().get(parent_id); debug!("inner {:?} pat {:?} parent {:?}", inner, pat, parent); match parent { @@ -808,16 +808,16 @@ https://doc.rust-lang.org/reference/types.html#trait-objects"); use hir::Node::{Block, Item, Local}; let hir = self.tcx.hir(); - let arm_id = hir.get_parent_node_by_hir_id(hir_id); - let match_id = hir.get_parent_node_by_hir_id(arm_id); - let containing_id = hir.get_parent_node_by_hir_id(match_id); + let arm_id = hir.get_parent_node(hir_id); + let match_id = hir.get_parent_node(arm_id); + let containing_id = hir.get_parent_node(match_id); let node = hir.get(containing_id); if let Block(block) = node { // check that the body's parent is an fn let parent = hir.get( - hir.get_parent_node_by_hir_id( - hir.get_parent_node_by_hir_id(block.hir_id), + hir.get_parent_node( + hir.get_parent_node(block.hir_id), ), ); if let (Some(expr), Item(hir::Item { diff --git a/src/librustc_typeck/check/callee.rs b/src/librustc_typeck/check/callee.rs index 87807ad91a27d..e6999f9e3ac8a 100644 --- a/src/librustc_typeck/check/callee.rs +++ b/src/librustc_typeck/check/callee.rs @@ -244,7 +244,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { callee_node: &hir::ExprKind, callee_span: Span, ) { - let hir_id = self.tcx.hir().get_parent_node_by_hir_id(hir_id); + let hir_id = self.tcx.hir().get_parent_node(hir_id); let parent_node = self.tcx.hir().get(hir_id); if let ( hir::Node::Expr(hir::Expr { node: hir::ExprKind::Closure(_, _, _, sp, ..), .. }), diff --git a/src/librustc_typeck/check/coercion.rs b/src/librustc_typeck/check/coercion.rs index 71a0ca090b0d8..4bd2f216224a5 100644 --- a/src/librustc_typeck/check/coercion.rs +++ b/src/librustc_typeck/check/coercion.rs @@ -1231,7 +1231,7 @@ impl<'tcx, 'exprs, E: AsCoercionSite> CoerceMany<'tcx, 'exprs, E> { db.span_label(cause.span, "return type is not `()`"); } ObligationCauseCode::BlockTailExpression(blk_id) => { - let parent_id = fcx.tcx.hir().get_parent_node_by_hir_id(blk_id); + let parent_id = fcx.tcx.hir().get_parent_node(blk_id); db = self.report_return_mismatched_types( cause, expected, @@ -1281,7 +1281,7 @@ impl<'tcx, 'exprs, E: AsCoercionSite> CoerceMany<'tcx, 'exprs, E> { // Verify that this is a tail expression of a function, otherwise the // label pointing out the cause for the type coercion will be wrong // as prior return coercions would not be relevant (#57664). - let parent_id = fcx.tcx.hir().get_parent_node_by_hir_id(id); + let parent_id = fcx.tcx.hir().get_parent_node(id); let fn_decl = if let Some((expr, blk_id)) = expression { pointing_at_return_type = fcx.suggest_mismatched_types_on_tail( &mut db, diff --git a/src/librustc_typeck/check/demand.rs b/src/librustc_typeck/check/demand.rs index aff8eba3130d6..180b1eadd6818 100644 --- a/src/librustc_typeck/check/demand.rs +++ b/src/librustc_typeck/check/demand.rs @@ -236,13 +236,13 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { ) -> Option<(Span, &'static str, String)> { if let hir::ExprKind::Path(hir::QPath::Resolved(_, ref path)) = expr.node { if let hir::def::Res::Local(id) = path.res { - let parent = self.tcx.hir().get_parent_node_by_hir_id(id); + let parent = self.tcx.hir().get_parent_node(id); if let Some(Node::Expr(hir::Expr { hir_id, node: hir::ExprKind::Closure(_, decl, ..), .. })) = self.tcx.hir().find_by_hir_id(parent) { - let parent = self.tcx.hir().get_parent_node_by_hir_id(*hir_id); + let parent = self.tcx.hir().get_parent_node(*hir_id); if let (Some(Node::Expr(hir::Expr { node: hir::ExprKind::MethodCall(path, span, expr), .. @@ -276,7 +276,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { sp: Span, ) -> bool { let cm = self.sess().source_map(); - let parent_id = self.tcx.hir().get_parent_node_by_hir_id(hir_id); + let parent_id = self.tcx.hir().get_parent_node(hir_id); if let Some(parent) = self.tcx.hir().find_by_hir_id(parent_id) { // Account for fields if let Node::Expr(hir::Expr { @@ -422,7 +422,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { node: hir::ExprKind::Assign(left_expr, _), .. })) = self.tcx.hir().find_by_hir_id( - self.tcx.hir().get_parent_node_by_hir_id(expr.hir_id), + self.tcx.hir().get_parent_node(expr.hir_id), ) { if mutability == hir::Mutability::MutMutable { // Found the following case: @@ -551,7 +551,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { if let Some(hir::Node::Expr(hir::Expr { node: hir::ExprKind::Struct(_, fields, _), .. - })) = self.tcx.hir().find_by_hir_id(self.tcx.hir().get_parent_node_by_hir_id(expr.hir_id)) { + })) = self.tcx.hir().find_by_hir_id(self.tcx.hir().get_parent_node(expr.hir_id)) { // `expr` is a literal field for a struct, only suggest if appropriate for field in fields { if field.expr.hir_id == expr.hir_id && field.is_shorthand { diff --git a/src/librustc_typeck/check/method/suggest.rs b/src/librustc_typeck/check/method/suggest.rs index 8ad67c2adc035..fa1b07d2dcfcd 100644 --- a/src/librustc_typeck/check/method/suggest.rs +++ b/src/librustc_typeck/check/method/suggest.rs @@ -269,7 +269,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { let filename = tcx.sess.source_map().span_to_filename(span); let parent_node = self.tcx.hir().get( - self.tcx.hir().get_parent_node_by_hir_id(hir_id), + self.tcx.hir().get_parent_node(hir_id), ); let msg = format!( "you must specify a type for this binding, like `{}`", @@ -390,7 +390,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { ); } else { let call_expr = self.tcx.hir().expect_expr( - self.tcx.hir().get_parent_node_by_hir_id(expr.hir_id), + self.tcx.hir().get_parent_node(expr.hir_id), ); if let Some(span) = call_expr.span.trim_start(item_name.span) { diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index 0ec5c9763a0fb..2da761f6d37df 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -4259,7 +4259,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { // If our calling expression is indeed the function itself, we're good! // If not, generate an error that this can only be called directly. if let Node::Expr(expr) = self.tcx.hir().get( - self.tcx.hir().get_parent_node_by_hir_id(hir_id)) + self.tcx.hir().get_parent_node(hir_id)) { if let ExprKind::Call(ref callee, ..) = expr.node { if callee.hir_id == hir_id { @@ -4334,7 +4334,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { let mut contained_in_place = false; while let hir::Node::Expr(parent_expr) = - self.tcx.hir().get(self.tcx.hir().get_parent_node_by_hir_id(expr_id)) + self.tcx.hir().get(self.tcx.hir().get_parent_node(expr_id)) { match &parent_expr.node { hir::ExprKind::Assign(lhs, ..) | hir::ExprKind::AssignOp(_, lhs, ..) => { diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs index 301168aefd203..87e1166b7c041 100644 --- a/src/librustc_typeck/collect.rs +++ b/src/librustc_typeck/collect.rs @@ -1298,7 +1298,7 @@ pub fn checked_type_of<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, fail: bool) -> Op } Node::AnonConst(_) => { - let parent_node = tcx.hir().get(tcx.hir().get_parent_node_by_hir_id(hir_id)); + let parent_node = tcx.hir().get(tcx.hir().get_parent_node(hir_id)); match parent_node { Node::Ty(&hir::Ty { node: hir::TyKind::Array(_, ref constant), From 90de9edce576d03bd6e7e5d294fa44d8d1ef8a5a Mon Sep 17 00:00:00 2001 From: ljedrz Date: Mon, 24 Jun 2019 09:55:11 +0200 Subject: [PATCH 3/6] HIR: remove the NodeId find --- src/librustc/hir/map/mod.rs | 6 ------ src/librustc_driver/pretty.rs | 4 ++-- src/librustc_mir/build/mod.rs | 3 +-- src/librustc_save_analysis/lib.rs | 11 ++++++++--- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index bb39f85e1c3bd..ea18a73577cf0 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -595,12 +595,6 @@ impl<'hir> Map<'hir> { } /// Retrieves the `Node` corresponding to `id`, returning `None` if cannot be found. - pub fn find(&self, id: NodeId) -> Option> { - let hir_id = self.node_to_hir_id(id); - self.find_by_hir_id(hir_id) - } - - // FIXME(@ljedrz): replace the `NodeId` variant. pub fn find_by_hir_id(&self, hir_id: HirId) -> Option> { let result = self.find_entry(hir_id).and_then(|entry| { if let Node::Crate = entry.node { diff --git a/src/librustc_driver/pretty.rs b/src/librustc_driver/pretty.rs index 1b78f77e4f915..ff0e6aacef138 100644 --- a/src/librustc_driver/pretty.rs +++ b/src/librustc_driver/pretty.rs @@ -907,11 +907,11 @@ fn print_with_analysis<'tcx>( let nodeid = nodeid.expect("`pretty flowgraph=..` needs NodeId (int) or unique path \ suffix (b::c::d)"); - let node = tcx.hir().find(nodeid).unwrap_or_else(|| { + let hir_id = tcx.hir().node_to_hir_id(nodeid); + let node = tcx.hir().find_by_hir_id(hir_id).unwrap_or_else(|| { tcx.sess.fatal(&format!("--pretty flowgraph couldn't find id: {}", nodeid)) }); - let hir_id = tcx.hir().node_to_hir_id(nodeid); match blocks::Code::from_node(&tcx.hir(), hir_id) { Some(code) => { let variants = gather_flowgraph_variants(tcx.sess); diff --git a/src/librustc_mir/build/mod.rs b/src/librustc_mir/build/mod.rs index 66064221b391c..1cc15ca484eca 100644 --- a/src/librustc_mir/build/mod.rs +++ b/src/librustc_mir/build/mod.rs @@ -552,7 +552,6 @@ where .into_iter() .flatten() .map(|(&var_hir_id, &upvar_id)| { - let var_node_id = tcx_hir.hir_to_node_id(var_hir_id); let capture = hir_tables.upvar_capture(upvar_id); let by_ref = match capture { ty::UpvarCapture::ByValue => false, @@ -563,7 +562,7 @@ where by_ref, }; let mut mutability = Mutability::Not; - if let Some(Node::Binding(pat)) = tcx_hir.find(var_node_id) { + if let Some(Node::Binding(pat)) = tcx_hir.find_by_hir_id(var_hir_id) { if let hir::PatKind::Binding(_, _, ident, _) = pat.node { debuginfo.debug_name = ident.name; if let Some(&bm) = hir.tables.pat_binding_modes().get(pat.hir_id) { diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index 750222451db6f..3d88b2347c17a 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -410,7 +410,10 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { let mut decl_id = None; let mut docs = String::new(); let mut attrs = vec![]; - if let Some(Node::ImplItem(item)) = self.tcx.hir().find(id) { + let hir_id = self.tcx.hir().node_to_hir_id(id); + if let Some(Node::ImplItem(item)) = + self.tcx.hir().find_by_hir_id(hir_id) + { docs = self.docs_for_attrs(&item.attrs); attrs = item.attrs.to_vec(); } @@ -451,8 +454,9 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { Some(def_id) => { let mut docs = String::new(); let mut attrs = vec![]; + let hir_id = self.tcx.hir().node_to_hir_id(id); - if let Some(Node::TraitItem(item)) = self.tcx.hir().find(id) { + if let Some(Node::TraitItem(item)) = self.tcx.hir().find_by_hir_id(hir_id) { docs = self.docs_for_attrs(&item.attrs); attrs = item.attrs.to_vec(); } @@ -521,7 +525,8 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { } match expr.node { ast::ExprKind::Field(ref sub_ex, ident) => { - let hir_node = match self.tcx.hir().find(sub_ex.id) { + let sub_ex_hir_id = self.tcx.hir().node_to_hir_id(sub_ex.id); + let hir_node = match self.tcx.hir().find_by_hir_id(sub_ex_hir_id) { Some(Node::Expr(expr)) => expr, _ => { debug!( From f05cbc98f8402f3146f96ebde63148427b3322f1 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Mon, 24 Jun 2019 09:58:49 +0200 Subject: [PATCH 4/6] HIR: rename find_by_hir_id to find --- src/librustc/hir/map/mod.rs | 32 +++++++++---------- src/librustc/infer/error_reporting/mod.rs | 4 +-- src/librustc/infer/opaque_types/mod.rs | 2 +- src/librustc/middle/dead.rs | 4 +-- src/librustc/middle/liveness.rs | 2 +- src/librustc/middle/reachable.rs | 6 ++-- src/librustc/middle/resolve_lifetime.rs | 2 +- src/librustc/traits/error_reporting.rs | 4 +-- src/librustc/ty/context.rs | 2 +- src/librustc_borrowck/borrowck/mod.rs | 2 +- src/librustc_driver/pretty.rs | 2 +- src/librustc_lint/builtin.rs | 2 +- .../borrow_check/mutability_errors.rs | 4 +-- src/librustc_mir/build/mod.rs | 2 +- src/librustc_mir/transform/check_unsafety.rs | 2 +- src/librustc_passes/loops.rs | 4 +-- src/librustc_privacy/lib.rs | 2 +- src/librustc_save_analysis/lib.rs | 6 ++-- src/librustc_typeck/check/demand.rs | 10 +++--- src/librustc_typeck/check_unused.rs | 2 +- src/librustc_typeck/coherence/builtin.rs | 2 +- src/librustc_typeck/lib.rs | 4 +-- 22 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index ea18a73577cf0..3d591c9a1c6bd 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -292,7 +292,7 @@ impl<'hir> Map<'hir> { } fn def_kind(&self, hir_id: HirId) -> Option { - let node = if let Some(node) = self.find_by_hir_id(hir_id) { + let node = if let Some(node) = self.find(hir_id) { node } else { return None @@ -347,7 +347,7 @@ impl<'hir> Map<'hir> { if variant_data.ctor_hir_id().is_none() { return None; } - let ctor_of = match self.find_by_hir_id(self.get_parent_node(hir_id)) { + let ctor_of = match self.find(self.get_parent_node(hir_id)) { Some(Node::Item(..)) => def::CtorOf::Struct, Some(Node::Variant(..)) => def::CtorOf::Variant, _ => unreachable!(), @@ -563,7 +563,7 @@ impl<'hir> Map<'hir> { /// Retrieves the `Node` corresponding to `id`, panicking if it cannot be found. pub fn get(&self, id: HirId) -> Node<'hir> { // read recorded by `find` - self.find_by_hir_id(id).unwrap_or_else(|| + self.find(id).unwrap_or_else(|| bug!("couldn't find hir id {} in the HIR map", id)) } @@ -595,7 +595,7 @@ impl<'hir> Map<'hir> { } /// Retrieves the `Node` corresponding to `id`, returning `None` if cannot be found. - pub fn find_by_hir_id(&self, hir_id: HirId) -> Option> { + pub fn find(&self, hir_id: HirId) -> Option> { let result = self.find_entry(hir_id).and_then(|entry| { if let Node::Crate = entry.node { None @@ -634,11 +634,11 @@ impl<'hir> Map<'hir> { /// Check if the node is an argument. An argument is a local variable whose /// immediate parent is an item or a closure. pub fn is_argument(&self, id: HirId) -> bool { - match self.find_by_hir_id(id) { + match self.find(id) { Some(Node::Binding(_)) => (), _ => return false, } - match self.find_by_hir_id(self.get_parent_node(id)) { + match self.find(self.get_parent_node(id)) { Some(Node::Item(_)) | Some(Node::TraitItem(_)) | Some(Node::ImplItem(_)) => true, @@ -859,28 +859,28 @@ impl<'hir> Map<'hir> { } pub fn expect_item(&self, id: HirId) -> &'hir Item { - match self.find_by_hir_id(id) { // read recorded by `find` + match self.find(id) { // read recorded by `find` Some(Node::Item(item)) => item, _ => bug!("expected item, found {}", self.node_to_string(id)) } } pub fn expect_impl_item(&self, id: HirId) -> &'hir ImplItem { - match self.find_by_hir_id(id) { + match self.find(id) { Some(Node::ImplItem(item)) => item, _ => bug!("expected impl item, found {}", self.node_to_string(id)) } } pub fn expect_trait_item(&self, id: HirId) -> &'hir TraitItem { - match self.find_by_hir_id(id) { + match self.find(id) { Some(Node::TraitItem(item)) => item, _ => bug!("expected trait item, found {}", self.node_to_string(id)) } } pub fn expect_variant_data(&self, id: HirId) -> &'hir VariantData { - match self.find_by_hir_id(id) { + match self.find(id) { Some(Node::Item(i)) => { match i.node { ItemKind::Struct(ref struct_def, _) | @@ -895,21 +895,21 @@ impl<'hir> Map<'hir> { } pub fn expect_variant(&self, id: HirId) -> &'hir Variant { - match self.find_by_hir_id(id) { + match self.find(id) { Some(Node::Variant(variant)) => variant, _ => bug!("expected variant, found {}", self.node_to_string(id)), } } pub fn expect_foreign_item(&self, id: HirId) -> &'hir ForeignItem { - match self.find_by_hir_id(id) { + match self.find(id) { Some(Node::ForeignItem(item)) => item, _ => bug!("expected foreign item, found {}", self.node_to_string(id)) } } pub fn expect_expr(&self, id: HirId) -> &'hir Expr { - match self.find_by_hir_id(id) { // read recorded by find + match self.find(id) { // read recorded by find Some(Node::Expr(expr)) => expr, _ => bug!("expected expr, found {}", self.node_to_string(id)) } @@ -1015,7 +1015,7 @@ impl<'hir> Map<'hir> { Some(Node::Pat(pat)) => pat.span, Some(Node::Arm(arm)) => arm.span, Some(Node::Block(block)) => block.span, - Some(Node::Ctor(..)) => match self.find_by_hir_id( + Some(Node::Ctor(..)) => match self.find( self.get_parent_node(hir_id)) { Some(Node::Item(item)) => item.span, @@ -1087,7 +1087,7 @@ impl<'a> NodesMatchingSuffix<'a> { // chain, then returns `None`. fn find_first_mod_parent<'a>(map: &'a Map<'_>, mut id: HirId) -> Option<(HirId, Name)> { loop { - if let Node::Item(item) = map.find_by_hir_id(id)? { + if let Node::Item(item) = map.find(id)? { if item_is_mod(&item) { return Some((id, item.ident.name)) } @@ -1260,7 +1260,7 @@ fn hir_id_to_string(map: &Map<'_>, id: HirId, include_id: bool) -> String { }) }; - match map.find_by_hir_id(id) { + match map.find(id) { Some(Node::Item(item)) => { let item_str = match item.node { ItemKind::ExternCrate(..) => "extern crate", diff --git a/src/librustc/infer/error_reporting/mod.rs b/src/librustc/infer/error_reporting/mod.rs index d1e32b1dbad36..65225163a25a4 100644 --- a/src/librustc/infer/error_reporting/mod.rs +++ b/src/librustc/infer/error_reporting/mod.rs @@ -86,7 +86,7 @@ impl<'tcx> TyCtxt<'tcx> { ) }; let span = scope.span(self, region_scope_tree); - let tag = match self.hir().find_by_hir_id(scope.hir_id(region_scope_tree)) { + let tag = match self.hir().find(scope.hir_id(region_scope_tree)) { Some(Node::Block(_)) => "block", Some(Node::Expr(expr)) => match expr.node { hir::ExprKind::Call(..) => "call", @@ -182,7 +182,7 @@ impl<'tcx> TyCtxt<'tcx> { let scope = region.free_region_binding_scope(self); let node = self.hir().as_local_hir_id(scope).unwrap_or(hir::DUMMY_HIR_ID); - let tag = match self.hir().find_by_hir_id(node) { + let tag = match self.hir().find(node) { Some(Node::Block(_)) | Some(Node::Expr(_)) => "body", Some(Node::Item(it)) => Self::item_scope_tag(&it), Some(Node::TraitItem(it)) => Self::trait_item_scope_tag(&it), diff --git a/src/librustc/infer/opaque_types/mod.rs b/src/librustc/infer/opaque_types/mod.rs index a687b0e459100..6b6dbd43167fa 100644 --- a/src/librustc/infer/opaque_types/mod.rs +++ b/src/librustc/infer/opaque_types/mod.rs @@ -777,7 +777,7 @@ impl<'a, 'tcx> Instantiator<'a, 'tcx> { .local_def_id_from_hir_id(opaque_parent_hir_id) }; let (in_definition_scope, origin) = - match tcx.hir().find_by_hir_id(opaque_hir_id) + match tcx.hir().find(opaque_hir_id) { Some(Node::Item(item)) => match item.node { // Anonymous `impl Trait` diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs index 9e2038fa89ed0..e02ee8943603a 100644 --- a/src/librustc/middle/dead.rs +++ b/src/librustc/middle/dead.rs @@ -27,7 +27,7 @@ use syntax_pos; // function, then we should explore its block to check for codes that // may need to be marked as live. fn should_explore<'tcx>(tcx: TyCtxt<'tcx>, hir_id: hir::HirId) -> bool { - match tcx.hir().find_by_hir_id(hir_id) { + match tcx.hir().find(hir_id) { Some(Node::Item(..)) | Some(Node::ImplItem(..)) | Some(Node::ForeignItem(..)) | @@ -145,7 +145,7 @@ impl<'a, 'tcx> MarkSymbolVisitor<'a, 'tcx> { // tuple struct constructor function let id = self.struct_constructors.get(&id).cloned().unwrap_or(id); - if let Some(node) = self.tcx.hir().find_by_hir_id(id) { + if let Some(node) = self.tcx.hir().find(id) { self.live_symbols.insert(id); self.visit_node(node); } diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 0d59e32b09818..bea10e914d038 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -369,7 +369,7 @@ fn visit_fn<'tcx>( // Don't run unused pass for #[derive()] if let FnKind::Method(..) = fk { let parent = ir.tcx.hir().get_parent_item(id); - if let Some(Node::Item(i)) = ir.tcx.hir().find_by_hir_id(parent) { + if let Some(Node::Item(i)) = ir.tcx.hir().find(parent) { if i.attrs.iter().any(|a| a.check_name(sym::automatically_derived)) { return; } diff --git a/src/librustc/middle/reachable.rs b/src/librustc/middle/reachable.rs index 593c5e7342168..d607c35f8762b 100644 --- a/src/librustc/middle/reachable.rs +++ b/src/librustc/middle/reachable.rs @@ -53,7 +53,7 @@ fn method_might_be_inlined<'tcx>( return true } if let Some(impl_hir_id) = tcx.hir().as_local_hir_id(impl_src) { - match tcx.hir().find_by_hir_id(impl_hir_id) { + match tcx.hir().find(impl_hir_id) { Some(Node::Item(item)) => item_might_be_inlined(tcx, &item, codegen_fn_attrs), Some(..) | None => @@ -147,7 +147,7 @@ impl<'a, 'tcx> ReachableContext<'a, 'tcx> { None => { return false; } }; - match self.tcx.hir().find_by_hir_id(hir_id) { + match self.tcx.hir().find(hir_id) { Some(Node::Item(item)) => { match item.node { hir::ItemKind::Fn(..) => @@ -205,7 +205,7 @@ impl<'a, 'tcx> ReachableContext<'a, 'tcx> { continue } - if let Some(ref item) = self.tcx.hir().find_by_hir_id(search_item) { + if let Some(ref item) = self.tcx.hir().find(search_item) { self.propagate_node(item, search_item); } } diff --git a/src/librustc/middle/resolve_lifetime.rs b/src/librustc/middle/resolve_lifetime.rs index ac2124f4a161f..412346bab257e 100644 --- a/src/librustc/middle/resolve_lifetime.rs +++ b/src/librustc/middle/resolve_lifetime.rs @@ -1489,7 +1489,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> { } }; if let Node::Lifetime(hir_lifetime) = self.tcx.hir().get(lifetime.hir_id) { - if let Some(parent) = self.tcx.hir().find_by_hir_id( + if let Some(parent) = self.tcx.hir().find( self.tcx.hir().get_parent_item(hir_lifetime.hir_id)) { match parent { diff --git a/src/librustc/traits/error_reporting.rs b/src/librustc/traits/error_reporting.rs index f99d68469765a..f54575ff8fc1d 100644 --- a/src/librustc/traits/error_reporting.rs +++ b/src/librustc/traits/error_reporting.rs @@ -939,7 +939,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { ) { if let &ObligationCauseCode::VariableType(hir_id) = code { let parent_node = self.tcx.hir().get_parent_node(hir_id); - if let Some(Node::Local(ref local)) = self.tcx.hir().find_by_hir_id(parent_node) { + if let Some(Node::Local(ref local)) = self.tcx.hir().find(parent_node) { if let Some(ref expr) = local.init { if let hir::ExprKind::Index(_, _) = expr.node { if let Ok(snippet) = self.tcx.sess.source_map().span_to_snippet(expr.span) { @@ -1014,7 +1014,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { ) { let hir = self.tcx.hir(); let parent_node = hir.get_parent_node(obligation.cause.body_id); - let node = hir.find_by_hir_id(parent_node); + let node = hir.find(parent_node); if let Some(hir::Node::Item(hir::Item { node: hir::ItemKind::Fn(decl, _, _, body_id), .. diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 45822fcba7ba4..4710d611d99df 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -1589,7 +1589,7 @@ impl<'tcx> TyCtxt<'tcx> { let hir_id = self.hir() .as_local_hir_id(suitable_region_binding_scope) .unwrap(); - let is_impl_item = match self.hir().find_by_hir_id(hir_id) { + let is_impl_item = match self.hir().find(hir_id) { Some(Node::Item(..)) | Some(Node::TraitItem(..)) => false, Some(Node::ImplItem(..)) => { self.is_bound_region_in_impl_item(suitable_region_binding_scope) diff --git a/src/librustc_borrowck/borrowck/mod.rs b/src/librustc_borrowck/borrowck/mod.rs index 4ff669ddad9ca..3c7f19f7fbf4f 100644 --- a/src/librustc_borrowck/borrowck/mod.rs +++ b/src/librustc_borrowck/borrowck/mod.rs @@ -1022,7 +1022,7 @@ impl BorrowckCtxt<'_, 'tcx> { if let ty::ReScope(scope) = *super_scope { let hir_id = scope.hir_id(&self.region_scope_tree); - match self.tcx.hir().find_by_hir_id(hir_id) { + match self.tcx.hir().find(hir_id) { Some(Node::Stmt(_)) => { if *sub_scope != ty::ReStatic { db.note("consider using a `let` binding to increase its lifetime"); diff --git a/src/librustc_driver/pretty.rs b/src/librustc_driver/pretty.rs index ff0e6aacef138..87f7f2fdb48b2 100644 --- a/src/librustc_driver/pretty.rs +++ b/src/librustc_driver/pretty.rs @@ -908,7 +908,7 @@ fn print_with_analysis<'tcx>( nodeid.expect("`pretty flowgraph=..` needs NodeId (int) or unique path \ suffix (b::c::d)"); let hir_id = tcx.hir().node_to_hir_id(nodeid); - let node = tcx.hir().find_by_hir_id(hir_id).unwrap_or_else(|| { + let node = tcx.hir().find(hir_id).unwrap_or_else(|| { tcx.sess.fatal(&format!("--pretty flowgraph couldn't find id: {}", nodeid)) }); diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs index 1a4b12b03d831..12719c3b9d303 100644 --- a/src/librustc_lint/builtin.rs +++ b/src/librustc_lint/builtin.rs @@ -405,7 +405,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MissingDoc { // reported for missing docs. let real_trait = trait_ref.path.res.def_id(); if let Some(hir_id) = cx.tcx.hir().as_local_hir_id(real_trait) { - match cx.tcx.hir().find_by_hir_id(hir_id) { + match cx.tcx.hir().find(hir_id) { Some(Node::Item(item)) => { if let hir::VisibilityKind::Inherited = item.vis.node { for impl_item_ref in impl_item_refs { diff --git a/src/librustc_mir/borrow_check/mutability_errors.rs b/src/librustc_mir/borrow_check/mutability_errors.rs index fc11cd82f8a9a..92c2e4e01f760 100644 --- a/src/librustc_mir/borrow_check/mutability_errors.rs +++ b/src/librustc_mir/borrow_check/mutability_errors.rs @@ -304,7 +304,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> { err.span_label(span, format!("cannot {ACT}", ACT = act)); let upvar_hir_id = self.upvars[upvar_index.index()].var_hir_id; - if let Some(Node::Binding(pat)) = self.infcx.tcx.hir().find_by_hir_id(upvar_hir_id) + if let Some(Node::Binding(pat)) = self.infcx.tcx.hir().find(upvar_hir_id) { if let hir::PatKind::Binding( hir::BindingAnnotation::Unannotated, @@ -633,7 +633,7 @@ fn annotate_struct_field( let field = def.all_fields().nth(field.index())?; // Use the HIR types to construct the diagnostic message. let hir_id = tcx.hir().as_local_hir_id(field.did)?; - let node = tcx.hir().find_by_hir_id(hir_id)?; + let node = tcx.hir().find(hir_id)?; // Now we're dealing with the actual struct that we're going to suggest a change to, // we can expect a field that is an immutable reference to a type. if let hir::Node::Field(field) = node { diff --git a/src/librustc_mir/build/mod.rs b/src/librustc_mir/build/mod.rs index 1cc15ca484eca..311b6aa0c14de 100644 --- a/src/librustc_mir/build/mod.rs +++ b/src/librustc_mir/build/mod.rs @@ -562,7 +562,7 @@ where by_ref, }; let mut mutability = Mutability::Not; - if let Some(Node::Binding(pat)) = tcx_hir.find_by_hir_id(var_hir_id) { + if let Some(Node::Binding(pat)) = tcx_hir.find(var_hir_id) { if let hir::PatKind::Binding(_, _, ident, _) = pat.node { debuginfo.debug_name = ident.name; if let Some(&bm) = hir.tables.pat_binding_modes().get(pat.hir_id) { diff --git a/src/librustc_mir/transform/check_unsafety.rs b/src/librustc_mir/transform/check_unsafety.rs index 545336a5906bb..24df3549be481 100644 --- a/src/librustc_mir/transform/check_unsafety.rs +++ b/src/librustc_mir/transform/check_unsafety.rs @@ -577,7 +577,7 @@ fn is_enclosed( } else if let Some(Node::Item(&hir::Item { node: hir::ItemKind::Fn(_, header, _, _), .. - })) = tcx.hir().find_by_hir_id(parent_id) { + })) = tcx.hir().find(parent_id) { match header.unsafety { hir::Unsafety::Unsafe => Some(("fn".to_string(), parent_id)), hir::Unsafety::Normal => None, diff --git a/src/librustc_passes/loops.rs b/src/librustc_passes/loops.rs index 1c18322259f80..ed0a78b465276 100644 --- a/src/librustc_passes/loops.rs +++ b/src/librustc_passes/loops.rs @@ -107,7 +107,7 @@ impl<'a, 'hir> Visitor<'hir> for CheckLoopVisitor<'a, 'hir> { }; if loop_id != hir::DUMMY_HIR_ID { - if let Node::Block(_) = self.hir_map.find_by_hir_id(loop_id).unwrap() { + if let Node::Block(_) = self.hir_map.find(loop_id).unwrap() { return } } @@ -155,7 +155,7 @@ impl<'a, 'hir> Visitor<'hir> for CheckLoopVisitor<'a, 'hir> { match destination.target_id { Ok(loop_id) => { - if let Node::Block(block) = self.hir_map.find_by_hir_id(loop_id).unwrap() { + if let Node::Block(block) = self.hir_map.find(loop_id).unwrap() { struct_span_err!(self.sess, e.span, E0696, "`continue` pointing to a labeled block") .span_label(e.span, diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index e95911bbec29a..3e98200e53274 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -1233,7 +1233,7 @@ impl<'a, 'tcx> ObsoleteVisiblePrivateTypesVisitor<'a, 'tcx> { if let Some(hir_id) = self.tcx.hir().as_local_hir_id(did) { // .. and it corresponds to a private type in the AST (this returns // `None` for type parameters). - match self.tcx.hir().find_by_hir_id(hir_id) { + match self.tcx.hir().find(hir_id) { Some(Node::Item(ref item)) => !item.vis.node.is_pub(), Some(_) | None => false, } diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index 3d88b2347c17a..19ed9e214073c 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -412,7 +412,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { let mut attrs = vec![]; let hir_id = self.tcx.hir().node_to_hir_id(id); if let Some(Node::ImplItem(item)) = - self.tcx.hir().find_by_hir_id(hir_id) + self.tcx.hir().find(hir_id) { docs = self.docs_for_attrs(&item.attrs); attrs = item.attrs.to_vec(); @@ -456,7 +456,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { let mut attrs = vec![]; let hir_id = self.tcx.hir().node_to_hir_id(id); - if let Some(Node::TraitItem(item)) = self.tcx.hir().find_by_hir_id(hir_id) { + if let Some(Node::TraitItem(item)) = self.tcx.hir().find(hir_id) { docs = self.docs_for_attrs(&item.attrs); attrs = item.attrs.to_vec(); } @@ -526,7 +526,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { match expr.node { ast::ExprKind::Field(ref sub_ex, ident) => { let sub_ex_hir_id = self.tcx.hir().node_to_hir_id(sub_ex.id); - let hir_node = match self.tcx.hir().find_by_hir_id(sub_ex_hir_id) { + let hir_node = match self.tcx.hir().find(sub_ex_hir_id) { Some(Node::Expr(expr)) => expr, _ => { debug!( diff --git a/src/librustc_typeck/check/demand.rs b/src/librustc_typeck/check/demand.rs index 180b1eadd6818..c469d3516e2d4 100644 --- a/src/librustc_typeck/check/demand.rs +++ b/src/librustc_typeck/check/demand.rs @@ -241,12 +241,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { hir_id, node: hir::ExprKind::Closure(_, decl, ..), .. - })) = self.tcx.hir().find_by_hir_id(parent) { + })) = self.tcx.hir().find(parent) { let parent = self.tcx.hir().get_parent_node(*hir_id); if let (Some(Node::Expr(hir::Expr { node: hir::ExprKind::MethodCall(path, span, expr), .. - })), 1) = (self.tcx.hir().find_by_hir_id(parent), decl.inputs.len()) { + })), 1) = (self.tcx.hir().find(parent), decl.inputs.len()) { let self_ty = self.tables.borrow().node_type(expr[0].hir_id); let self_ty = format!("{:?}", self_ty); let name = path.ident.as_str(); @@ -277,7 +277,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { ) -> bool { let cm = self.sess().source_map(); let parent_id = self.tcx.hir().get_parent_node(hir_id); - if let Some(parent) = self.tcx.hir().find_by_hir_id(parent_id) { + if let Some(parent) = self.tcx.hir().find(parent_id) { // Account for fields if let Node::Expr(hir::Expr { node: hir::ExprKind::Struct(_, fields, ..), .. @@ -421,7 +421,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { if let Some(hir::Node::Expr(hir::Expr { node: hir::ExprKind::Assign(left_expr, _), .. - })) = self.tcx.hir().find_by_hir_id( + })) = self.tcx.hir().find( self.tcx.hir().get_parent_node(expr.hir_id), ) { if mutability == hir::Mutability::MutMutable { @@ -551,7 +551,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { if let Some(hir::Node::Expr(hir::Expr { node: hir::ExprKind::Struct(_, fields, _), .. - })) = self.tcx.hir().find_by_hir_id(self.tcx.hir().get_parent_node(expr.hir_id)) { + })) = self.tcx.hir().find(self.tcx.hir().get_parent_node(expr.hir_id)) { // `expr` is a literal field for a struct, only suggest if appropriate for field in fields { if field.expr.hir_id == expr.hir_id && field.is_shorthand { diff --git a/src/librustc_typeck/check_unused.rs b/src/librustc_typeck/check_unused.rs index 8f89a77bd1a3a..7e781eeec56a9 100644 --- a/src/librustc_typeck/check_unused.rs +++ b/src/librustc_typeck/check_unused.rs @@ -95,7 +95,7 @@ fn unused_crates_lint<'tcx>(tcx: TyCtxt<'tcx>) { // below it'll cause a panic because `def_id` is actually bogus at this // point in time otherwise. if let Some(id) = tcx.hir().as_local_hir_id(def_id) { - if tcx.hir().find_by_hir_id(id).is_none() { + if tcx.hir().find(id).is_none() { return false; } } diff --git a/src/librustc_typeck/coherence/builtin.rs b/src/librustc_typeck/coherence/builtin.rs index e392622060c9b..42deeaf31f427 100644 --- a/src/librustc_typeck/coherence/builtin.rs +++ b/src/librustc_typeck/coherence/builtin.rs @@ -52,7 +52,7 @@ fn visit_implementation_of_drop<'tcx>(tcx: TyCtxt<'tcx>, impl_did: DefId) { } else { // Destructors only work on nominal types. if let Some(impl_hir_id) = tcx.hir().as_local_hir_id(impl_did) { - if let Some(Node::Item(item)) = tcx.hir().find_by_hir_id(impl_hir_id) { + if let Some(Node::Item(item)) = tcx.hir().find(impl_hir_id) { let span = match item.node { ItemKind::Impl(.., ref ty, _) => ty.span, _ => item.span, diff --git a/src/librustc_typeck/lib.rs b/src/librustc_typeck/lib.rs index ec0f431d9b25e..3bca41ca7e40d 100644 --- a/src/librustc_typeck/lib.rs +++ b/src/librustc_typeck/lib.rs @@ -182,7 +182,7 @@ fn check_main_fn_ty<'tcx>(tcx: TyCtxt<'tcx>, main_def_id: DefId) { let main_t = tcx.type_of(main_def_id); match main_t.sty { ty::FnDef(..) => { - if let Some(Node::Item(it)) = tcx.hir().find_by_hir_id(main_id) { + if let Some(Node::Item(it)) = tcx.hir().find(main_id) { if let hir::ItemKind::Fn(.., ref generics, _) = it.node { let mut error = false; if !generics.params.is_empty() { @@ -247,7 +247,7 @@ fn check_start_fn_ty<'tcx>(tcx: TyCtxt<'tcx>, start_def_id: DefId) { let start_t = tcx.type_of(start_def_id); match start_t.sty { ty::FnDef(..) => { - if let Some(Node::Item(it)) = tcx.hir().find_by_hir_id(start_id) { + if let Some(Node::Item(it)) = tcx.hir().find(start_id) { if let hir::ItemKind::Fn(.., ref generics, _) = it.node { let mut error = false; if !generics.params.is_empty() { From d82a12f64f05d33f10f0e345e14175c4256703f8 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Mon, 24 Jun 2019 10:03:37 +0200 Subject: [PATCH 5/6] HirIdify driver::pretty::HirPrinterSupport::node_path --- src/librustc_driver/pretty.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/librustc_driver/pretty.rs b/src/librustc_driver/pretty.rs index 87f7f2fdb48b2..d92f3aafa1c7e 100644 --- a/src/librustc_driver/pretty.rs +++ b/src/librustc_driver/pretty.rs @@ -253,10 +253,9 @@ trait HirPrinterSupport<'hir>: pprust_hir::PpAnn { fn pp_ann<'a>(&'a self) -> &'a dyn pprust_hir::PpAnn; /// Computes an user-readable representation of a path, if possible. - fn node_path(&self, id: ast::NodeId) -> Option { + fn node_path(&self, id: hir::HirId) -> Option { self.hir_map().and_then(|map| { - let hir_id = map.node_to_hir_id(id); - map.def_path_from_hir_id(hir_id) + map.def_path_from_hir_id(id) }).map(|path| { path.data .into_iter() @@ -471,8 +470,8 @@ impl<'b, 'tcx> HirPrinterSupport<'tcx> for TypedAnnotation<'b, 'tcx> { self } - fn node_path(&self, id: ast::NodeId) -> Option { - Some(self.tcx.def_path_str(self.tcx.hir().local_def_id(id))) + fn node_path(&self, id: hir::HirId) -> Option { + Some(self.tcx.def_path_str(self.tcx.hir().local_def_id_from_hir_id(id))) } } @@ -834,7 +833,7 @@ pub fn print_after_hir_lowering<'tcx>( let node = hir_map.get(hir_id); pp_state.print_node(node)?; pp_state.s.space()?; - let path = annotation.node_path(node_id) + let path = annotation.node_path(hir_id) .expect("-Z unpretty missing node paths"); pp_state.synth_comment(path)?; pp_state.s.hardbreak()?; From 87438a163ec153e2322b70e8c5c987c7c89be0b4 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Mon, 24 Jun 2019 10:17:04 +0200 Subject: [PATCH 6/6] HirIdification: miscellaneous bits --- src/librustc/middle/liveness.rs | 8 +++----- src/librustc/ty/inhabitedness/def_id_forest.rs | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index bea10e914d038..7b69fe394fb2c 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -110,7 +110,7 @@ use std::{fmt, u32}; use std::io::prelude::*; use std::io; use std::rc::Rc; -use syntax::ast::{self, NodeId}; +use syntax::ast; use syntax::ptr::P; use syntax::symbol::{kw, sym}; use syntax_pos::Span; @@ -1327,12 +1327,11 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { } } - fn access_var(&mut self, hir_id: HirId, nid: NodeId, succ: LiveNode, acc: u32, span: Span) + fn access_var(&mut self, hir_id: HirId, var_hid: HirId, succ: LiveNode, acc: u32, span: Span) -> LiveNode { let ln = self.live_node(hir_id, span); if acc != 0 { self.init_from_succ(ln, succ); - let var_hid = self.ir.tcx.hir().node_to_hir_id(nid); let var = self.variable(var_hid, span); self.acc(ln, var, acc); } @@ -1345,8 +1344,7 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { Res::Local(hid) => { let upvars = self.ir.tcx.upvars(self.ir.body_owner); if !upvars.map_or(false, |upvars| upvars.contains_key(&hid)) { - let nid = self.ir.tcx.hir().hir_to_node_id(hid); - self.access_var(hir_id, nid, succ, acc, path.span) + self.access_var(hir_id, hid, succ, acc, path.span) } else { succ } diff --git a/src/librustc/ty/inhabitedness/def_id_forest.rs b/src/librustc/ty/inhabitedness/def_id_forest.rs index b22bd21e9de43..af8dedfc8812e 100644 --- a/src/librustc/ty/inhabitedness/def_id_forest.rs +++ b/src/librustc/ty/inhabitedness/def_id_forest.rs @@ -1,6 +1,6 @@ use std::mem; use smallvec::SmallVec; -use syntax::ast::CRATE_NODE_ID; +use rustc::hir::CRATE_HIR_ID; use crate::ty::context::TyCtxt; use crate::ty::{DefId, DefIdTree}; @@ -33,7 +33,7 @@ impl<'tcx> DefIdForest { /// crate. #[inline] pub fn full(tcx: TyCtxt<'tcx>) -> DefIdForest { - let crate_id = tcx.hir().local_def_id(CRATE_NODE_ID); + let crate_id = tcx.hir().local_def_id_from_hir_id(CRATE_HIR_ID); DefIdForest::from_id(crate_id) }