about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorachernyak <artemchernyak@gmail.com>2017-05-04 09:37:34 -0500
committerachernyak <artemchernyak@gmail.com>2017-05-04 09:37:34 -0500
commit03fe10d91d3361144ab5c8a142daf63bc0ff143e (patch)
treefcd108ececa36f28e67fb3daff96afba72471f9c /src
parentaa5a5320466d4a6ac7125cb01956307e63d9918b (diff)
downloadrust-03fe10d91d3361144ab5c8a142daf63bc0ff143e.tar.gz
rust-03fe10d91d3361144ab5c8a142daf63bc0ff143e.zip
impl_parent
Diffstat (limited to 'src')
-rw-r--r--src/librustc/dep_graph/dep_node.rs2
-rw-r--r--src/librustc/middle/cstore.rs2
-rw-r--r--src/librustc/ty/maps.rs7
-rw-r--r--src/librustc/ty/mod.rs2
-rw-r--r--src/librustc_metadata/cstore_impl.rs6
5 files changed, 11 insertions, 8 deletions
diff --git a/src/librustc/dep_graph/dep_node.rs b/src/librustc/dep_graph/dep_node.rs
index 0e462b95d82..de1531bbd54 100644
--- a/src/librustc/dep_graph/dep_node.rs
+++ b/src/librustc/dep_graph/dep_node.rs
@@ -156,6 +156,7 @@ pub enum DepNode<D: Clone + Debug> {
     Deprecation(D),
     ItemBodyNestedBodies(D),
     ConstIsRvaluePromotableToStatic(D),
+    ImplParent(D),
     TraitOfItem(D),
     IsMirAvailable(D),
     ItemAttrs(D),
@@ -272,6 +273,7 @@ impl<D: Clone + Debug> DepNode<D> {
             Deprecation(ref d) => op(d).map(Deprecation),
             ItemAttrs(ref d) => op(d).map(ItemAttrs),
             FnArgNames(ref d) => op(d).map(FnArgNames),
+            ImplParent(ref d) => op(d).map(ImplParent),
             TraitOfItem(ref d) => op(d).map(TraitOfItem),
             ItemBodyNestedBodies(ref d) => op(d).map(ItemBodyNestedBodies),
             ConstIsRvaluePromotableToStatic(ref d) => op(d).map(ConstIsRvaluePromotableToStatic),
diff --git a/src/librustc/middle/cstore.rs b/src/librustc/middle/cstore.rs
index 11a2dfc6685..e50072043d5 100644
--- a/src/librustc/middle/cstore.rs
+++ b/src/librustc/middle/cstore.rs
@@ -188,7 +188,6 @@ pub trait CrateStore {
 
     // impl info
     fn impl_defaultness(&self, def: DefId) -> hir::Defaultness;
-    fn impl_parent(&self, impl_def_id: DefId) -> Option<DefId>;
 
     // trait/impl-item info
     fn associated_item_cloned(&self, def: DefId) -> ty::AssociatedItem;
@@ -312,7 +311,6 @@ impl CrateStore for DummyCrateStore {
 
     // impl info
     fn impl_defaultness(&self, def: DefId) -> hir::Defaultness { bug!("impl_defaultness") }
-    fn impl_parent(&self, def: DefId) -> Option<DefId> { bug!("impl_parent") }
 
     // trait/impl-item info
     fn associated_item_cloned(&self, def: DefId) -> ty::AssociatedItem
diff --git a/src/librustc/ty/maps.rs b/src/librustc/ty/maps.rs
index 5d1b16c3d2e..1dfd7bc9760 100644
--- a/src/librustc/ty/maps.rs
+++ b/src/librustc/ty/maps.rs
@@ -347,6 +347,12 @@ impl<'tcx> QueryDescription for queries::fn_arg_names<'tcx> {
     }
 }
 
+impl<'tcx> QueryDescription for queries::impl_parent<'tcx> {
+    fn describe(_: TyCtxt, _: DefId) -> String {
+        bug!("impl_parent")
+    }
+}
+
 impl<'tcx> QueryDescription for queries::trait_of_item<'tcx> {
     fn describe(_: TyCtxt, _: DefId) -> String {
         bug!("trait_of_item")
@@ -804,6 +810,7 @@ define_maps! { <'tcx>
     [] deprecation: Deprecation(DefId) -> Option<attr::Deprecation>,
     [] item_attrs: ItemAttrs(DefId) -> Rc<[ast::Attribute]>,
     [] fn_arg_names: FnArgNames(DefId) -> Vec<ast::Name>,
+    [] impl_parent: ImplParent(DefId) -> Option<DefId>,
     [] trait_of_item: TraitOfItem(DefId) -> Option<DefId>,
     [] item_body_nested_bodies: ItemBodyNestedBodies(DefId) -> Rc<BTreeMap<hir::BodyId, hir::Body>>,
     [] const_is_rvalue_promotable_to_static: ConstIsRvaluePromotableToStatic(DefId) -> bool,
diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs
index 00f81c9dcf7..1c3e74d4fb9 100644
--- a/src/librustc/ty/mod.rs
+++ b/src/librustc/ty/mod.rs
@@ -2393,7 +2393,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
             let trait_ref = self.impl_trait_ref(impl_def_id).unwrap();
 
             // Record the trait->implementation mapping.
-            let parent = self.sess.cstore.impl_parent(impl_def_id).unwrap_or(trait_id);
+            let parent = self.impl_parent(impl_def_id).unwrap_or(trait_id);
             def.record_remote_impl(self, impl_def_id, trait_ref, parent);
         }
 
diff --git a/src/librustc_metadata/cstore_impl.rs b/src/librustc_metadata/cstore_impl.rs
index b07dd1ec7b0..b54db55c0e1 100644
--- a/src/librustc_metadata/cstore_impl.rs
+++ b/src/librustc_metadata/cstore_impl.rs
@@ -119,6 +119,7 @@ provide! { <'tcx> tcx, def_id, cdata
     // This is only used by rustdoc anyway, which shouldn't have
     // incremental recompilation ever enabled.
     fn_arg_names => { cdata.get_fn_arg_names(def_id.index) }
+    impl_parent => { cdata.get_parent_impl(def_id.index) }
     trait_of_item => { cdata.get_trait_of_item(def_id.index) }
     item_body_nested_bodies => {
         let map: BTreeMap<_, _> = cdata.entry(def_id.index).ast.into_iter().flat_map(|ast| {
@@ -170,11 +171,6 @@ impl CrateStore for cstore::CStore {
         self.get_crate_data(def.krate).get_impl_defaultness(def.index)
     }
 
-    fn impl_parent(&self, impl_def: DefId) -> Option<DefId> {
-        self.dep_graph.read(DepNode::MetaData(impl_def));
-        self.get_crate_data(impl_def.krate).get_parent_impl(impl_def.index)
-    }
-
     fn associated_item_cloned(&self, def: DefId) -> ty::AssociatedItem
     {
         self.dep_graph.read(DepNode::MetaData(def));