diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index 18f652854d8..a21d2b69135 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -1179,14 +1179,11 @@ impl<'a> LoweringContext<'a> { ImplTraitContext::Universal(def_id) => { self.lower_node_id(def_node_id); // Add a definition for the in-band TyParam - let def_index = self.resolver.definitions().create_def_with_parent( - def_id.index, - def_node_id, - DefPathData::UniversalImplTrait, - DefIndexAddressSpace::High, - Mark::root(), - span, - ); + let def_index = self + .resolver + .definitions() + .opt_def_index(def_node_id) + .unwrap(); let hir_bounds = self.lower_param_bounds(bounds, itctx); // Set the name to `impl Bound1 + Bound2` @@ -1254,18 +1251,12 @@ impl<'a> LoweringContext<'a> { span, ); - // Pull a new definition from the ether let exist_ty_def_index = self .resolver .definitions() - .create_def_with_parent( - fn_def_id.index, - exist_ty_node_id, - DefPathData::ExistentialImplTrait, - DefIndexAddressSpace::High, - Mark::root(), - exist_ty_span, - ); + .opt_def_index(exist_ty_node_id) + .unwrap(); + self.allocate_hir_id_counter(exist_ty_node_id, &"existential impl trait"); diff --git a/src/librustc/hir/map/def_collector.rs b/src/librustc/hir/map/def_collector.rs index 7c71401c8b2..4884d440757 100644 --- a/src/librustc/hir/map/def_collector.rs +++ b/src/librustc/hir/map/def_collector.rs @@ -302,6 +302,9 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> { fn visit_ty(&mut self, ty: &'a Ty) { match ty.node { TyKind::Mac(..) => return self.visit_macro_invoc(ty.id), + TyKind::ImplTrait(node_id, _) => { + self.create_def(node_id, DefPathData::ImplTrait, REGULAR_SPACE, ty.span); + } _ => {} } visit::walk_ty(self, ty); diff --git a/src/librustc/hir/map/definitions.rs b/src/librustc/hir/map/definitions.rs index b2365e22cc6..ca2789f04f2 100644 --- a/src/librustc/hir/map/definitions.rs +++ b/src/librustc/hir/map/definitions.rs @@ -374,10 +374,8 @@ pub enum DefPathData { StructCtor, /// A constant expression (see {ast,hir}::AnonConst). AnonConst, - /// An `impl Trait` type node in argument position. - UniversalImplTrait, - /// An `impl Trait` type node in return position. - ExistentialImplTrait, + /// An `impl Trait` type node + ImplTrait, /// GlobalMetaData identifies a piece of crate metadata that is global to /// a whole crate (as opposed to just one item). GlobalMetaData components @@ -641,8 +639,7 @@ impl DefPathData { ClosureExpr | StructCtor | AnonConst | - ExistentialImplTrait | - UniversalImplTrait => None + ImplTrait => None } } @@ -672,8 +669,7 @@ impl DefPathData { ClosureExpr => "{{closure}}", StructCtor => "{{constructor}}", AnonConst => "{{constant}}", - ExistentialImplTrait => "{{exist-impl-Trait}}", - UniversalImplTrait => "{{univ-impl-Trait}}", + ImplTrait => "{{impl-Trait}}", }; Symbol::intern(s).as_interned_str() diff --git a/src/librustc/ty/item_path.rs b/src/librustc/ty/item_path.rs index 479fbe2673b..95da68bc9ff 100644 --- a/src/librustc/ty/item_path.rs +++ b/src/librustc/ty/item_path.rs @@ -221,8 +221,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> { data @ DefPathData::AnonConst | data @ DefPathData::MacroDef(..) | data @ DefPathData::ClosureExpr | - data @ DefPathData::ExistentialImplTrait | - data @ DefPathData::UniversalImplTrait | + data @ DefPathData::ImplTrait | data @ DefPathData::GlobalMetaData(..) => { let parent_def_id = self.parent_def_id(def_id).unwrap(); self.push_item_path(buffer, parent_def_id); diff --git a/src/librustc/util/ppaux.rs b/src/librustc/util/ppaux.rs index 4fe9c34c140..24bda3a4744 100644 --- a/src/librustc/util/ppaux.rs +++ b/src/librustc/util/ppaux.rs @@ -291,8 +291,7 @@ impl PrintContext { DefPathData::Field(_) | DefPathData::StructCtor | DefPathData::AnonConst | - DefPathData::ExistentialImplTrait | - DefPathData::UniversalImplTrait | + DefPathData::ImplTrait | DefPathData::GlobalMetaData(_) => { // if we're making a symbol for something, there ought // to be a value or type-def or something in there