about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMs2ger <Ms2ger@gmail.com>2016-05-10 15:34:52 +0200
committerMs2ger <Ms2ger@gmail.com>2016-05-10 19:36:08 +0200
commite919f251800b792e15b3c72cdfb19e539cd74971 (patch)
tree35ef70e2e53b44b6a3daa8dfcd0285111d3df678
parent8d3531d3db513bd71ad1ac041ad9a2172ec34012 (diff)
downloadrust-e919f251800b792e15b3c72cdfb19e539cd74971.tar.gz
rust-e919f251800b792e15b3c72cdfb19e539cd74971.zip
Delay wrapping Definitions into a RefCell around LocalCrateReader.
-rw-r--r--src/librustc_driver/driver.rs13
-rw-r--r--src/librustc_driver/test.rs9
-rw-r--r--src/librustdoc/core.rs9
-rw-r--r--src/test/run-make/execution-engine/test.rs11
4 files changed, 23 insertions, 19 deletions
diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs
index 8841480f7f6..3f9fa0a23c2 100644
--- a/src/librustc_driver/driver.rs
+++ b/src/librustc_driver/driver.rs
@@ -142,13 +142,13 @@ pub fn compile_input(sess: &Session,
         let dep_graph = DepGraph::new(sess.opts.build_dep_graph());
 
         // Collect defintions for def ids.
-        let defs = &RefCell::new(time(sess.time_passes(),
-                                 "collecting defs",
-                                 || hir_map::collect_definitions(&expanded_crate)));
+        let mut defs = time(sess.time_passes(),
+                            "collecting defs",
+                            || hir_map::collect_definitions(&expanded_crate));
 
         time(sess.time_passes(),
              "external crate/lib resolution",
-             || LocalCrateReader::new(sess, &cstore, &defs.borrow(), &expanded_crate, &id)
+             || LocalCrateReader::new(sess, &cstore, &defs, &expanded_crate, &id)
                     .read_crates(&dep_graph));
 
         time(sess.time_passes(),
@@ -156,8 +156,8 @@ pub fn compile_input(sess: &Session,
              || lint::check_ast_crate(sess, &expanded_crate));
 
         let (analysis, resolutions, mut hir_forest) = {
-            let defs = &mut *defs.borrow_mut();
-            lower_and_resolve(sess, &id, defs, &expanded_crate, dep_graph, control.make_glob_map)
+            lower_and_resolve(sess, &id, &mut defs, &expanded_crate, dep_graph,
+                              control.make_glob_map)
         };
 
         // Discard MTWT tables that aren't required past lowering to HIR.
@@ -165,6 +165,7 @@ pub fn compile_input(sess: &Session,
             syntax::ext::mtwt::clear_tables();
         }
 
+        let defs = &RefCell::new(defs);
         let arenas = ty::CtxtArenas::new();
 
         // Construct the HIR map
diff --git a/src/librustc_driver/test.rs b/src/librustc_driver/test.rs
index ed9a092b6ff..59713c66afc 100644
--- a/src/librustc_driver/test.rs
+++ b/src/librustc_driver/test.rs
@@ -120,15 +120,16 @@ fn test_env<F>(source_string: &str,
 
     let dep_graph = DepGraph::new(false);
     let krate = driver::assign_node_ids(&sess, krate);
-    let defs = &RefCell::new(hir_map::collect_definitions(&krate));
-    LocalCrateReader::new(&sess, &cstore, &defs.borrow(), &krate, "test_crate").read_crates(&dep_graph);
+    let mut defs = hir_map::collect_definitions(&krate);
+    LocalCrateReader::new(&sess, &cstore, &defs, &krate, "test_crate").read_crates(&dep_graph);
     let _ignore = dep_graph.in_ignore();
 
     let (_, resolutions, mut hir_forest) = {
-        let (defs, dep_graph) = (&mut *defs.borrow_mut(), dep_graph.clone());
-        driver::lower_and_resolve(&sess, "test-crate", defs, &krate, dep_graph, MakeGlobMap::No)
+        driver::lower_and_resolve(&sess, "test-crate", &mut defs, &krate, dep_graph.clone(),
+                                  MakeGlobMap::No)
     };
 
+    let defs = &RefCell::new(defs);
     let arenas = ty::CtxtArenas::new();
     let ast_map = hir_map::map_crate(&mut hir_forest, defs);
 
diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs
index 77a780805a6..857a1176f49 100644
--- a/src/librustdoc/core.rs
+++ b/src/librustdoc/core.rs
@@ -153,15 +153,16 @@ pub fn run_core(search_paths: SearchPaths,
     let krate = driver::assign_node_ids(&sess, krate);
     let dep_graph = DepGraph::new(false);
 
-    let defs = &RefCell::new(hir_map::collect_definitions(&krate));
-    LocalCrateReader::new(&sess, &cstore, &defs.borrow(), &krate, &name).read_crates(&dep_graph);
+    let mut defs = hir_map::collect_definitions(&krate);
+    LocalCrateReader::new(&sess, &cstore, &defs, &krate, &name).read_crates(&dep_graph);
 
     // Lower ast -> hir and resolve.
     let (analysis, resolutions, mut hir_forest) = {
-        let defs = &mut *defs.borrow_mut();
-        driver::lower_and_resolve(&sess, &name, defs, &krate, dep_graph, resolve::MakeGlobMap::No)
+        driver::lower_and_resolve(&sess, &name, &mut defs, &krate, dep_graph,
+                                  resolve::MakeGlobMap::No)
     };
 
+    let defs = &RefCell::new(defs);
     let arenas = ty::CtxtArenas::new();
     let hir_map = hir_map::map_crate(&mut hir_forest, defs);
 
diff --git a/src/test/run-make/execution-engine/test.rs b/src/test/run-make/execution-engine/test.rs
index f46846c34a5..0d10f315566 100644
--- a/src/test/run-make/execution-engine/test.rs
+++ b/src/test/run-make/execution-engine/test.rs
@@ -240,14 +240,15 @@ fn compile_program(input: &str, sysroot: PathBuf)
 
         let dep_graph = DepGraph::new(sess.opts.build_dep_graph());
         let krate = driver::assign_node_ids(&sess, krate);
-        let defs = RefCell::new(ast_map::collect_definitions(&krate));
-        LocalCrateReader::new(&sess, &cstore, &defs.borrow(), &krate, &id).read_crates(&dep_graph);
+        let mut defs = ast_map::collect_definitions(&krate);
+        LocalCrateReader::new(&sess, &cstore, &defs, &krate, &id).read_crates(&dep_graph);
         let (analysis, resolutions, mut hir_forest) = {
-            let defs = &mut *defs.borrow_mut();
-            driver::lower_and_resolve(&sess, &id, defs, &krate, dep_graph, MakeGlobMap::No)
+            driver::lower_and_resolve(&sess, &id, &mut defs, &krate, dep_graph, MakeGlobMap::No)
         };
+
+        let defs = &RefCell::new(defs);
         let arenas = ty::CtxtArenas::new();
-        let ast_map = ast_map::map_crate(&mut hir_forest, &defs);
+        let ast_map = ast_map::map_crate(&mut hir_forest, defs);
 
         abort_on_err(driver::phase_3_run_analysis_passes(
             &sess, ast_map, analysis, resolutions, &arenas, &id,