diff options
| -rw-r--r-- | src/librustc/dep_graph/dep_node.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/mir_map.rs | 26 |
2 files changed, 7 insertions, 21 deletions
diff --git a/src/librustc/dep_graph/dep_node.rs b/src/librustc/dep_graph/dep_node.rs index 2e7bac67c5f..2777c4d2487 100644 --- a/src/librustc/dep_graph/dep_node.rs +++ b/src/librustc/dep_graph/dep_node.rs @@ -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 @@ impl<D: Clone + Debug> DepNode<D> { match *self { Krate => Some(Krate), BorrowCheckKrate => Some(BorrowCheckKrate), + MirKrate => Some(MirKrate), TypeckBodiesKrate => Some(TypeckBodiesKrate), CollectLanguageItems => Some(CollectLanguageItems), CheckStaticRecursion => Some(CheckStaticRecursion), diff --git a/src/librustc_mir/mir_map.rs b/src/librustc_mir/mir_map.rs index e0eb09fbf5d..a41489ff89f 100644 --- a/src/librustc_mir/mir_map.rs +++ b/src/librustc_mir/mir_map.rs @@ -30,7 +30,6 @@ use rustc::ty::{self, Ty, TyCtxt}; 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; @@ -39,9 +38,11 @@ use std::cell::RefCell; 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 @@ impl<'a, 'gcx: 'tcx, 'tcx> MutVisitor<'tcx> for GlobalizeMir<'a, 'gcx> { /////////////////////////////////////////////////////////////////////////// // 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) |
