diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index 468a08b1fd9f3..f19ffc0e12af6 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -51,14 +51,12 @@ use std::iter; use std::path::{Path, PathBuf}; use std::rc::Rc; use std::sync::mpsc; -use syntax::{ast, diagnostics, visit}; -use syntax::attr; +use syntax::{self, ast, attr, diagnostics, visit}; use syntax::ext::base::ExtCtxt; use syntax::fold::Folder; use syntax::parse::{self, PResult}; use syntax::util::node_count::NodeCounter; use syntax_pos::FileName; -use syntax; use syntax_ext; use derive_registrar; @@ -274,10 +272,6 @@ pub fn compile_input(trans: Box, Ok(()) } -fn keep_hygiene_data(sess: &Session) -> bool { - sess.opts.debugging_opts.keep_hygiene_data -} - pub fn source_name(input: &Input) -> FileName { match *input { Input::File(ref ifile) => ifile.clone().into(), @@ -851,7 +845,7 @@ pub fn phase_2_configure_and_expand(sess: &Session, || lint::check_ast_crate(sess, &krate)); // Discard hygiene data, which isn't required after lowering to HIR. - if !keep_hygiene_data(sess) { + if !sess.opts.debugging_opts.keep_hygiene_data { syntax::ext::hygiene::clear_markings(); } @@ -915,18 +909,6 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(trans: &TransCrate, mpsc::Receiver>, CompileResult) -> R { - macro_rules! try_with_f { - ($e: expr, ($($t:tt)*)) => { - match $e { - Ok(x) => x, - Err(x) => { - f($($t)*, Err(x)); - return Err(x); - } - } - } - } - let time_passes = sess.time_passes(); let query_result_on_disk_cache = time(time_passes, @@ -987,7 +969,13 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(trans: &TransCrate, || stability::check_unstable_api_usage(tcx)); // passes are timed inside typeck - try_with_f!(typeck::check_crate(tcx), (tcx, analysis, rx)); + match typeck::check_crate(tcx) { + Ok(x) => x, + Err(x) => { + f(tcx, analysis, rx, Err(x)); + return Err(x); + } + } time(time_passes, "const checking", diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index de5559c8b1440..c05004d1c155c 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -669,7 +669,7 @@ impl<'a> CompilerCalls<'a> for RustcDefaultCalls { control.after_hir_lowering.stop = Compilation::Stop; } - if save_analysis(sess) { + if sess.opts.debugging_opts.save_analysis { enable_save_analysis(&mut control); } @@ -704,10 +704,6 @@ pub fn enable_save_analysis(control: &mut CompileController) { control.make_glob_map = resolve::MakeGlobMap::Yes; } -fn save_analysis(sess: &Session) -> bool { - sess.opts.debugging_opts.save_analysis -} - impl RustcDefaultCalls { pub fn list_metadata(sess: &Session, cstore: &CrateStore, @@ -1329,20 +1325,19 @@ pub fn diagnostics_registry() -> errors::registry::Registry { Registry::new(&all_errors) } -pub fn get_args() -> Vec { - env::args_os().enumerate() - .map(|(i, arg)| arg.into_string().unwrap_or_else(|arg| { - early_error(ErrorOutputType::default(), - &format!("Argument {} is not valid Unicode: {:?}", i, arg)) - })) - .collect() -} - pub fn main() { env_logger::init().unwrap(); - let result = run(|| run_compiler(&get_args(), - &mut RustcDefaultCalls, - None, - None)); + let result = run(|| { + let args = env::args_os().enumerate() + .map(|(i, arg)| arg.into_string().unwrap_or_else(|arg| { + early_error(ErrorOutputType::default(), + &format!("Argument {} is not valid Unicode: {:?}", i, arg)) + })) + .collect::>(); + run_compiler(&args, + &mut RustcDefaultCalls, + None, + None) + }); process::exit(result as i32); }