]> git.lizzy.rs Git - rust.git/commitdiff
Generate `DefId`s for impl Trait in the def_collector
authorOliver Schneider <github35764891676564198441@oli-obk.de>
Wed, 20 Jun 2018 08:59:24 +0000 (10:59 +0200)
committerOliver Schneider <github35764891676564198441@oli-obk.de>
Wed, 27 Jun 2018 09:17:25 +0000 (11:17 +0200)
src/librustc/hir/lowering.rs
src/librustc/hir/map/def_collector.rs
src/librustc/hir/map/definitions.rs
src/librustc/ty/item_path.rs
src/librustc/util/ppaux.rs

index 18f652854d87b9d54d18e66bef210b18f6d669fb..a21d2b6913510a9f08d3737f7e7b5ea2d2316f68 100644 (file)
@@ -1179,14 +1179,11 @@ fn lower_ty(&mut self, t: &Ty, itctx: ImplTraitContext) -> P<hir::Ty> {
                     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 @@ fn lower_existential_impl_trait(
             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");
 
index 7c71401c8b2e8cbc6f54a734a70322ddcf9f303d..4884d4407577a38fb4ac702f5bdf129ee7689e72 100644 (file)
@@ -302,6 +302,9 @@ fn visit_expr(&mut self, expr: &'a Expr) {
     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);
index b2365e22cc66f39268d0f4fc14a6af1cf16a14f8..ca2789f04f2e2fe2a12df24b93b6f55129be0704 100644 (file)
@@ -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 @@ pub fn get_opt_name(&self) -> Option<InternedString> {
             ClosureExpr |
             StructCtor |
             AnonConst |
-            ExistentialImplTrait |
-            UniversalImplTrait => None
+            ImplTrait => None
         }
     }
 
@@ -672,8 +669,7 @@ pub fn as_interned_str(&self) -> InternedString {
             ClosureExpr => "{{closure}}",
             StructCtor => "{{constructor}}",
             AnonConst => "{{constant}}",
-            ExistentialImplTrait => "{{exist-impl-Trait}}",
-            UniversalImplTrait => "{{univ-impl-Trait}}",
+            ImplTrait => "{{impl-Trait}}",
         };
 
         Symbol::intern(s).as_interned_str()
index 479fbe2673b97357a8d54aaa37dd41e06c6d0433..95da68bc9ffc2e147125a0300eff1a13a4a191c6 100644 (file)
@@ -221,8 +221,7 @@ pub fn push_item_path<T>(self, buffer: &mut T, def_id: DefId)
             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);
index 4fe9c34c140cbdf8136258728b33931570fdffa0..24bda3a47442a665bbf9e9317c69eb36006d71df 100644 (file)
@@ -291,8 +291,7 @@ fn parameterized<F: fmt::Write>(&mut self,
                     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