]> git.lizzy.rs Git - rust.git/commitdiff
Separate def collection and hir map making even further
authorNick Cameron <ncameron@mozilla.com>
Thu, 14 Apr 2016 00:39:18 +0000 (12:39 +1200)
committerNick Cameron <ncameron@mozilla.com>
Tue, 19 Apr 2016 22:13:35 +0000 (10:13 +1200)
src/librustc/hir/map/def_collector.rs
src/librustc/hir/map/mod.rs
src/librustc_driver/driver.rs
src/librustc_driver/pretty.rs

index 0e64a2d676e7d8bfbe3f81828816522d8afdb2ae..974791f62bbc4a236ba2a1b2a4d00965ea2b6aa0 100644 (file)
 /// Creates def ids for nodes in the HIR.
 pub struct DefCollector<'ast> {
     pub krate: &'ast Crate,
-    pub map: &'ast [MapEntry<'ast>],
     pub definitions: Definitions,
     pub parent_def: Option<DefIndex>,
 }
 
 impl<'ast> DefCollector<'ast> {
-    pub fn root(krate: &'ast Crate, map: &'ast [MapEntry<'ast>]) -> DefCollector<'ast> {
+    pub fn root(krate: &'ast Crate) -> DefCollector<'ast> {
         let mut collector = DefCollector {
             krate: krate,
-            map: map,
             definitions: Definitions::new(),
             parent_def: None,
         };
@@ -43,12 +41,10 @@ pub fn extend(krate: &'ast Crate,
                   parent_node: NodeId,
                   parent_def_path: DefPath,
                   parent_def_id: DefId,
-                  map: &'ast [MapEntry<'ast>],
                   definitions: Definitions)
                   -> DefCollector<'ast> {
         let mut collector = DefCollector {
             krate: krate,
-            map: map,
             parent_def: None,
             definitions: definitions,
         };
index d0ec83b7eb3a19e102d285940a6e79b00913e84a..70071c224f870c2d806d7c9f80fdce2938a7e651 100644 (file)
@@ -782,19 +782,16 @@ fn new_span(&mut self, span: Span) -> Span {
     }
 }
 
-pub fn map_crate<'ast>(forest: &'ast mut Forest) -> Map<'ast> {
-    let (map, definitions) = {
-        let mut collector = NodeCollector::root(&forest.krate);
-        intravisit::walk_crate(&mut collector, &forest.krate);
-
-        let definitions = {
-            let mut def_collector = DefCollector::root(&forest.krate, &collector.map);
-            intravisit::walk_crate(&mut def_collector, &forest.krate);
-            def_collector.definitions
-        };
+pub fn collect_definitions<'ast>(forest: &'ast mut Forest) -> Definitions {
+    let mut def_collector = DefCollector::root(&forest.krate);
+    intravisit::walk_crate(&mut def_collector, &forest.krate);
+    def_collector.definitions    
+}
 
-        (collector.map, definitions)
-    };
+pub fn map_crate<'ast>(forest: &'ast mut Forest, definitions: Definitions) -> Map<'ast> {
+    let mut collector = NodeCollector::root(&forest.krate);
+    intravisit::walk_crate(&mut collector, &forest.krate);
+    let map = collector.map;
 
     if log_enabled!(::log::DEBUG) {
         // This only makes sense for ordered stores; note the
@@ -843,28 +840,24 @@ pub fn map_decoded_item<'ast, F: FoldOps>(map: &Map<'ast>,
     };
 
     let ii = map.forest.inlined_items.alloc(ii);
-
     let ii_parent_id = fld.new_id(DUMMY_NODE_ID);
+
+    let defs = mem::replace(&mut *map.definitions.borrow_mut(), Definitions::new());
+    let mut def_collector = DefCollector::extend(map.krate(),
+                                                 ii_parent_id,
+                                                 parent_def_path.clone(),
+                                                 parent_def_id,
+                                                 defs);
+    ii.visit(&mut def_collector);
+    *map.definitions.borrow_mut() = def_collector.definitions;
+
     let mut collector = NodeCollector::extend(map.krate(),
                                               ii,
                                               ii_parent_id,
-                                              parent_def_path.clone(),
+                                              parent_def_path,
                                               parent_def_id,
                                               mem::replace(&mut *map.map.borrow_mut(), vec![]));
     ii.visit(&mut collector);
-
-    {
-        let defs = mem::replace(&mut *map.definitions.borrow_mut(), Definitions::new());
-        let mut def_collector = DefCollector::extend(map.krate(),
-                                                     ii_parent_id,
-                                                     parent_def_path,
-                                                     parent_def_id,
-                                                     &collector.map,
-                                                     defs);
-        ii.visit(&mut def_collector);
-        *map.definitions.borrow_mut() = def_collector.definitions;
-    }
-
     *map.map.borrow_mut() = collector.map;
 
     ii
index 488e7ae56ef87e86e6e1b80f604a3f397ad33fbe..d63cf8756325af5c434e28ef897ec019a391bc05 100644 (file)
@@ -156,7 +156,16 @@ macro_rules! controller_entry_point {
         }
 
         let arenas = ty::CtxtArenas::new();
-        let hir_map = make_map(sess, &mut hir_forest);
+        // Collect defintions for def ids.
+        let defs = time(sess.time_passes(),
+                        "collecting defs",
+                        move || hir_map::collect_defs(hir_forest));
+
+        // Construct the HIR map
+        let hir_map = time(sess.time_passes(),
+                           "indexing hir",
+                           move || hir_map::map_crate(hir_forest, defs));
+
 
         write_out_deps(sess, &outputs, &id);
 
@@ -746,15 +755,6 @@ fn new_id(&mut self, old_id: ast::NodeId) -> ast::NodeId {
     krate
 }
 
-pub fn make_map<'ast>(sess: &Session,
-                      forest: &'ast mut hir_map::Forest)
-                      -> hir_map::Map<'ast> {
-    // Construct the HIR map
-    time(sess.time_passes(),
-         "indexing hir",
-         move || hir_map::map_crate(forest))
-}
-
 /// Run the resolution, typechecking, region checking and other
 /// miscellaneous analysis passes on the crate. Return various
 /// structures carrying the results of the analysis.
index cde5ba19859e03fa99d9c66681ddf331302abed2..228cb8d75afef07f19edf3ec22216b0bd9b7d711 100644 (file)
@@ -738,7 +738,8 @@ pub fn pretty_print_input(sess: Session,
     let _ignore = dep_graph.in_ignore();
     let ast_map = if compute_ast_map {
         hir_forest = hir_map::Forest::new(lower_crate(&lcx, &krate), dep_graph.clone());
-        let map = driver::make_map(&sess, &mut hir_forest);
+        let defs = hir_map::collect_defs(hir_forest);
+        let map = hir_map::map_crate(hir_forest, defs);
         Some(map)
     } else {
         None