Skip to content

Commit e919f25

Browse files
committed
Delay wrapping Definitions into a RefCell around LocalCrateReader.
1 parent 8d3531d commit e919f25

File tree

4 files changed

+23
-19
lines changed

4 files changed

+23
-19
lines changed

src/librustc_driver/driver.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,29 +142,30 @@ pub fn compile_input(sess: &Session,
142142
let dep_graph = DepGraph::new(sess.opts.build_dep_graph());
143143

144144
// Collect defintions for def ids.
145-
let defs = &RefCell::new(time(sess.time_passes(),
146-
"collecting defs",
147-
|| hir_map::collect_definitions(&expanded_crate)));
145+
let mut defs = time(sess.time_passes(),
146+
"collecting defs",
147+
|| hir_map::collect_definitions(&expanded_crate));
148148

149149
time(sess.time_passes(),
150150
"external crate/lib resolution",
151-
|| LocalCrateReader::new(sess, &cstore, &defs.borrow(), &expanded_crate, &id)
151+
|| LocalCrateReader::new(sess, &cstore, &defs, &expanded_crate, &id)
152152
.read_crates(&dep_graph));
153153

154154
time(sess.time_passes(),
155155
"early lint checks",
156156
|| lint::check_ast_crate(sess, &expanded_crate));
157157

158158
let (analysis, resolutions, mut hir_forest) = {
159-
let defs = &mut *defs.borrow_mut();
160-
lower_and_resolve(sess, &id, defs, &expanded_crate, dep_graph, control.make_glob_map)
159+
lower_and_resolve(sess, &id, &mut defs, &expanded_crate, dep_graph,
160+
control.make_glob_map)
161161
};
162162

163163
// Discard MTWT tables that aren't required past lowering to HIR.
164164
if !keep_mtwt_tables(sess) {
165165
syntax::ext::mtwt::clear_tables();
166166
}
167167

168+
let defs = &RefCell::new(defs);
168169
let arenas = ty::CtxtArenas::new();
169170

170171
// Construct the HIR map

src/librustc_driver/test.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,16 @@ fn test_env<F>(source_string: &str,
120120

121121
let dep_graph = DepGraph::new(false);
122122
let krate = driver::assign_node_ids(&sess, krate);
123-
let defs = &RefCell::new(hir_map::collect_definitions(&krate));
124-
LocalCrateReader::new(&sess, &cstore, &defs.borrow(), &krate, "test_crate").read_crates(&dep_graph);
123+
let mut defs = hir_map::collect_definitions(&krate);
124+
LocalCrateReader::new(&sess, &cstore, &defs, &krate, "test_crate").read_crates(&dep_graph);
125125
let _ignore = dep_graph.in_ignore();
126126

127127
let (_, resolutions, mut hir_forest) = {
128-
let (defs, dep_graph) = (&mut *defs.borrow_mut(), dep_graph.clone());
129-
driver::lower_and_resolve(&sess, "test-crate", defs, &krate, dep_graph, MakeGlobMap::No)
128+
driver::lower_and_resolve(&sess, "test-crate", &mut defs, &krate, dep_graph.clone(),
129+
MakeGlobMap::No)
130130
};
131131

132+
let defs = &RefCell::new(defs);
132133
let arenas = ty::CtxtArenas::new();
133134
let ast_map = hir_map::map_crate(&mut hir_forest, defs);
134135

src/librustdoc/core.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,16 @@ pub fn run_core(search_paths: SearchPaths,
153153
let krate = driver::assign_node_ids(&sess, krate);
154154
let dep_graph = DepGraph::new(false);
155155

156-
let defs = &RefCell::new(hir_map::collect_definitions(&krate));
157-
LocalCrateReader::new(&sess, &cstore, &defs.borrow(), &krate, &name).read_crates(&dep_graph);
156+
let mut defs = hir_map::collect_definitions(&krate);
157+
LocalCrateReader::new(&sess, &cstore, &defs, &krate, &name).read_crates(&dep_graph);
158158

159159
// Lower ast -> hir and resolve.
160160
let (analysis, resolutions, mut hir_forest) = {
161-
let defs = &mut *defs.borrow_mut();
162-
driver::lower_and_resolve(&sess, &name, defs, &krate, dep_graph, resolve::MakeGlobMap::No)
161+
driver::lower_and_resolve(&sess, &name, &mut defs, &krate, dep_graph,
162+
resolve::MakeGlobMap::No)
163163
};
164164

165+
let defs = &RefCell::new(defs);
165166
let arenas = ty::CtxtArenas::new();
166167
let hir_map = hir_map::map_crate(&mut hir_forest, defs);
167168

src/test/run-make/execution-engine/test.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -240,14 +240,15 @@ fn compile_program(input: &str, sysroot: PathBuf)
240240

241241
let dep_graph = DepGraph::new(sess.opts.build_dep_graph());
242242
let krate = driver::assign_node_ids(&sess, krate);
243-
let defs = RefCell::new(ast_map::collect_definitions(&krate));
244-
LocalCrateReader::new(&sess, &cstore, &defs.borrow(), &krate, &id).read_crates(&dep_graph);
243+
let mut defs = ast_map::collect_definitions(&krate);
244+
LocalCrateReader::new(&sess, &cstore, &defs, &krate, &id).read_crates(&dep_graph);
245245
let (analysis, resolutions, mut hir_forest) = {
246-
let defs = &mut *defs.borrow_mut();
247-
driver::lower_and_resolve(&sess, &id, defs, &krate, dep_graph, MakeGlobMap::No)
246+
driver::lower_and_resolve(&sess, &id, &mut defs, &krate, dep_graph, MakeGlobMap::No)
248247
};
248+
249+
let defs = &RefCell::new(defs);
249250
let arenas = ty::CtxtArenas::new();
250-
let ast_map = ast_map::map_crate(&mut hir_forest, &defs);
251+
let ast_map = ast_map::map_crate(&mut hir_forest, defs);
251252

252253
abort_on_err(driver::phase_3_run_analysis_passes(
253254
&sess, ast_map, analysis, resolutions, &arenas, &id,

0 commit comments

Comments
 (0)