Skip to content

Commit cbd2475

Browse files
committed
Move CrateConfig from Crate to ParseSess.
1 parent 17e9d9a commit cbd2475

File tree

39 files changed

+130
-298
lines changed

39 files changed

+130
-298
lines changed

src/libproc_macro/lib.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,8 @@ impl FromStr for TokenStream {
136136
fn from_str(src: &str) -> Result<TokenStream, LexError> {
137137
__internal::with_parse_sess(|sess| {
138138
let src = src.to_string();
139-
let cfg = Vec::new();
140139
let name = "<proc-macro source code>".to_string();
141-
let mut parser = parse::new_parser_from_source_str(sess, cfg, name,
142-
src);
140+
let mut parser = parse::new_parser_from_source_str(sess, name, src);
143141
let mut ret = TokenStream { inner: Vec::new() };
144142
loop {
145143
match parser.parse_item() {

src/librustc/hir/lowering.rs

-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ impl<'a> LoweringContext<'a> {
124124
hir::Crate {
125125
module: self.lower_mod(&c.module),
126126
attrs: self.lower_attrs(&c.attrs),
127-
config: c.config.clone().into(),
128127
span: c.span,
129128
exported_macros: c.exported_macros.iter().map(|m| self.lower_macro_def(m)).collect(),
130129
items: items,

src/librustc/hir/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,6 @@ pub type CrateConfig = HirVec<P<MetaItem>>;
413413
pub struct Crate {
414414
pub module: Mod,
415415
pub attrs: HirVec<Attribute>,
416-
pub config: CrateConfig,
417416
pub span: Span,
418417
pub exported_macros: HirVec<MacroDef>,
419418

src/librustc/session/config.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -1237,10 +1237,9 @@ pub fn rustc_optgroups() -> Vec<RustcOptGroup> {
12371237
pub fn parse_cfgspecs(cfgspecs: Vec<String> ) -> ast::CrateConfig {
12381238
cfgspecs.into_iter().map(|s| {
12391239
let sess = parse::ParseSess::new();
1240-
let mut parser = parse::new_parser_from_source_str(&sess,
1241-
Vec::new(),
1242-
"cfgspec".to_string(),
1243-
s.to_string());
1240+
let mut parser =
1241+
parse::new_parser_from_source_str(&sess, "cfgspec".to_string(), s.to_string());
1242+
12441243
let meta_item = panictry!(parser.parse_meta_item());
12451244

12461245
if !parser.reader.is_eof() {

src/librustc_driver/driver.rs

+6-13
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ pub struct Resolutions {
6868

6969
pub fn compile_input(sess: &Session,
7070
cstore: &CStore,
71-
cfg: ast::CrateConfig,
7271
input: &Input,
7372
outdir: &Option<PathBuf>,
7473
output: &Option<PathBuf>,
@@ -92,7 +91,7 @@ pub fn compile_input(sess: &Session,
9291
// large chunks of memory alive and we want to free them as soon as
9392
// possible to keep the peak memory usage low
9493
let (outputs, trans) = {
95-
let krate = match phase_1_parse_input(sess, cfg, input) {
94+
let krate = match phase_1_parse_input(sess, input) {
9695
Ok(krate) => krate,
9796
Err(mut parse_error) => {
9897
parse_error.emit();
@@ -491,23 +490,17 @@ impl<'a, 'b, 'ast, 'tcx> CompileState<'a, 'b, 'ast, 'tcx> {
491490
}
492491
}
493492

494-
pub fn phase_1_parse_input<'a>(sess: &'a Session,
495-
cfg: ast::CrateConfig,
496-
input: &Input)
497-
-> PResult<'a, ast::Crate> {
493+
pub fn phase_1_parse_input<'a>(sess: &'a Session, input: &Input) -> PResult<'a, ast::Crate> {
498494
let continue_after_error = sess.opts.debugging_opts.continue_parse_after_error;
499495
sess.diagnostic().set_continue_after_error(continue_after_error);
500496

501497
let krate = time(sess.time_passes(), "parsing", || {
502498
match *input {
503499
Input::File(ref file) => {
504-
parse::parse_crate_from_file(file, cfg.clone(), &sess.parse_sess)
500+
parse::parse_crate_from_file(file, &sess.parse_sess)
505501
}
506502
Input::Str { ref input, ref name } => {
507-
parse::parse_crate_from_source_str(name.clone(),
508-
input.clone(),
509-
cfg.clone(),
510-
&sess.parse_sess)
503+
parse::parse_crate_from_source_str(name.clone(), input.clone(), &sess.parse_sess)
511504
}
512505
}
513506
})?;
@@ -645,7 +638,7 @@ pub fn phase_2_configure_and_expand<'a, F>(sess: &Session,
645638
// its contents but the results of name resolution on those contents. Hopefully we'll push
646639
// this back at some point.
647640
let _ignore = sess.dep_graph.in_ignore();
648-
let mut crate_loader = CrateLoader::new(sess, &cstore, crate_name, krate.config.clone());
641+
let mut crate_loader = CrateLoader::new(sess, &cstore, crate_name);
649642
crate_loader.preprocess(&krate);
650643
let resolver_arenas = Resolver::arenas();
651644
let mut resolver =
@@ -686,7 +679,7 @@ pub fn phase_2_configure_and_expand<'a, F>(sess: &Session,
686679
should_test: sess.opts.test,
687680
..syntax::ext::expand::ExpansionConfig::default(crate_name.to_string())
688681
};
689-
let mut ecx = ExtCtxt::new(&sess.parse_sess, krate.config.clone(), cfg, &mut resolver);
682+
let mut ecx = ExtCtxt::new(&sess.parse_sess, cfg, &mut resolver);
690683
let err_count = ecx.parse_sess.span_diagnostic.err_count();
691684

692685
let krate = ecx.monotonic_expander().expand_crate(krate);

src/librustc_driver/lib.rs

+17-28
Original file line numberDiff line numberDiff line change
@@ -205,24 +205,20 @@ pub fn run_compiler<'a>(args: &[String],
205205

206206
let loader = file_loader.unwrap_or(box RealFileLoader);
207207
let codemap = Rc::new(CodeMap::with_file_loader(loader));
208-
let sess = session::build_session_with_codemap(sopts,
209-
&dep_graph,
210-
input_file_path,
211-
descriptions,
212-
cstore.clone(),
213-
codemap,
214-
emitter_dest);
208+
let mut sess = session::build_session_with_codemap(
209+
sopts, &dep_graph, input_file_path, descriptions, cstore.clone(), codemap, emitter_dest,
210+
);
215211
rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess));
212+
216213
let mut cfg = config::build_configuration(&sess, cfg);
217214
target_features::add_configuration(&mut cfg, &sess);
215+
sess.parse_sess.config = cfg;
218216

219-
do_or_return!(callbacks.late_callback(&matches, &sess, &cfg, &input, &odir, &ofile),
220-
Some(sess));
217+
do_or_return!(callbacks.late_callback(&matches, &sess, &input, &odir, &ofile), Some(sess));
221218

222219
let plugins = sess.opts.debugging_opts.extra_plugins.clone();
223220
let control = callbacks.build_controller(&sess, &matches);
224-
(driver::compile_input(&sess, &cstore, cfg, &input, &odir, &ofile,
225-
Some(plugins), &control),
221+
(driver::compile_input(&sess, &cstore, &input, &odir, &ofile, Some(plugins), &control),
226222
Some(sess))
227223
}
228224

@@ -310,7 +306,6 @@ pub trait CompilerCalls<'a> {
310306
fn late_callback(&mut self,
311307
_: &getopts::Matches,
312308
_: &Session,
313-
_: &ast::CrateConfig,
314309
_: &Input,
315310
_: &Option<PathBuf>,
316311
_: &Option<PathBuf>)
@@ -439,19 +434,18 @@ impl<'a> CompilerCalls<'a> for RustcDefaultCalls {
439434
}
440435
let dep_graph = DepGraph::new(sopts.build_dep_graph());
441436
let cstore = Rc::new(CStore::new(&dep_graph));
442-
let sess = build_session(sopts.clone(),
437+
let mut sess = build_session(sopts.clone(),
443438
&dep_graph,
444439
None,
445440
descriptions.clone(),
446441
cstore.clone());
447442
rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess));
448443
let mut cfg = config::build_configuration(&sess, cfg.clone());
449444
target_features::add_configuration(&mut cfg, &sess);
450-
let should_stop = RustcDefaultCalls::print_crate_info(&sess,
451-
&cfg,
452-
None,
453-
odir,
454-
ofile);
445+
sess.parse_sess.config = cfg;
446+
let should_stop =
447+
RustcDefaultCalls::print_crate_info(&sess, None, odir, ofile);
448+
455449
if should_stop == Compilation::Stop {
456450
return None;
457451
}
@@ -467,12 +461,11 @@ impl<'a> CompilerCalls<'a> for RustcDefaultCalls {
467461
fn late_callback(&mut self,
468462
matches: &getopts::Matches,
469463
sess: &Session,
470-
cfg: &ast::CrateConfig,
471464
input: &Input,
472465
odir: &Option<PathBuf>,
473466
ofile: &Option<PathBuf>)
474467
-> Compilation {
475-
RustcDefaultCalls::print_crate_info(sess, cfg, Some(input), odir, ofile)
468+
RustcDefaultCalls::print_crate_info(sess, Some(input), odir, ofile)
476469
.and_then(|| RustcDefaultCalls::list_metadata(sess, matches, input))
477470
}
478471

@@ -593,7 +586,6 @@ impl RustcDefaultCalls {
593586

594587

595588
fn print_crate_info(sess: &Session,
596-
cfg: &ast::CrateConfig,
597589
input: Option<&Input>,
598590
odir: &Option<PathBuf>,
599591
ofile: &Option<PathBuf>)
@@ -649,8 +641,8 @@ impl RustcDefaultCalls {
649641
let allow_unstable_cfg = UnstableFeatures::from_environment()
650642
.is_nightly_build();
651643

652-
for cfg in cfg {
653-
if !allow_unstable_cfg && GatedCfg::gate(&*cfg).is_some() {
644+
for cfg in &sess.parse_sess.config {
645+
if !allow_unstable_cfg && GatedCfg::gate(cfg).is_some() {
654646
continue;
655647
}
656648

@@ -1036,13 +1028,10 @@ pub fn handle_options(args: &[String]) -> Option<getopts::Matches> {
10361028
fn parse_crate_attrs<'a>(sess: &'a Session, input: &Input) -> PResult<'a, Vec<ast::Attribute>> {
10371029
match *input {
10381030
Input::File(ref ifile) => {
1039-
parse::parse_crate_attrs_from_file(ifile, Vec::new(), &sess.parse_sess)
1031+
parse::parse_crate_attrs_from_file(ifile, &sess.parse_sess)
10401032
}
10411033
Input::Str { ref name, ref input } => {
1042-
parse::parse_crate_attrs_from_source_str(name.clone(),
1043-
input.clone(),
1044-
Vec::new(),
1045-
&sess.parse_sess)
1034+
parse::parse_crate_attrs_from_source_str(name.clone(), input.clone(), &sess.parse_sess)
10461035
}
10471036
}
10481037
}

src/librustc_driver/test.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,11 @@ fn test_env<F>(source_string: &str,
106106
let sess = session::build_session_(options, &dep_graph, None, diagnostic_handler,
107107
Rc::new(CodeMap::new()), cstore.clone());
108108
rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess));
109-
let krate_config = Vec::new();
110109
let input = config::Input::Str {
111110
name: driver::anon_src(),
112111
input: source_string.to_string(),
113112
};
114-
let krate = driver::phase_1_parse_input(&sess, krate_config, &input).unwrap();
113+
let krate = driver::phase_1_parse_input(&sess, &input).unwrap();
115114
let driver::ExpansionResult { defs, resolutions, mut hir_forest, .. } = {
116115
driver::phase_2_configure_and_expand(
117116
&sess, &cstore, krate, None, "test", None, MakeGlobMap::No, |_| Ok(()),

src/librustc_incremental/persist/dirty_clean.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ impl<'a, 'tcx, 'm> DirtyCleanMetadataVisitor<'a, 'tcx, 'm> {
264264
/// flag called `foo`.
265265
fn check_config(tcx: TyCtxt, attr: &ast::Attribute) -> bool {
266266
debug!("check_config(attr={:?})", attr);
267-
let config = &tcx.map.krate().config;
267+
let config = &tcx.sess.parse_sess.config;
268268
debug!("check_config: config={:?}", config);
269269
for item in attr.meta_item_list().unwrap_or(&[]) {
270270
if item.check_name(CFG) {

src/librustc_metadata/creader.rs

+1-8
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ pub struct CrateLoader<'a> {
5252
next_crate_num: CrateNum,
5353
foreign_item_map: FnvHashMap<String, Vec<ast::NodeId>>,
5454
local_crate_name: String,
55-
local_crate_config: ast::CrateConfig,
5655
}
5756

5857
fn dump_crates(cstore: &CStore) {
@@ -144,18 +143,13 @@ enum LoadResult {
144143
}
145144

146145
impl<'a> CrateLoader<'a> {
147-
pub fn new(sess: &'a Session,
148-
cstore: &'a CStore,
149-
local_crate_name: &str,
150-
local_crate_config: ast::CrateConfig)
151-
-> Self {
146+
pub fn new(sess: &'a Session, cstore: &'a CStore, local_crate_name: &str) -> Self {
152147
CrateLoader {
153148
sess: sess,
154149
cstore: cstore,
155150
next_crate_num: cstore.next_crate_num(),
156151
foreign_item_map: FnvHashMap(),
157152
local_crate_name: local_crate_name.to_owned(),
158-
local_crate_config: local_crate_config,
159153
}
160154
}
161155

@@ -541,7 +535,6 @@ impl<'a> CrateLoader<'a> {
541535
// NB: Don't use parse::parse_tts_from_source_str because it parses with
542536
// quote_depth > 0.
543537
let mut p = parse::new_parser_from_source_str(&self.sess.parse_sess,
544-
self.local_crate_config.clone(),
545538
source_name.clone(),
546539
def.body);
547540
let lo = p.span.lo;

src/librustc_plugin/load.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub fn load_plugins(sess: &Session,
4747
krate: &ast::Crate,
4848
crate_name: &str,
4949
addl_plugins: Option<Vec<String>>) -> Vec<PluginRegistrar> {
50-
let mut loader = PluginLoader::new(sess, cstore, crate_name, krate.config.clone());
50+
let mut loader = PluginLoader::new(sess, cstore, crate_name);
5151

5252
// do not report any error now. since crate attributes are
5353
// not touched by expansion, every use of plugin without
@@ -89,14 +89,10 @@ pub fn load_plugins(sess: &Session,
8989
}
9090

9191
impl<'a> PluginLoader<'a> {
92-
fn new(sess: &'a Session,
93-
cstore: &'a CStore,
94-
crate_name: &str,
95-
crate_config: ast::CrateConfig)
96-
-> PluginLoader<'a> {
92+
fn new(sess: &'a Session, cstore: &'a CStore, crate_name: &str) -> Self {
9793
PluginLoader {
9894
sess: sess,
99-
reader: CrateLoader::new(sess, cstore, crate_name, crate_config),
95+
reader: CrateLoader::new(sess, cstore, crate_name),
10096
plugins: vec![],
10197
}
10298
}

src/librustc_trans/assert_module_sources.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ impl<'a, 'tcx> AssertModuleSource<'a, 'tcx> {
134134
/// Scan for a `cfg="foo"` attribute and check whether we have a
135135
/// cfg flag called `foo`.
136136
fn check_config(&self, attr: &ast::Attribute) -> bool {
137-
let config = &self.tcx.map.krate().config;
137+
let config = &self.tcx.sess.parse_sess.config;
138138
let value = self.field(attr, CFG);
139139
debug!("check_config(config={:?}, value={:?})", config, value);
140140
if config.iter().any(|c| c.check_name(&value[..])) {

src/librustdoc/core.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -163,14 +163,16 @@ pub fn run_core(search_paths: SearchPaths,
163163
let dep_graph = DepGraph::new(false);
164164
let _ignore = dep_graph.in_ignore();
165165
let cstore = Rc::new(CStore::new(&dep_graph));
166-
let sess = session::build_session_(sessopts, &dep_graph, cpath, diagnostic_handler,
167-
codemap, cstore.clone());
166+
let mut sess = session::build_session_(
167+
sessopts, &dep_graph, cpath, diagnostic_handler, codemap, cstore.clone()
168+
);
168169
rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess));
169170

170171
let mut cfg = config::build_configuration(&sess, config::parse_cfgspecs(cfgs));
171172
target_features::add_configuration(&mut cfg, &sess);
173+
sess.parse_sess.config = cfg;
172174

173-
let krate = panictry!(driver::phase_1_parse_input(&sess, cfg, &input));
175+
let krate = panictry!(driver::phase_1_parse_input(&sess, &input));
174176

175177
let name = link::find_crate_name(Some(&sess), &krate.attrs, &input);
176178

src/librustdoc/test.rs

+14-22
Original file line numberDiff line numberDiff line change
@@ -73,24 +73,20 @@ pub fn run(input: &str,
7373
};
7474

7575
let codemap = Rc::new(CodeMap::new());
76-
let diagnostic_handler = errors::Handler::with_tty_emitter(ColorConfig::Auto,
77-
true,
78-
false,
79-
Some(codemap.clone()));
76+
let handler =
77+
errors::Handler::with_tty_emitter(ColorConfig::Auto, true, false, Some(codemap.clone()));
8078

8179
let dep_graph = DepGraph::new(false);
8280
let _ignore = dep_graph.in_ignore();
8381
let cstore = Rc::new(CStore::new(&dep_graph));
84-
let sess = session::build_session_(sessopts,
85-
&dep_graph,
86-
Some(input_path.clone()),
87-
diagnostic_handler,
88-
codemap,
89-
cstore.clone());
82+
let mut sess = session::build_session_(
83+
sessopts, &dep_graph, Some(input_path.clone()), handler, codemap, cstore.clone(),
84+
);
9085
rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess));
86+
sess.parse_sess.config =
87+
config::build_configuration(&sess, config::parse_cfgspecs(cfgs.clone()));
9188

92-
let cfg = config::build_configuration(&sess, config::parse_cfgspecs(cfgs.clone()));
93-
let krate = panictry!(driver::phase_1_parse_input(&sess, cfg, &input));
89+
let krate = panictry!(driver::phase_1_parse_input(&sess, &input));
9490
let driver::ExpansionResult { defs, mut hir_forest, .. } = {
9591
phase_2_configure_and_expand(
9692
&sess, &cstore, krate, None, "rustdoc-test", None, MakeGlobMap::No, |_| Ok(())
@@ -236,28 +232,24 @@ fn runtest(test: &str, cratename: &str, cfgs: Vec<String>, libs: SearchPaths,
236232

237233
let dep_graph = DepGraph::new(false);
238234
let cstore = Rc::new(CStore::new(&dep_graph));
239-
let sess = session::build_session_(sessopts,
240-
&dep_graph,
241-
None,
242-
diagnostic_handler,
243-
codemap,
244-
cstore.clone());
235+
let mut sess = session::build_session_(
236+
sessopts, &dep_graph, None, diagnostic_handler, codemap, cstore.clone(),
237+
);
245238
rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess));
246239

247240
let outdir = Mutex::new(TempDir::new("rustdoctest").ok().expect("rustdoc needs a tempdir"));
248241
let libdir = sess.target_filesearch(PathKind::All).get_lib_path();
249242
let mut control = driver::CompileController::basic();
250-
let cfg = config::build_configuration(&sess, config::parse_cfgspecs(cfgs.clone()));
243+
sess.parse_sess.config =
244+
config::build_configuration(&sess, config::parse_cfgspecs(cfgs.clone()));
251245
let out = Some(outdir.lock().unwrap().path().to_path_buf());
252246

253247
if no_run {
254248
control.after_analysis.stop = Compilation::Stop;
255249
}
256250

257251
let res = panic::catch_unwind(AssertUnwindSafe(|| {
258-
driver::compile_input(&sess, &cstore, cfg.clone(),
259-
&input, &out,
260-
&None, None, &control)
252+
driver::compile_input(&sess, &cstore, &input, &out, &None, None, &control)
261253
}));
262254

263255
match res {

0 commit comments

Comments
 (0)