Skip to content

Commit d3ec9d4

Browse files
committed
Auto merge of #33538 - Ms2ger:LocalCrateReader, r=arielb1
Refactor code around LocalCrateReader.
2 parents dee865a + c0e321a commit d3ec9d4

File tree

7 files changed

+50
-43
lines changed

7 files changed

+50
-43
lines changed

src/librustc/hir/map/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ pub struct Map<'ast> {
196196
/// plain old integers.
197197
map: RefCell<Vec<MapEntry<'ast>>>,
198198

199-
definitions: &'ast RefCell<Definitions>,
199+
definitions: RefCell<Definitions>,
200200
}
201201

202202
impl<'ast> Map<'ast> {
@@ -790,7 +790,7 @@ pub fn collect_definitions<'ast>(krate: &'ast ast::Crate) -> Definitions {
790790
}
791791

792792
pub fn map_crate<'ast>(forest: &'ast mut Forest,
793-
definitions: &'ast RefCell<Definitions>)
793+
definitions: Definitions)
794794
-> Map<'ast> {
795795
let mut collector = NodeCollector::root(&forest.krate);
796796
intravisit::walk_crate(&mut collector, &forest.krate);
@@ -816,7 +816,7 @@ pub fn map_crate<'ast>(forest: &'ast mut Forest,
816816
forest: forest,
817817
dep_graph: forest.dep_graph.clone(),
818818
map: RefCell::new(map),
819-
definitions: definitions,
819+
definitions: RefCell::new(definitions),
820820
}
821821
}
822822

src/librustc_driver/driver.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use rustc_borrowck as borrowck;
2828
use rustc_incremental;
2929
use rustc_resolve as resolve;
3030
use rustc_metadata::macro_import;
31-
use rustc_metadata::creader::LocalCrateReader;
31+
use rustc_metadata::creader::read_local_crates;
3232
use rustc_metadata::cstore::CStore;
3333
use rustc_trans::back::link;
3434
use rustc_trans::back::write;
@@ -155,22 +155,21 @@ pub fn compile_input(sess: &Session,
155155
let dep_graph = DepGraph::new(sess.opts.build_dep_graph());
156156

157157
// Collect defintions for def ids.
158-
let defs = &RefCell::new(time(sess.time_passes(),
159-
"collecting defs",
160-
|| hir_map::collect_definitions(&expanded_crate)));
158+
let mut defs = time(sess.time_passes(),
159+
"collecting defs",
160+
|| hir_map::collect_definitions(&expanded_crate));
161161

162162
time(sess.time_passes(),
163163
"external crate/lib resolution",
164-
|| LocalCrateReader::new(sess, &cstore, defs, &expanded_crate, &id)
165-
.read_crates(&dep_graph));
164+
|| read_local_crates(sess, &cstore, &defs, &expanded_crate, &id, &dep_graph));
166165

167166
time(sess.time_passes(),
168167
"early lint checks",
169168
|| lint::check_ast_crate(sess, &expanded_crate));
170169

171170
let (analysis, resolutions, mut hir_forest) = {
172-
let defs = &mut *defs.borrow_mut();
173-
lower_and_resolve(sess, &id, defs, &expanded_crate, dep_graph, control.make_glob_map)
171+
lower_and_resolve(sess, &id, &mut defs, &expanded_crate, dep_graph,
172+
control.make_glob_map)
174173
};
175174

176175
// Discard MTWT tables that aren't required past lowering to HIR.

src/librustc_driver/test.rs

+5-6
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,9 @@ use rustc::traits::ProjectionMode;
2626
use rustc::ty::{self, Ty, TyCtxt, TypeFoldable};
2727
use rustc::infer::{self, InferOk, InferResult, TypeOrigin};
2828
use rustc_metadata::cstore::CStore;
29-
use rustc_metadata::creader::LocalCrateReader;
29+
use rustc_metadata::creader::read_local_crates;
3030
use rustc::hir::map as hir_map;
3131
use rustc::session::{self, config};
32-
use std::cell::RefCell;
3332
use std::rc::Rc;
3433
use syntax::ast;
3534
use syntax::abi::Abi;
@@ -120,13 +119,13 @@ fn test_env<F>(source_string: &str,
120119

121120
let dep_graph = DepGraph::new(false);
122121
let krate = driver::assign_node_ids(&sess, krate);
123-
let defs = &RefCell::new(hir_map::collect_definitions(&krate));
124-
LocalCrateReader::new(&sess, &cstore, defs, &krate, "test_crate").read_crates(&dep_graph);
122+
let mut defs = hir_map::collect_definitions(&krate);
123+
read_local_crates(&sess, &cstore, &defs, &krate, "test_crate", &dep_graph);
125124
let _ignore = dep_graph.in_ignore();
126125

127126
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)
127+
driver::lower_and_resolve(&sess, "test-crate", &mut defs, &krate, dep_graph.clone(),
128+
MakeGlobMap::No)
130129
};
131130

132131
let arenas = ty::CtxtArenas::new();

src/librustc_metadata/creader.rs

+23-13
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ use syntax::parse::token::InternedString;
4141
use syntax::visit;
4242
use log;
4343

44-
pub struct LocalCrateReader<'a> {
44+
struct LocalCrateReader<'a> {
4545
sess: &'a Session,
4646
cstore: &'a CStore,
4747
creader: CrateReader<'a>,
4848
krate: &'a ast::Crate,
49-
defintions: &'a RefCell<hir_map::Definitions>,
49+
definitions: &'a hir_map::Definitions,
5050
}
5151

5252
pub struct CrateReader<'a> {
@@ -841,25 +841,25 @@ impl<'a> CrateReader<'a> {
841841
}
842842

