diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2017-02-28 12:32:54 -0500 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2017-02-28 12:32:54 -0500 |
| commit | 384f044d826f68827802ce6f255a09282e437a09 (patch) | |
| tree | 53c6792f46f6f7cc4a3bbad8ca63dca7b55b910e | |
| parent | a780fa3f67dc6d1f4a450b4f367727a7e87a7867 (diff) | |
| download | rust-384f044d826f68827802ce6f255a09282e437a09.tar.gz rust-384f044d826f68827802ce6f255a09282e437a09.zip | |
convert MIR to iterate over the bodies vector
| -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) |
