]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc/middle/ty/trait_def.rs
Implement default method inheritance.
[rust.git] / src / librustc / middle / ty / trait_def.rs
index a67b2d9fb1cfcf540e5d29e8420764da2558edd4..582b289455196fc545c3d62ca0c3eef0eb79f7dc 100644 (file)
@@ -190,8 +190,14 @@ pub fn add_impl_for_specialization(&self,
             .insert(tcx, impl_def_id, impl_trait_ref)
     }
 
-    pub fn for_each_impl<F: FnMut(DefId)>(&self, tcx: &TyCtxt<'tcx>, mut f: F)  {
-        self.read_trait_impls(tcx);
+    /// Returns the immediately less specialized impl, if any.
+    pub fn parent_of_impl(&self, impl_def_id: DefId) -> Option<DefId> {
+        let parent = self.specialization_graph.borrow().parent(impl_def_id);
+        if parent == self.trait_ref.def_id { None } else { Some(parent) }
+    }
+
+        pub fn for_each_impl<F: FnMut(DefId)>(&self, tcx: &TyCtxt<'tcx>, mut f: F)  {
+            self.read_trait_impls(tcx);
         tcx.populate_implementations_for_trait_if_necessary(self.trait_ref.def_id);
 
         for &impl_def_id in self.blanket_impls.borrow().iter() {