843843
impl<'a> LocalCrateReader<'a> {
844-
pub fn new(sess: &'a Session,
845-
cstore: &'a CStore,
846-
defs: &'a RefCell<hir_map::Definitions>,
847-
krate: &'a ast::Crate,
848-
local_crate_name: &str)
849-
-> LocalCrateReader<'a> {
844+
fn new(sess: &'a Session,
845+
cstore: &'a CStore,
846+
defs: &'a hir_map::Definitions,
847+
krate: &'a ast::Crate,
848+
local_crate_name: &str)
849+
-> LocalCrateReader<'a> {
850850
LocalCrateReader {
851851
sess: sess,
852852
cstore: cstore,
853853
creader: CrateReader::new(sess, cstore, local_crate_name),
854854
krate: krate,
855-
defintions: defs,
855+
definitions: defs,
856856
}
857857
}
858858

859859
// Traverses an AST, reading all the information about use'd crates and
860860
// extern libraries necessary for later resolving, typechecking, linking,
861861
// etc.
862-
pub fn read_crates(&mut self, dep_graph: &DepGraph) {
862+
fn read_crates(&mut self, dep_graph: &DepGraph) {
863863
let _task = dep_graph.in_task(DepNode::CrateReader);
864864

865865
self.process_crate(self.krate);
@@ -902,9 +902,8 @@ impl<'a> LocalCrateReader<'a> {
902902
PathKind::Crate,
903903
true);
904904

905-
let defs = self.defintions.borrow();
906-
let def_id = defs.opt_local_def_id(i.id).unwrap();
907-
let len = defs.def_path(def_id.index).data.len();
905+
let def_id = self.definitions.opt_local_def_id(i.id).unwrap();
906+
let len = self.definitions.def_path(def_id.index).data.len();
908907

909908
self.creader.update_extern_crate(cnum,
910909
ExternCrate {
@@ -982,6 +981,17 @@ impl<'a> LocalCrateReader<'a> {
982981
}
983982
}
984983

984+
/// Traverses an AST, reading all the information about use'd crates and extern
985+
/// libraries necessary for later resolving, typechecking, linking, etc.
986+
pub fn read_local_crates(sess: & Session,
987+
cstore: & CStore,
988+
defs: & hir_map::Definitions,
989+
krate: & ast::Crate,
990+
local_crate_name: &str,
991+
dep_graph: &DepGraph) {
992+
LocalCrateReader::new(sess, cstore, defs, krate, local_crate_name).read_crates(dep_graph)
993+
}
994+
985995
/// Imports the codemap from an external crate into the codemap of the crate
986996
/// currently being compiled (the "local crate").
987997
///

src/librustdoc/core.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use rustc::lint;
2121
use rustc_trans::back::link;
2222
use rustc_resolve as resolve;
2323
use rustc_metadata::cstore::CStore;
24-
use rustc_metadata::creader::LocalCrateReader;
24+
use rustc_metadata::creader::read_local_crates;
2525

2626
use syntax::{ast, codemap, errors};
2727
use syntax::errors::emitter::ColorConfig;
@@ -153,13 +153,13 @@ 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, &krate, &name).read_crates(&dep_graph);
156+
let mut defs = hir_map::collect_definitions(&krate);
157+
read_local_crates(&sess, &cstore, &defs, &krate, &name, &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

165165
let arenas = ty::CtxtArenas::new();

src/librustdoc/test.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ pub fn run(input: &str,
9595
.expect("phase_2_configure_and_expand aborted in rustdoc!");
9696
let krate = driver::assign_node_ids(&sess, krate);
9797
let dep_graph = DepGraph::new(false);
98-
let defs = &RefCell::new(hir_map::collect_definitions(&krate));
98+
let defs = hir_map::collect_definitions(&krate);
9999

100100
let mut dummy_resolver = DummyResolver;
101101
let krate = lower_crate(&krate, &sess, &mut dummy_resolver);

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

+6-7
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ extern crate rustc_metadata;
2020
extern crate rustc_resolve;
2121
#[macro_use] extern crate syntax;
2222

23-
use std::cell::RefCell;
2423
use std::ffi::{CStr, CString};
2524
use std::mem::transmute;
2625
use std::path::PathBuf;
@@ -35,7 +34,7 @@ use rustc::session::config::{self, basic_options, build_configuration, Input, Op
3534
use rustc::session::build_session;
3635
use rustc_driver::{driver, abort_on_err};
3736
use rustc_resolve::MakeGlobMap;
38-
use rustc_metadata::creader::LocalCrateReader;
37+
use rustc_metadata::creader::read_local_crates;
3938
use rustc_metadata::cstore::CStore;
4039
use libc::c_void;
4140

@@ -240,14 +239,14 @@ fn compile_program(input: &str, sysroot: PathBuf)
240239

241240
let dep_graph = DepGraph::new(sess.opts.build_dep_graph());
242241
let krate = driver::assign_node_ids(&sess, krate);
243-
let defs = RefCell::new(ast_map::collect_definitions(&krate));
244-
LocalCrateReader::new(&sess, &cstore, &defs, &krate, &id).read_crates(&dep_graph);
242+
let mut defs = ast_map::collect_definitions(&krate);
243+
read_local_crates(&sess, &cstore, &defs, &krate, &id, &dep_graph);
245244
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)
245+
driver::lower_and_resolve(&sess, &id, &mut defs, &krate, dep_graph, MakeGlobMap::No)
248246
};
247+
249248
let arenas = ty::CtxtArenas::new();
250-
let ast_map = ast_map::map_crate(&mut hir_forest, &defs);
249+
let ast_map = ast_map::map_crate(&mut hir_forest, defs);
251250

252251
abort_on_err(driver::phase_3_run_analysis_passes(
253252
&sess, ast_map, analysis, resolutions, &arenas, &id,

0 commit comments

Comments
 (0)