]> git.lizzy.rs Git - rust.git/commitdiff
convert MIR to iterate over the bodies vector
authorNiko Matsakis <niko@alum.mit.edu>
Tue, 28 Feb 2017 17:32:54 +0000 (12:32 -0500)
committerNiko Matsakis <niko@alum.mit.edu>
Tue, 28 Feb 2017 17:32:54 +0000 (12:32 -0500)
src/librustc/dep_graph/dep_node.rs
src/librustc_mir/mir_map.rs

index 2e7bac67c5f5e84a1d66218dc23af2337dbbb7ed..2777c4d248710c42c0177608b62e5224ba6db2d3 100644 (file)
@@ -89,6 +89,7 @@ pub enum DepNode<D: Clone + Debug> {
 
     // Represents the MIR for a fn; also used as the task node for
     // things read/modify that MIR.
+    MirKrate,
     Mir(D),
 
     BorrowCheckKrate,
@@ -212,6 +213,7 @@ pub fn map_def<E, OP>(&self, mut op: OP) -> Option<DepNode<E>>
         match *self {
             Krate => Some(Krate),
             BorrowCheckKrate => Some(BorrowCheckKrate),
+            MirKrate => Some(MirKrate),
             TypeckBodiesKrate => Some(TypeckBodiesKrate),
             CollectLanguageItems => Some(CollectLanguageItems),
             CheckStaticRecursion => Some(CheckStaticRecursion),
index e0eb09fbf5d6f06e399b50d34216198f85bf16a8..a41489ff89ff46a24d804ebb4f1fca59966f5d3d 100644 (file)
@@ -30,7 +30,6 @@
 use rustc::ty::maps::Providers;
 use rustc::ty::subst::Substs;
 use rustc::hir;
-use rustc::hir::intravisit::{Visitor, NestedVisitorMap};
 use syntax::abi::Abi;
 use syntax::ast;
 use syntax_pos::Span;
 use std::mem;
 
 pub fn build_mir_for_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
-    tcx.visit_all_item_likes_in_krate(DepNode::Mir, &mut BuildMir {
-        tcx: tcx
-    }.as_deep_visitor());
+    tcx.dep_graph.with_task(DepNode::MirKrate, || {
+        tcx.visit_all_bodies_in_krate(|body_owner_def_id, _body_id| {
+            tcx.item_mir(body_owner_def_id);
+        });
+    });
 }
 
 pub fn provide(providers: &mut Providers) {
@@ -180,23 +181,6 @@ fn visit_substs(&mut self, substs: &mut &'tcx Substs<'tcx>) {
 ///////////////////////////////////////////////////////////////////////////
 // BuildMir -- walks a crate, looking for fn items and methods to build MIR from
 
-struct BuildMir<'a, 'tcx: 'a> {
-    tcx: TyCtxt<'a, 'tcx, 'tcx>
-}
-
-impl<'a, 'tcx> Visitor<'tcx> for BuildMir<'a, 'tcx> {
-    fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> {
-        NestedVisitorMap::None
-    }
-
-    fn visit_nested_body(&mut self, body_id: hir::BodyId) {
-        self.tcx.item_mir(self.tcx.hir.body_owner_def_id(body_id));
-
-        let body = self.tcx.hir.body(body_id);
-        self.visit_body(body);
-    }
-}
-
 fn closure_self_ty<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
                              closure_expr_id: ast::NodeId,
                              body_id: hir::BodyId)