From ae75311823574fd697f28961cecb0e0f3f3382ce Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Sun, 14 Jul 2019 20:24:48 +0200 Subject: [PATCH 1/2] Add Callbacks::after_expansion --- src/librustc_driver/lib.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index e615f8a4846..8f69171cb4e 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -109,6 +109,10 @@ pub trait Callbacks { fn after_parsing(&mut self, _compiler: &interface::Compiler) -> bool { true } + /// Called after expansion and returns true to continue execution + fn after_expansion(&mut self, _compiler: &interface::Compiler) -> bool { + true + } /// Called after analysis and returns true to continue execution fn after_analysis(&mut self, _compiler: &interface::Compiler) -> bool { true @@ -312,6 +316,11 @@ pub fn run_compiler( return sess.compile_status(); } + compiler.expansion()?; + if !callbacks.after_expansion(compiler) { + return sess.compile_status(); + } + compiler.prepare_outputs()?; if sess.opts.output_types.contains_key(&OutputType::DepInfo) From ff63336b65691f4fd0e339bb74a1798d1f96e86e Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Sun, 14 Jul 2019 20:29:20 +0200 Subject: [PATCH 2/2] Use more descriptive Compilation enum in rustc interface callbacks --- src/librustc_driver/lib.rs | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index 8f69171cb4e..2bc79e5080f 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -105,17 +105,20 @@ pub fn abort_on_err(result: Result, sess: &Session) -> T { pub trait Callbacks { /// Called before creating the compiler instance fn config(&mut self, _config: &mut interface::Config) {} - /// Called after parsing and returns true to continue execution - fn after_parsing(&mut self, _compiler: &interface::Compiler) -> bool { - true + /// Called after parsing. Return value instructs the compiler whether to + /// continue the compilation afterwards (defaults to `Compilation::Continue`) + fn after_parsing(&mut self, _compiler: &interface::Compiler) -> Compilation { + Compilation::Continue } - /// Called after expansion and returns true to continue execution - fn after_expansion(&mut self, _compiler: &interface::Compiler) -> bool { - true + /// Called after expansion. Return value instructs the compiler whether to + /// continue the compilation afterwards (defaults to `Compilation::Continue`) + fn after_expansion(&mut self, _compiler: &interface::Compiler) -> Compilation { + Compilation::Continue } - /// Called after analysis and returns true to continue execution - fn after_analysis(&mut self, _compiler: &interface::Compiler) -> bool { - true + /// Called after analysis. Return value instructs the compiler whether to + /// continue the compilation afterwards (defaults to `Compilation::Continue`) + fn after_analysis(&mut self, _compiler: &interface::Compiler) -> Compilation { + Compilation::Continue } } @@ -298,7 +301,7 @@ pub fn run_compiler( } } - if !callbacks.after_parsing(compiler) { + if callbacks.after_parsing(compiler) == Compilation::Stop { return sess.compile_status(); } @@ -317,7 +320,7 @@ pub fn run_compiler( } compiler.expansion()?; - if !callbacks.after_expansion(compiler) { + if callbacks.after_expansion(compiler) == Compilation::Stop { return sess.compile_status(); } @@ -364,7 +367,7 @@ pub fn run_compiler( compiler.global_ctxt()?.peek_mut().enter(|tcx| tcx.analysis(LOCAL_CRATE))?; - if !callbacks.after_analysis(compiler) { + if callbacks.after_analysis(compiler) == Compilation::Stop { return sess.compile_status(); }