use rustc::session::{early_error, early_warn};
use rustc::lint::Lint;
use rustc::lint;
+use rustc::middle::cstore::MetadataLoader;
use rustc::hir::def_id::LOCAL_CRATE;
use rustc::ty::TyCtxt;
use rustc::util::common::{set_time_depth, time, print_time_passes_entry, ErrorReported};
use rustc_metadata::locator;
-use rustc_metadata::cstore::CStore;
use rustc_codegen_utils::codegen_backend::CodegenBackend;
use rustc_interface::interface;
use rustc_interface::util::get_codegen_sysroot;
None => return Ok(()),
};
- let (sopts, cfg) = config::build_session_options_and_crate_config(&matches);
+ let sopts = config::build_session_options(&matches);
+ let cfg = interface::parse_cfgspecs(matches.opt_strs("cfg"));
let mut dummy_config = |sopts, cfg, diagnostic_output| {
let mut config = interface::Config {
stderr: None,
crate_name: None,
lint_caps: Default::default(),
+ register_lints: None,
};
callbacks.config(&mut config);
config
interface::run_compiler(config, |compiler| {
let sopts = &compiler.session().opts;
if sopts.describe_lints {
+ let lint_store = rustc_lint::new_lint_store(
+ sopts.debugging_opts.no_interleave_lints,
+ compiler.session().unstable_options(),
+ );
describe_lints(
compiler.session(),
- &*compiler.session().lint_store.borrow(),
+ &lint_store,
false
);
return;
stderr: None,
crate_name: None,
lint_caps: Default::default(),
+ register_lints: None,
};
callbacks.config(&mut config);
compiler.output_file(),
).and_then(|| RustcDefaultCalls::list_metadata(
sess,
- compiler.cstore(),
+ &*compiler.codegen_backend().metadata_loader(),
&matches,
compiler.input()
));
);
Ok(())
})?;
- return sess.compile_status();
} else {
let mut krate = compiler.parse()?.take();
pretty::visit_crate(sess, &mut krate, ppm);
ppm,
compiler.output_file().as_ref().map(|p| &**p),
);
- return sess.compile_status();
}
+ return sess.compile_status();
}
if callbacks.after_parsing(compiler) == Compilation::Stop {
return sess.compile_status();
}
- compiler.register_plugins()?;
+ {
+ let (_, _, lint_store) = &*compiler.register_plugins()?.peek();
- // Lint plugins are registered; now we can process command line flags.
- if sess.opts.describe_lints {
- describe_lints(&sess, &sess.lint_store.borrow(), true);
- return sess.compile_status();
+ // Lint plugins are registered; now we can process command line flags.
+ if sess.opts.describe_lints {
+ describe_lints(&sess, &lint_store, true);
+ return sess.compile_status();
+ }
}
compiler.expansion()?;
impl RustcDefaultCalls {
pub fn list_metadata(sess: &Session,
- cstore: &CStore,
+ metadata_loader: &dyn MetadataLoader,
matches: &getopts::Matches,
input: &Input)
-> Compilation {
let mut v = Vec::new();
locator::list_file_metadata(&sess.target.target,
path,
- &*cstore.metadata_loader,
+ metadata_loader,
&mut v)
.unwrap();
println!("{}", String::from_utf8(v).unwrap());
let mut cfgs = sess.parse_sess.config.iter().filter_map(|&(name, ref value)| {
let gated_cfg = GatedCfg::gate(&ast::MetaItem {
path: ast::Path::from_ident(ast::Ident::with_dummy_span(name)),
- node: ast::MetaItemKind::Word,
+ kind: ast::MetaItemKind::Word,
span: DUMMY_SP,
});
");
- fn sort_lints(sess: &Session, lints: Vec<(&'static Lint, bool)>) -> Vec<&'static Lint> {
- let mut lints: Vec<_> = lints.into_iter().map(|(x, _)| x).collect();
+ fn sort_lints(sess: &Session, mut lints: Vec<&'static Lint>) -> Vec<&'static Lint> {
// The sort doesn't case-fold but it's doubtful we care.
lints.sort_by_cached_key(|x: &&Lint| (x.default_level(sess), x.name));
lints
let (plugin, builtin): (Vec<_>, _) = lint_store.get_lints()
.iter()
.cloned()
- .partition(|&(_, p)| p);
+ .partition(|&lint| lint.is_plugin);
let plugin = sort_lints(sess, plugin);
let builtin = sort_lints(sess, builtin);
let backtrace = env::var_os("RUST_BACKTRACE").map(|x| &x != "0").unwrap_or(false);
if backtrace {
- TyCtxt::try_print_query_stack();
+ TyCtxt::try_print_query_stack(&handler);
}
#[cfg(windows)]