]> git.lizzy.rs Git - rust.git/commitdiff
hir: remove LoweredNodeId
authorljedrz <ljedrz@gmail.com>
Fri, 26 Apr 2019 12:23:30 +0000 (14:23 +0200)
committerljedrz <ljedrz@gmail.com>
Mon, 29 Apr 2019 10:12:11 +0000 (12:12 +0200)
src/librustc/hir/lowering.rs

index bcf1b30814f29bb2645300a891007b390ed125f8..df455a725c5baa9acde46f5c72292c5b8a252344 100644 (file)
@@ -260,12 +260,6 @@ enum ParamMode {
     Optional,
 }
 
-#[derive(Debug)]
-struct LoweredNodeId {
-    node_id: NodeId,
-    hir_id: hir::HirId,
-}
-
 enum ParenthesizedGenericArgs {
     Ok,
     Warn,
@@ -429,7 +423,7 @@ fn allocate_use_tree_hir_id_counters(
                     UseTreeKind::Glob => (),
                     UseTreeKind::Nested(ref trees) => {
                         for &(ref use_tree, id) in trees {
-                            let hir_id = self.lctx.allocate_hir_id_counter(id).hir_id;
+                            let hir_id = self.lctx.allocate_hir_id_counter(id);
                             self.allocate_use_tree_hir_id_counters(use_tree, hir_id.owner);
                         }
                     }
@@ -489,7 +483,7 @@ fn visit_fn(&mut self, fk: visit::FnKind<'lcx>, fd: &'lcx FnDecl, s: Span, _: No
             }
 
             fn visit_item(&mut self, item: &'lcx Item) {
-                let hir_id = self.lctx.allocate_hir_id_counter(item.id).hir_id;
+                let hir_id = self.lctx.allocate_hir_id_counter(item.id);
 
                 match item.node {
                     ItemKind::Struct(_, ref generics)
@@ -698,24 +692,21 @@ fn insert_item(&mut self, item: hir::Item) {
         self.modules.get_mut(&self.current_module).unwrap().items.insert(id);
     }
 
-    fn allocate_hir_id_counter(&mut self, owner: NodeId) -> LoweredNodeId {
+    fn allocate_hir_id_counter(&mut self, owner: NodeId) -> hir::HirId {
         // Setup the counter if needed
         self.item_local_id_counters.entry(owner).or_insert(0);
         // Always allocate the first `HirId` for the owner itself.
         let lowered = self.lower_node_id_with_owner(owner, owner);
-        debug_assert_eq!(lowered.hir_id.local_id.as_u32(), 0);
+        debug_assert_eq!(lowered.local_id.as_u32(), 0);
         lowered
     }
 
-    fn lower_node_id_generic<F>(&mut self, ast_node_id: NodeId, alloc_hir_id: F) -> LoweredNodeId
+    fn lower_node_id_generic<F>(&mut self, ast_node_id: NodeId, alloc_hir_id: F) -> hir::HirId
     where
         F: FnOnce(&mut Self) -> hir::HirId,
     {
         if ast_node_id == DUMMY_NODE_ID {
-            return LoweredNodeId {
-                node_id: DUMMY_NODE_ID,
-                hir_id: hir::DUMMY_HIR_ID,
-            };
+            return hir::DUMMY_HIR_ID;
         }
 
         let min_size = ast_node_id.as_usize() + 1;
@@ -730,15 +721,10 @@ fn lower_node_id_generic<F>(&mut self, ast_node_id: NodeId, alloc_hir_id: F) ->
             // Generate a new `HirId`.
             let hir_id = alloc_hir_id(self);
             self.node_id_to_hir_id[ast_node_id] = hir_id;
-            LoweredNodeId {
-                node_id: ast_node_id,
-                hir_id,
-            }
+
+            hir_id
         } else {
-            LoweredNodeId {
-                node_id: ast_node_id,
-                hir_id: existing_hir_id,
-            }
+            existing_hir_id
         }
     }
 
@@ -770,7 +756,7 @@ fn with_hir_id_owner<F, T>(&mut self, owner: NodeId, f: F) -> T
     /// actually used in the HIR, as that would trigger an assertion in the
     /// `HirIdValidator` later on, which makes sure that all `NodeId`s got mapped
     /// properly. Calling the method twice with the same `NodeId` is fine though.
-    fn lower_node_id(&mut self, ast_node_id: NodeId) -> LoweredNodeId {
+    fn lower_node_id(&mut self, ast_node_id: NodeId) -> hir::HirId {
         self.lower_node_id_generic(ast_node_id, |this| {
             let &mut (def_index, ref mut local_id_counter) =
                 this.current_hir_id_owner.last_mut().unwrap();
@@ -783,7 +769,7 @@ fn lower_node_id(&mut self, ast_node_id: NodeId) -> LoweredNodeId {
         })
     }
 
-    fn lower_node_id_with_owner(&mut self, ast_node_id: NodeId, owner: NodeId) -> LoweredNodeId {
+    fn lower_node_id_with_owner(&mut self, ast_node_id: NodeId, owner: NodeId) -> hir::HirId {
         self.lower_node_id_generic(ast_node_id, |this| {
             let local_id_counter = this
                 .item_local_id_counters
@@ -822,7 +808,7 @@ fn record_body(&mut self, value: hir::Expr, arguments: HirVec<hir::Arg>) -> hir:
         id
     }
 
-    fn next_id(&mut self) -> LoweredNodeId {
+    fn next_id(&mut self) -> hir::HirId {
         self.lower_node_id(self.sess.next_node_id())
     }
 
@@ -830,7 +816,7 @@ fn lower_def(&mut self, def: Def<NodeId>) -> Def {
         def.map_id(|id| {
             self.lower_node_id_generic(id, |_| {
                 panic!("expected node_id to be lowered already for def {:#?}", def)
-            }).hir_id
+            })
         })
     }
 
@@ -942,7 +928,7 @@ fn lifetime_to_generic_param(
         hir_name: ParamName,
         parent_index: DefIndex,
     ) -> hir::GenericParam {
-        let LoweredNodeId { node_id, hir_id } = self.next_id();
+        let node_id = self.sess.next_node_id();
 
         // Get the name we'll use to make the def-path. Note
         // that collisions are ok here and this shouldn't
@@ -973,7 +959,7 @@ fn lifetime_to_generic_param(
         );
 
         hir::GenericParam {
-            hir_id,
+            hir_id: self.lower_node_id(node_id),
             name: hir_name,
             attrs: hir_vec![],
             bounds: hir_vec![],
@@ -1158,10 +1144,9 @@ fn make_async_expr(
         self.is_generator = prev_is_generator;
 
         let capture_clause = self.lower_capture_clause(capture_clause);
-        let closure_hir_id = self.lower_node_id(closure_node_id).hir_id;
         let decl = self.lower_fn_decl(&decl, None, /* impl trait allowed */ false, None);
         let generator = hir::Expr {
-            hir_id: closure_hir_id,
+            hir_id: self.lower_node_id(closure_node_id),
             node: hir::ExprKind::Closure(capture_clause, decl, body_id, span,
                 Some(hir::GeneratorMovability::Static)),
             span,
@@ -1267,7 +1252,7 @@ fn lower_loop_destination(&mut self, destination: Option<(NodeId, Label)>) -> hi
         let target_id = match destination {
             Some((id, _)) => {
                 if let Def::Label(loop_id) = self.expect_full_def(id) {
-                    Ok(self.lower_node_id(loop_id).hir_id)
+                    Ok(self.lower_node_id(loop_id))
                 } else {
                     Err(hir::LoopIdError::UnresolvedLabel)
                 }
@@ -1276,7 +1261,7 @@ fn lower_loop_destination(&mut self, destination: Option<(NodeId, Label)>) -> hi
                 self.loop_scopes
                     .last()
                     .cloned()
-                    .map(|id| Ok(self.lower_node_id(id).hir_id))
+                    .map(|id| Ok(self.lower_node_id(id)))
                     .unwrap_or(Err(hir::LoopIdError::OutsideLoopScope))
                     .into()
             }
@@ -1350,10 +1335,8 @@ fn lower_arm(&mut self, arm: &Arm) -> hir::Arm {
 
     fn lower_ty_binding(&mut self, b: &TypeBinding,
                         itctx: ImplTraitContext<'_>) -> hir::TypeBinding {
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(b.id);
-
         hir::TypeBinding {
-            hir_id,
+            hir_id: self.lower_node_id(b.id),
             ident: b.ident,
             ty: self.lower_ty(&b.ty, itctx),
             span: b.span,
@@ -1487,7 +1470,6 @@ fn lower_ty_direct(&mut self, t: &Ty, mut itctx: ImplTraitContext<'_>) -> hir::T
                         )
                     }
                     ImplTraitContext::Universal(in_band_ty_params) => {
-                        let LoweredNodeId { node_id: _, hir_id } =  self.lower_node_id(def_node_id);
                         // Add a definition for the in-band `Param`.
                         let def_index = self
                             .resolver
@@ -1502,7 +1484,7 @@ fn lower_ty_direct(&mut self, t: &Ty, mut itctx: ImplTraitContext<'_>) -> hir::T
                         // Set the name to `impl Bound1 + Bound2`.
                         let ident = Ident::from_str(&pprust::ty_to_string(t)).with_span_pos(span);
                         in_band_ty_params.push(hir::GenericParam {
-                            hir_id,
+                            hir_id: self.lower_node_id(def_node_id),
                             name: ParamName::Plain(ident),
                             pure_wrt_drop: false,
                             attrs: hir_vec![],
@@ -1557,11 +1539,10 @@ fn lower_ty_direct(&mut self, t: &Ty, mut itctx: ImplTraitContext<'_>) -> hir::T
             },
         };
 
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(t.id);
         hir::Ty {
             node: kind,
             span: t.span,
-            hir_id,
+            hir_id: self.lower_node_id(t.id),
         }
     }
 
@@ -1600,12 +1581,11 @@ fn lower_existential_impl_trait(
         );
 
         self.with_hir_id_owner(exist_ty_node_id, |lctx| {
-            let LoweredNodeId { node_id: _, hir_id } = lctx.next_id();
             let exist_ty_item = hir::ExistTy {
                 generics: hir::Generics {
                     params: lifetime_defs,
                     where_clause: hir::WhereClause {
-                        hir_id,
+                        hir_id: lctx.next_id(),
                         predicates: hir_vec![],
                     },
                     span,
@@ -1624,7 +1604,7 @@ fn lower_existential_impl_trait(
             );
 
             // `impl Trait` now just becomes `Foo<'a, 'b, ..>`.
-            hir::TyKind::Def(hir::ItemId { id: exist_ty_id.hir_id }, lifetimes)
+            hir::TyKind::Def(hir::ItemId { id: exist_ty_id }, lifetimes)
         })
     }
 
@@ -1636,13 +1616,13 @@ fn generate_existential_type(
         exist_ty_item: hir::ExistTy,
         span: Span,
         exist_ty_span: Span,
-    ) -> LoweredNodeId {
+    ) -> hir::HirId {
         let exist_ty_item_kind = hir::ItemKind::Existential(exist_ty_item);
         let exist_ty_id = self.lower_node_id(exist_ty_node_id);
         // Generate an `existential type Foo: Trait;` declaration.
         trace!("registering existential type with id {:#?}", exist_ty_id);
         let exist_ty_item = hir::Item {
-            hir_id: exist_ty_id.hir_id,
+            hir_id: exist_ty_id,
             ident: keywords::Invalid.ident(),
             attrs: Default::default(),
             node: exist_ty_item_kind,
@@ -1757,15 +1737,14 @@ fn visit_lifetime(&mut self, lifetime: &'v hir::Lifetime) {
                     && !self.already_defined_lifetimes.contains(&name) {
                     self.already_defined_lifetimes.insert(name);
 
-                    let LoweredNodeId { node_id: _, hir_id } = self.context.next_id();
                     self.output_lifetimes.push(hir::GenericArg::Lifetime(hir::Lifetime {
-                        hir_id,
+                        hir_id: self.context.next_id(),
                         span: lifetime.span,
                         name,
                     }));
 
                     let def_node_id = self.context.sess.next_node_id();
-                    let LoweredNodeId { node_id: _, hir_id } =
+                    let hir_id =
                         self.context.lower_node_id_with_owner(def_node_id, self.exist_ty_id);
                     self.context.resolver.definitions().create_def_with_parent(
                         self.parent,
@@ -1840,11 +1819,10 @@ fn lower_global_asm(&mut self, ga: &GlobalAsm) -> P<hir::GlobalAsm> {
     }
 
     fn lower_variant(&mut self, v: &Variant) -> hir::Variant {
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(v.node.id);
         Spanned {
             node: hir::VariantKind {
                 ident: v.node.ident,
-                id: hir_id,
+                id: self.lower_node_id(v.node.id),
                 attrs: self.lower_attrs(&v.node.attrs),
                 data: self.lower_variant_data(&v.node.data),
                 disr_expr: v.node.disr_expr.as_ref().map(|e| self.lower_anon_const(e)),
@@ -2157,7 +2135,7 @@ fn lower_path_segment(
 
         hir::PathSegment::new(
             segment.ident,
-            Some(id.hir_id),
+            Some(id),
             Some(self.lower_def(def)),
             generic_args,
             infer_types,
@@ -2201,17 +2179,14 @@ fn lower_parenthesized_parameter_data(
                     .map(|ty| this.lower_ty_direct(ty, ImplTraitContext::disallowed()))
                     .collect();
                 let mk_tup = |this: &mut Self, tys, span| {
-                    let LoweredNodeId { node_id: _, hir_id } = this.next_id();
-                    hir::Ty { node: hir::TyKind::Tup(tys), hir_id, span }
+                    hir::Ty { node: hir::TyKind::Tup(tys), hir_id: this.next_id(), span }
                 };
-                let LoweredNodeId { node_id: _, hir_id } = this.next_id();
-
                 (
                     hir::GenericArgs {
                         args: hir_vec![GenericArg::Type(mk_tup(this, inputs, span))],
                         bindings: hir_vec![
                             hir::TypeBinding {
-                                hir_id,
+                                hir_id: this.next_id(),
                                 ident: Ident::from_str(FN_OUTPUT_NAME),
                                 ty: output
                                     .as_ref()
@@ -2229,7 +2204,6 @@ fn lower_parenthesized_parameter_data(
     }
 
     fn lower_local(&mut self, l: &Local) -> (hir::Local, SmallVec<[NodeId; 1]>) {
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(l.id);
         let mut ids = SmallVec::<[NodeId; 1]>::new();
         if self.sess.features_untracked().impl_trait_in_bindings {
             if let Some(ref ty) = l.ty {
@@ -2239,7 +2213,7 @@ fn lower_parenthesized_parameter_data(
         }
         let parent_def_id = DefId::local(self.current_hir_id_owner.last().unwrap().0);
         (hir::Local {
-            hir_id,
+            hir_id: self.lower_node_id(l.id),
             ty: l.ty
                 .as_ref()
                 .map(|t| self.lower_ty(t,
@@ -2276,9 +2250,8 @@ fn lower_args(&mut self, decl: Option<&FnDecl>) -> HirVec<hir::Arg> {
     }
 
     fn lower_arg(&mut self, arg: &Arg) -> hir::Arg {
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(arg.id);
         hir::Arg {
-            hir_id,
+            hir_id: self.lower_node_id(arg.id),
             pat: self.lower_pat(&arg.pat),
             source: self.lower_arg_source(&arg.source),
         }
@@ -2437,7 +2410,7 @@ fn lower_async_fn_ret_ty(
 
         self.allocate_hir_id_counter(exist_ty_node_id);
 
-        let (exist_ty_node_id, lifetime_params) = self.with_hir_id_owner(exist_ty_node_id, |this| {
+        let (exist_ty_id, lifetime_params) = self.with_hir_id_owner(exist_ty_node_id, |this| {
             let future_bound = this.with_anonymous_lifetime_mode(
                 AnonymousLifetimeMode::Replace(elided_lt_replacement),
                 |this| this.lower_async_fn_output_type_to_future_bound(
@@ -2468,12 +2441,11 @@ fn lower_async_fn_ret_ty(
                     })
                     .collect();
 
-            let LoweredNodeId { node_id: _, hir_id } = this.next_id();
             let exist_ty_item = hir::ExistTy {
                 generics: hir::Generics {
                     params: generic_params,
                     where_clause: hir::WhereClause {
-                        hir_id,
+                        hir_id: this.next_id(),
                         predicates: hir_vec![],
                     },
                     span,
@@ -2491,30 +2463,27 @@ fn lower_async_fn_ret_ty(
                 exist_ty_span,
             );
 
-            (exist_ty_id.node_id, lifetime_params)
+            (exist_ty_id, lifetime_params)
         });
 
         let generic_args =
             lifetime_params
                 .iter().cloned()
                 .map(|(span, hir_name)| {
-                    let LoweredNodeId { node_id: _, hir_id  } = self.next_id();
                     GenericArg::Lifetime(hir::Lifetime {
-                        hir_id,
+                        hir_id: self.next_id(),
                         span,
                         name: hir::LifetimeName::Param(hir_name),
                     })
                 })
                 .collect();
 
-        let exist_ty_hir_id = self.lower_node_id(exist_ty_node_id).hir_id;
-        let exist_ty_ref = hir::TyKind::Def(hir::ItemId { id: exist_ty_hir_id }, generic_args);
+        let exist_ty_ref = hir::TyKind::Def(hir::ItemId { id: exist_ty_id }, generic_args);
 
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
         hir::FunctionRetTy::Return(P(hir::Ty {
             node: exist_ty_ref,
             span,
-            hir_id,
+            hir_id: self.next_id(),
         }))
     }
 
@@ -2531,9 +2500,8 @@ fn lower_async_fn_output_type_to_future_bound(
                 self.lower_ty(ty, ImplTraitContext::Existential(Some(fn_def_id)))
             }
             FunctionRetTy::Default(ret_ty_span) => {
-                let LoweredNodeId { node_id: _, hir_id } = self.next_id();
                 P(hir::Ty {
-                    hir_id,
+                    hir_id: self.next_id(),
                     node: hir::TyKind::Tup(hir_vec![]),
                     span: *ret_ty_span,
                 })
@@ -2541,13 +2509,12 @@ fn lower_async_fn_output_type_to_future_bound(
         };
 
         // "<Output = T>"
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
         let future_params = P(hir::GenericArgs {
             args: hir_vec![],
             bindings: hir_vec![hir::TypeBinding {
                 ident: Ident::from_str(FN_OUTPUT_NAME),
                 ty: output_ty,
-                hir_id,
+                hir_id: self.next_id(),
                 span,
             }],
             parenthesized: false,
@@ -2557,12 +2524,11 @@ fn lower_async_fn_output_type_to_future_bound(
         let future_path =
             self.std_path(span, &["future", "Future"], Some(future_params), false);
 
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
         hir::GenericBound::Trait(
             hir::PolyTraitRef {
                 trait_ref: hir::TraitRef {
                     path: future_path,
-                    hir_ref_id: hir_id,
+                    hir_ref_id: self.next_id(),
                 },
                 bound_generic_params: hir_vec![],
                 span,
@@ -2608,7 +2574,7 @@ fn lower_lifetime(&mut self, l: &Lifetime) -> hir::Lifetime {
                     AnonymousLifetimeMode::ReportError => self.new_error_lifetime(Some(l.id), span),
 
                     AnonymousLifetimeMode::Replace(replacement) => {
-                        let LoweredNodeId { node_id: _, hir_id  } = self.lower_node_id(l.id);
+                        let hir_id = self.lower_node_id(l.id);
                         self.replace_elided_lifetime(hir_id, span, replacement)
                     }
                 },
@@ -2626,10 +2592,8 @@ fn new_named_lifetime(
         span: Span,
         name: hir::LifetimeName,
     ) -> hir::Lifetime {
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(id);
-
         hir::Lifetime {
-            hir_id,
+            hir_id: self.lower_node_id(id),
             span,
             name: name,
         }
@@ -2751,10 +2715,8 @@ fn lower_generic_param(&mut self,
             }
         };
 
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(param.id);
-
         hir::GenericParam {
-            hir_id,
+            hir_id: self.lower_node_id(param.id),
             name,
             span: param.ident.span,
             pure_wrt_drop: attr::contains_name(&param.attrs, "may_dangle"),
@@ -2834,10 +2796,8 @@ fn lower_where_clause(&mut self, wc: &WhereClause) -> hir::WhereClause {
         self.with_anonymous_lifetime_mode(
             AnonymousLifetimeMode::ReportError,
             |this| {
-                let LoweredNodeId { node_id: _, hir_id } = this.lower_node_id(wc.id);
-
                 hir::WhereClause {
-                    hir_id,
+                    hir_id: this.lower_node_id(wc.id),
                     predicates: wc.predicates
                         .iter()
                         .map(|predicate| this.lower_where_predicate(predicate))
@@ -2897,10 +2857,8 @@ fn lower_where_predicate(&mut self, pred: &WherePredicate) -> hir::WherePredicat
                 ref rhs_ty,
                 span,
             }) => {
-                let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(id);
-
                 hir::WherePredicate::EqPredicate(hir::WhereEqPredicate {
-                    hir_id,
+                    hir_id: self.lower_node_id(id),
                     lhs_ty: self.lower_ty(lhs_ty, ImplTraitContext::disallowed()),
                     rhs_ty: self.lower_ty(rhs_ty, ImplTraitContext::disallowed()),
                     span,
@@ -2916,20 +2874,17 @@ fn lower_variant_data(&mut self, vdata: &VariantData) -> hir::VariantData {
                 recovered,
             ),
             VariantData::Tuple(ref fields, id) => {
-                let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(id);
-
                 hir::VariantData::Tuple(
                     fields
                         .iter()
                         .enumerate()
                         .map(|f| self.lower_struct_field(f))
                         .collect(),
-                    hir_id,
+                    self.lower_node_id(id),
                 )
             },
             VariantData::Unit(id) => {
-                let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(id);
-                hir::VariantData::Unit(hir_id)
+                hir::VariantData::Unit(self.lower_node_id(id))
             },
         }
     }
@@ -2939,10 +2894,9 @@ fn lower_trait_ref(&mut self, p: &TraitRef, itctx: ImplTraitContext<'_>) -> hir:
             hir::QPath::Resolved(None, path) => path.and_then(|path| path),
             qpath => bug!("lower_trait_ref: unexpected QPath `{:?}`", qpath),
         };
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(p.ref_id);
         hir::TraitRef {
             path,
-            hir_ref_id: hir_id,
+            hir_ref_id: self.lower_node_id(p.ref_id),
         }
     }
 
@@ -2969,11 +2923,9 @@ fn lower_poly_trait_ref(
     }
 
     fn lower_struct_field(&mut self, (index, f): (usize, &StructField)) -> hir::StructField {
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(f.id);
-
         hir::StructField {
             span: f.span,
-            hir_id,
+            hir_id: self.lower_node_id(f.id),
             ident: match f.ident {
                 Some(ident) => ident,
                 // FIXME(jseyfried): positional field hygiene
@@ -2986,10 +2938,8 @@ fn lower_struct_field(&mut self, (index, f): (usize, &StructField)) -> hir::Stru
     }
 
     fn lower_field(&mut self, f: &Field) -> hir::Field {
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
-
         hir::Field {
-            hir_id,
+            hir_id: self.next_id(),
             ident: f.ident,
             expr: P(self.lower_expr(&f.expr)),
             span: f.span,
@@ -3026,10 +2976,8 @@ fn lower_block(&mut self, b: &Block, targeted_by_break: bool) -> P<hir::Block> {
             }
         }
 
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(b.id);
-
         P(hir::Block {
-            hir_id,
+            hir_id: self.lower_node_id(b.id),
             stmts: stmts.into(),
             expr,
             rules: self.lower_block_check_mode(&b.rules),
@@ -3220,7 +3168,7 @@ fn lower_item_kind(
                 // method, it will not be considered an in-band
                 // lifetime to be added, but rather a reference to a
                 // parent lifetime.
-                let lowered_trait_impl_id = self.lower_node_id(id).hir_id;
+                let lowered_trait_impl_id = self.lower_node_id(id);
                 let (generics, (trait_ref, lowered_ty)) = self.add_in_band_defs(
                     ast_generics,
                     def_id,
@@ -3358,11 +3306,10 @@ fn lower_use_tree(
                             hir::VisibilityKind::Crate(sugar) => hir::VisibilityKind::Crate(sugar),
                             hir::VisibilityKind::Inherited => hir::VisibilityKind::Inherited,
                             hir::VisibilityKind::Restricted { ref path, hir_id: _ } => {
-                                let id = this.next_id();
                                 let path = this.renumber_segment_ids(path);
                                 hir::VisibilityKind::Restricted {
                                     path,
-                                    hir_id: id.hir_id,
+                                    hir_id: this.next_id(),
                                 }
                             }
                         };
@@ -3370,7 +3317,7 @@ fn lower_use_tree(
 
                         this.insert_item(
                             hir::Item {
-                                hir_id: new_id.hir_id,
+                                hir_id: new_id,
                                 ident,
                                 attrs: attrs.clone(),
                                 node: item,
@@ -3428,10 +3375,7 @@ fn lower_use_tree(
 
                 // Add all the nested `PathListItem`s to the HIR.
                 for &(ref use_tree, id) in trees {
-                    let LoweredNodeId {
-                        node_id: new_id,
-                        hir_id: new_hir_id,
-                    } = self.lower_node_id(id);
+                    let new_hir_id = self.lower_node_id(id);
 
                     let mut vis = vis.clone();
                     let mut ident = ident.clone();
@@ -3447,10 +3391,10 @@ fn lower_use_tree(
                     // the current owner, since we want each desugared import to
                     // own its own names, we have to adjust the owner before
                     // lowering the rest of the import.
-                    self.with_hir_id_owner(new_id, |this| {
+                    self.with_hir_id_owner(id, |this| {
                         let item = this.lower_use_tree(use_tree,
                                                        &prefix,
-                                                       new_id,
+                                                       id,
                                                        &mut vis,
                                                        &mut ident,
                                                        attrs);
@@ -3460,11 +3404,10 @@ fn lower_use_tree(
                             hir::VisibilityKind::Crate(sugar) => hir::VisibilityKind::Crate(sugar),
                             hir::VisibilityKind::Inherited => hir::VisibilityKind::Inherited,
                             hir::VisibilityKind::Restricted { ref path, hir_id: _ } => {
-                                let id = this.next_id();
                                 let path = this.renumber_segment_ids(path);
                                 hir::VisibilityKind::Restricted {
                                     path: path,
-                                    hir_id: id.hir_id,
+                                    hir_id: this.next_id(),
                                 }
                             }
                         };
@@ -3520,15 +3463,14 @@ fn renumber_segment_ids(&mut self, path: &P<hir::Path>) -> P<hir::Path> {
         let mut path = path.clone();
         for seg in path.segments.iter_mut() {
             if seg.hir_id.is_some() {
-                seg.hir_id = Some(self.next_id().hir_id);
+                seg.hir_id = Some(self.next_id());
             }
         }
         path
     }
 
     fn lower_trait_item(&mut self, i: &TraitItem) -> hir::TraitItem {
-        let LoweredNodeId { node_id, hir_id } = self.lower_node_id(i.id);
-        let trait_item_def_id = self.resolver.definitions().local_def_id(node_id);
+        let trait_item_def_id = self.resolver.definitions().local_def_id(i.id);
 
         let (generics, node) = match i.node {
             TraitItemKind::Const(ref ty, ref default) => (
@@ -3578,7 +3520,7 @@ fn lower_trait_item(&mut self, i: &TraitItem) -> hir::TraitItem {
         };
 
         hir::TraitItem {
-            hir_id,
+            hir_id: self.lower_node_id(i.id),
             ident: i.ident,
             attrs: self.lower_attrs(&i.attrs),
             generics,
@@ -3604,7 +3546,7 @@ fn lower_trait_item_ref(&mut self, i: &TraitItem) -> hir::TraitItemRef {
             TraitItemKind::Macro(..) => unimplemented!(),
         };
         hir::TraitItemRef {
-            id: hir::TraitItemId { hir_id: self.lower_node_id(i.id).hir_id },
+            id: hir::TraitItemId { hir_id: self.lower_node_id(i.id) },
             ident: i.ident,
             span: i.span,
             defaultness: self.lower_defaultness(Defaultness::Default, has_default),
@@ -3613,8 +3555,7 @@ fn lower_trait_item_ref(&mut self, i: &TraitItem) -> hir::TraitItemRef {
     }
 
     fn lower_impl_item(&mut self, i: &ImplItem) -> hir::ImplItem {
-        let LoweredNodeId { node_id, hir_id } = self.lower_node_id(i.id);
-        let impl_item_def_id = self.resolver.definitions().local_def_id(node_id);
+        let impl_item_def_id = self.resolver.definitions().local_def_id(i.id);
 
         let (generics, node) = match i.node {
             ImplItemKind::Const(ref ty, ref expr) => {
@@ -3671,7 +3612,7 @@ fn lower_impl_item(&mut self, i: &ImplItem) -> hir::ImplItem {
         };
 
         hir::ImplItem {
-            hir_id,
+            hir_id: self.lower_node_id(i.id),
             ident: i.ident,
             attrs: self.lower_attrs(&i.attrs),
             generics,
@@ -3686,7 +3627,7 @@ fn lower_impl_item(&mut self, i: &ImplItem) -> hir::ImplItem {
 
     fn lower_impl_item_ref(&mut self, i: &ImplItem) -> hir::ImplItemRef {
         hir::ImplItemRef {
-            id: hir::ImplItemId { hir_id: self.lower_node_id(i.id).hir_id },
+            id: hir::ImplItemId { hir_id: self.lower_node_id(i.id) },
             ident: i.ident,
             span: i.span,
             vis: self.lower_visibility(&i.vis, Some(i.id)),
@@ -3742,7 +3683,7 @@ fn lower_mod(&mut self, m: &Mod) -> hir::Mod {
         };
 
         node_ids.into_iter().map(|node_id| hir::ItemId {
-            id: self.allocate_hir_id_counter(node_id).hir_id
+            id: self.allocate_hir_id_counter(node_id)
         }).collect()
     }
 
@@ -3776,7 +3717,7 @@ pub fn lower_item(&mut self, i: &Item) -> Option<hir::Item> {
             if !def.legacy || attr::contains_name(&i.attrs, "macro_export") ||
                               attr::contains_name(&i.attrs, "rustc_doc_only_macro") {
                 let body = self.lower_token_stream(def.stream());
-                let hir_id = self.lower_node_id(i.id).hir_id;
+                let hir_id = self.lower_node_id(i.id);
                 self.exported_macros.push(hir::MacroDef {
                     name: ident.name,
                     vis,
@@ -3792,10 +3733,8 @@ pub fn lower_item(&mut self, i: &Item) -> Option<hir::Item> {
 
         let node = self.lower_item_kind(i.id, &mut ident, &attrs, &mut vis, &i.node);
 
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(i.id);
-
         Some(hir::Item {
-            hir_id,
+            hir_id: self.lower_node_id(i.id),
             ident,
             attrs,
             node,
@@ -3805,10 +3744,9 @@ pub fn lower_item(&mut self, i: &Item) -> Option<hir::Item> {
     }
 
     fn lower_foreign_item(&mut self, i: &ForeignItem) -> hir::ForeignItem {
-        let LoweredNodeId { node_id, hir_id } = self.lower_node_id(i.id);
-        let def_id = self.resolver.definitions().local_def_id(node_id);
+        let def_id = self.resolver.definitions().local_def_id(i.id);
         hir::ForeignItem {
-            hir_id,
+            hir_id: self.lower_node_id(i.id),
             ident: i.ident,
             attrs: self.lower_attrs(&i.attrs),
             node: match i.node {
@@ -3948,7 +3886,7 @@ fn lower_pat(&mut self, p: &Pat) -> P<hir::Pat> {
 
                         hir::PatKind::Binding(
                             self.lower_binding_mode(binding_mode),
-                            self.lower_node_id(canonical_id).hir_id,
+                            self.lower_node_id(canonical_id),
                             ident,
                             sub.as_ref().map(|x| self.lower_pat(x)),
                         )
@@ -4000,12 +3938,10 @@ fn lower_pat(&mut self, p: &Pat) -> P<hir::Pat> {
                 let fs = fields
                     .iter()
                     .map(|f| {
-                        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
-
                         Spanned {
                             span: f.span,
                             node: hir::FieldPat {
-                                hir_id,
+                                hir_id: self.next_id(),
                                 ident: f.node.ident,
                                 pat: self.lower_pat(&f.node.pat),
                                 is_shorthand: f.node.is_shorthand,
@@ -4036,9 +3972,8 @@ fn lower_pat(&mut self, p: &Pat) -> P<hir::Pat> {
             PatKind::Mac(_) => panic!("Shouldn't exist here"),
         };
 
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(p.id);
         P(hir::Pat {
-            hir_id,
+            hir_id: self.lower_node_id(p.id),
             node,
             span: p.span,
         })
@@ -4053,9 +3988,8 @@ fn lower_range_end(&mut self, e: &RangeEnd) -> hir::RangeEnd {
 
     fn lower_anon_const(&mut self, c: &AnonConst) -> hir::AnonConst {
         self.with_new_scopes(|this| {
-            let LoweredNodeId { node_id: _, hir_id } = this.lower_node_id(c.id);
             hir::AnonConst {
-                hir_id,
+                hir_id: this.lower_node_id(c.id),
                 body: this.lower_body(None, |this| this.lower_expr(&c.value)),
             }
         })
@@ -4130,11 +4064,10 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
                             // Wrap the `if let` expr in a block.
                             let span = els.span;
                             let els = P(self.lower_expr(els));
-                            let LoweredNodeId { node_id: _, hir_id } = self.next_id();
                             let blk = P(hir::Block {
                                 stmts: hir_vec![],
                                 expr: Some(els),
-                                hir_id,
+                                hir_id: self.next_id(),
                                 rules: hir::DefaultBlock,
                                 span,
                                 targeted_by_break: false,
@@ -4176,13 +4109,12 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
                     let mut block = this.lower_block(body, true).into_inner();
                     let tail = block.expr.take().map_or_else(
                         || {
-                            let LoweredNodeId { node_id: _, hir_id } = this.next_id();
                             let span = this.sess.source_map().end_point(unstable_span);
                             hir::Expr {
                                 span,
                                 node: hir::ExprKind::Tup(hir_vec![]),
                                 attrs: ThinVec::new(),
-                                hir_id,
+                                hir_id: this.next_id(),
                             }
                         },
                         |x: P<hir::Expr>| x.into_inner(),
@@ -4363,10 +4295,8 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
                 let struct_path = self.std_path(e.span, &struct_path, None, is_unit);
                 let struct_path = hir::QPath::Resolved(None, P(struct_path));
 
-                let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(e.id);
-
                 return hir::Expr {
-                    hir_id,
+                    hir_id: self.lower_node_id(e.id),
                     node: if is_unit {
                         hir::ExprKind::Path(struct_path)
                     } else {
@@ -4667,9 +4597,8 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
                         ThinVec::new(),
                     ))
                 };
-                let LoweredNodeId { node_id: _, hir_id } = self.next_id();
                 let match_stmt = hir::Stmt {
-                    hir_id,
+                    hir_id: self.next_id(),
                     node: hir::StmtKind::Expr(match_expr),
                     span: head_sp,
                 };
@@ -4695,9 +4624,8 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
 
                 let body_block = self.with_loop_scope(e.id, |this| this.lower_block(body, false));
                 let body_expr = P(self.expr_block(body_block, ThinVec::new()));
-                let LoweredNodeId { node_id: _, hir_id } = self.next_id();
                 let body_stmt = hir::Stmt {
-                    hir_id,
+                    hir_id: self.next_id(),
                     node: hir::StmtKind::Expr(body_expr),
                     span: body.span,
                 };
@@ -4714,9 +4642,8 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
                     self.lower_label(opt_label),
                     hir::LoopSource::ForLoop,
                 );
-                let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(e.id);
                 let loop_expr = P(hir::Expr {
-                    hir_id,
+                    hir_id: self.lower_node_id(e.id),
                     node: loop_expr,
                     span: e.span,
                     attrs: ThinVec::new(),
@@ -4834,7 +4761,7 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
                     let thin_attrs = ThinVec::from(attrs);
                     let catch_scope = self.catch_scopes.last().map(|x| *x);
                     let ret_expr = if let Some(catch_node) = catch_scope {
-                        let target_id = Ok(self.lower_node_id(catch_node).hir_id);
+                        let target_id = Ok(self.lower_node_id(catch_node));
                         P(self.expr(
                             try_span,
                             hir::ExprKind::Break(
@@ -4864,10 +4791,8 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
             ExprKind::Mac(_) => panic!("Shouldn't exist here"),
         };
 
-        let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(e.id);
-
         hir::Expr {
-            hir_id,
+            hir_id: self.lower_node_id(e.id),
             node: kind,
             span: e.span,
             attrs: e.attrs.clone(),
@@ -4881,21 +4806,18 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
                 let mut ids: SmallVec<[hir::Stmt; 1]> = item_ids
                     .into_iter()
                     .map(|item_id| {
-                        let item_id = hir::ItemId { id: self.lower_node_id(item_id).hir_id };
-                        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
+                        let item_id = hir::ItemId { id: self.lower_node_id(item_id) };
 
                         hir::Stmt {
-                            hir_id,
+                            hir_id: self.next_id(),
                             node: hir::StmtKind::Item(item_id),
                             span: s.span,
                         }
                     })
                     .collect();
                 ids.push({
-                    let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(s.id);
-
                     hir::Stmt {
-                        hir_id,
+                        hir_id: self.lower_node_id(s.id),
                         node: hir::StmtKind::Local(P(l)),
                         span: s.span,
                     }
@@ -4908,7 +4830,7 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
                 return self.lower_item_id(it)
                     .into_iter()
                     .map(|item_id| {
-                        let LoweredNodeId { node_id: _, hir_id } = id.take()
+                        let hir_id = id.take()
                           .map(|id| self.lower_node_id(id))
                           .unwrap_or_else(|| self.next_id());
 
@@ -4921,19 +4843,15 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
                     .collect();
             }
             StmtKind::Expr(ref e) => {
-                let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(s.id);
-
                 hir::Stmt {
-                    hir_id,
+                    hir_id: self.lower_node_id(s.id),
                     node: hir::StmtKind::Expr(P(self.lower_expr(e))),
                     span: s.span,
                 }
             },
             StmtKind::Semi(ref e) => {
-                let LoweredNodeId { node_id: _, hir_id } = self.lower_node_id(s.id);
-
                 hir::Stmt {
-                    hir_id,
+                    hir_id: self.lower_node_id(s.id),
                     node: hir::StmtKind::Semi(P(self.lower_expr(e))),
                     span: s.span,
                 }
@@ -4978,7 +4896,7 @@ fn lower_visibility(
                         ParamMode::Explicit,
                         explicit_owner,
                     )),
-                    hir_id: lowered_id.hir_id,
+                    hir_id: lowered_id,
                 }
             },
             VisibilityKind::Inherited => hir::VisibilityKind::Inherited,
@@ -5047,10 +4965,8 @@ fn arm(&mut self, pats: hir::HirVec<P<hir::Pat>>, expr: P<hir::Expr>) -> hir::Ar
     }
 
     fn field(&mut self, ident: Ident, expr: P<hir::Expr>, span: Span) -> hir::Field {
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
-
         hir::Field {
-            hir_id,
+            hir_id: self.next_id(),
             ident,
             span,
             expr,
@@ -5144,9 +5060,8 @@ fn expr_tuple(&mut self, sp: Span, exprs: hir::HirVec<hir::Expr>) -> P<hir::Expr
     }
 
     fn expr(&mut self, span: Span, node: hir::ExprKind, attrs: ThinVec<Attribute>) -> hir::Expr {
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
         hir::Expr {
-            hir_id,
+            hir_id: self.next_id(),
             node,
             span,
             attrs,
@@ -5160,21 +5075,18 @@ fn stmt_let_pat(
         pat: P<hir::Pat>,
         source: hir::LocalSource,
     ) -> hir::Stmt {
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
-
         let local = hir::Local {
             pat,
             ty: None,
             init: ex,
-            hir_id,
+            hir_id: self.next_id(),
             span: sp,
             attrs: ThinVec::new(),
             source,
         };
 
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
         hir::Stmt {
-            hir_id,
+            hir_id: self.next_id(),
             node: hir::StmtKind::Local(P(local)),
             span: sp
         }
@@ -5190,12 +5102,10 @@ fn block_all(
         stmts: hir::HirVec<hir::Stmt>,
         expr: Option<P<hir::Expr>>,
     ) -> hir::Block {
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
-
         hir::Block {
             stmts,
             expr,
-            hir_id,
+            hir_id: self.next_id(),
             rules: hir::DefaultBlock,
             span,
             targeted_by_break: false,
@@ -5244,7 +5154,7 @@ fn pat_ident_binding_mode(
         ident: Ident,
         bm: hir::BindingAnnotation,
     ) -> (P<hir::Pat>, hir::HirId) {
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
+        let hir_id = self.next_id();
 
         (
             P(hir::Pat {
@@ -5261,9 +5171,8 @@ fn pat_wild(&mut self, span: Span) -> P<hir::Pat> {
     }
 
     fn pat(&mut self, span: Span, pat: hir::PatKind) -> P<hir::Pat> {
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
         P(hir::Pat {
-            hir_id,
+            hir_id: self.next_id(),
             node: pat,
             span,
         })
@@ -5286,14 +5195,13 @@ fn std_path(
 
         for seg in path.segments.iter_mut() {
             if seg.hir_id.is_some() {
-                seg.hir_id = Some(self.next_id().hir_id);
+                seg.hir_id = Some(self.next_id());
             }
         }
         path
     }
 
-    fn ty_path(&mut self, id: LoweredNodeId, span: Span, qpath: hir::QPath) -> hir::Ty {
-        let mut id = id;
+    fn ty_path(&mut self, mut hir_id: hir::HirId, span: Span, qpath: hir::QPath) -> hir::Ty {
         let node = match qpath {
             hir::QPath::Resolved(None, path) => {
                 // Turn trait object paths into `TyKind::TraitObject` instead.
@@ -5303,14 +5211,14 @@ fn ty_path(&mut self, id: LoweredNodeId, span: Span, qpath: hir::QPath) -> hir::
                             bound_generic_params: hir::HirVec::new(),
                             trait_ref: hir::TraitRef {
                                 path: path.and_then(|path| path),
-                                hir_ref_id: id.hir_id,
+                                hir_ref_id: hir_id,
                             },
                             span,
                         };
 
                         // The original ID is taken by the `PolyTraitRef`,
                         // so the `Ty` itself needs a different one.
-                        id = self.next_id();
+                        hir_id = self.next_id();
                         hir::TyKind::TraitObject(hir_vec![principal], self.elided_dyn_bound(span))
                     }
                     _ => hir::TyKind::Path(hir::QPath::Resolved(None, path)),
@@ -5319,7 +5227,7 @@ fn ty_path(&mut self, id: LoweredNodeId, span: Span, qpath: hir::QPath) -> hir::
             _ => hir::TyKind::Path(qpath),
         };
         hir::Ty {
-            hir_id: id.hir_id,
+            hir_id,
             node,
             span,
         }
@@ -5335,9 +5243,8 @@ fn elided_ref_lifetime(&mut self, span: Span) -> hir::Lifetime {
             // `'f`.
             AnonymousLifetimeMode::CreateParameter => {
                 let fresh_name = self.collect_fresh_in_band_lifetime(span);
-                let LoweredNodeId { node_id: _, hir_id } = self.next_id();
                 hir::Lifetime {
-                    hir_id,
+                    hir_id: self.next_id(),
                     span,
                     name: hir::LifetimeName::Param(fresh_name),
                 }
@@ -5360,7 +5267,7 @@ fn new_error_lifetime(&mut self, id: Option<NodeId>, span: Span) -> hir::Lifetim
             Some(id) => (id, "`'_` cannot be used here", "`'_` is a reserved lifetime name"),
 
             None => (
-                self.next_id().node_id,
+                self.sess.next_node_id(),
                 "`&` without an explicit lifetime name cannot be used here",
                 "explicit lifetime name needed here",
             ),
@@ -5451,15 +5358,13 @@ fn new_replacement_lifetime(
         replacement: LtReplacement,
         span: Span,
     ) -> hir::Lifetime {
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
+        let hir_id = self.next_id();
         self.replace_elided_lifetime(hir_id, span, replacement)
     }
 
     fn new_implicit_lifetime(&mut self, span: Span) -> hir::Lifetime {
-        let LoweredNodeId { node_id: _, hir_id } = self.next_id();
-
         hir::Lifetime {
-            hir_id,
+            hir_id: self.next_id(),
             span,
             name: hir::LifetimeName::Implicit,
         }