Struct rustc_driver::driver::CompileController [−][src]
pub struct CompileController<'a> { pub after_parse: PhaseController<'a>, pub after_expand: PhaseController<'a>, pub after_hir_lowering: PhaseController<'a>, pub after_analysis: PhaseController<'a>, pub compilation_done: PhaseController<'a>, pub make_glob_map: MakeGlobMap, pub keep_ast: bool, pub continue_parse_after_error: bool, pub provide: Box<Fn(&mut Providers) + 'a>, pub provide_extern: Box<Fn(&mut Providers) + 'a>, }
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
CompileController is used to customize compilation, it allows compilation to be stopped and/or to call arbitrary code at various points in compilation. It also allows for various flags to be set to influence what information gets collected during compilation.
This is a somewhat higher level controller than a Session - the Session controls what happens in each phase, whereas the CompileController controls whether a phase is run at all and whether other code (from outside the compiler) is run between phases.
Note that if compilation is set to stop and a callback is provided for a given entry point, the callback is called before compilation is stopped.
Expect more entry points to be added in the future.
Fields
after_parse: PhaseController<'a>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
after_expand: PhaseController<'a>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
after_hir_lowering: PhaseController<'a>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
after_analysis: PhaseController<'a>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
compilation_done: PhaseController<'a>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
make_glob_map: MakeGlobMap
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
keep_ast: bool
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
continue_parse_after_error: bool
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
provide: Box<Fn(&mut Providers) + 'a>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Allows overriding default rustc query providers,
after default_provide
has installed them.
provide_extern: Box<Fn(&mut Providers) + 'a>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Same as provide
, but only for non-local crates,
applied after default_provide_extern
.
Methods
impl<'a> CompileController<'a>
[src]
impl<'a> CompileController<'a>
pub fn basic() -> CompileController<'a>
[src]
pub fn basic() -> CompileController<'a>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Trait Implementations
impl<'a> CompilerCalls<'a> for CompileController<'a>
[src]
impl<'a> CompilerCalls<'a> for CompileController<'a>
This implementation makes it easier to create a custom driver when you only want to hook
into callbacks from CompileController
.
Example
let mut controller = CompileController::basic(); controller.after_analysis.callback = Box::new(move |_state| {}); rustc_driver::run_compiler(&[], Box::new(controller), None, None);
fn early_callback(
&mut self,
matches: &Matches,
sopts: &Options,
cfg: &CrateConfig,
descriptions: &Registry,
output: ErrorOutputType
) -> Compilation
[src]
fn early_callback(
&mut self,
matches: &Matches,
sopts: &Options,
cfg: &CrateConfig,
descriptions: &Registry,
output: ErrorOutputType
) -> Compilation
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Hook for a callback early in the process of handling arguments. This will be called straight after options have been parsed but before anything else (e.g., selecting input and output). Read more
fn no_input(
&mut self,
matches: &Matches,
sopts: &Options,
cfg: &CrateConfig,
odir: &Option<PathBuf>,
ofile: &Option<PathBuf>,
descriptions: &Registry
) -> Option<(Input, Option<PathBuf>)>
[src]
fn no_input(
&mut self,
matches: &Matches,
sopts: &Options,
cfg: &CrateConfig,
odir: &Option<PathBuf>,
ofile: &Option<PathBuf>,
descriptions: &Registry
) -> Option<(Input, Option<PathBuf>)>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Called after we extract the input from the arguments if there is no valid input. Gives the implementer an opportunity to supply alternate input (by returning a Some value) or to add custom behaviour for this error such as emitting error messages. Returning None will cause compilation to stop at this point. Read more
fn late_callback(
&mut self,
codegen_backend: &CodegenBackend,
matches: &Matches,
sess: &Session,
cstore: &CrateStore,
input: &Input,
odir: &Option<PathBuf>,
ofile: &Option<PathBuf>
) -> Compilation
[src]
fn late_callback(
&mut self,
codegen_backend: &CodegenBackend,
matches: &Matches,
sess: &Session,
cstore: &CrateStore,
input: &Input,
odir: &Option<PathBuf>,
ofile: &Option<PathBuf>
) -> Compilation
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Hook for a callback late in the process of handling arguments. This will be called just before actual compilation starts (and before build_controller is called), after all arguments etc. have been completely handled. Read more
fn build_controller(
self: Box<Self>,
_: &Session,
_: &Matches
) -> CompileController<'a>
[src]
fn build_controller(
self: Box<Self>,
_: &Session,
_: &Matches
) -> CompileController<'a>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
fn some_input(
&mut self,
input: Input,
input_path: Option<PathBuf>
) -> (Input, Option<PathBuf>)
[src]
fn some_input(
&mut self,
input: Input,
input_path: Option<PathBuf>
) -> (Input, Option<PathBuf>)
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Called after we extract the input from the arguments. Gives the implementer an opportunity to change the inputs or to add some custom input handling. The default behaviour is to simply pass through the inputs. Read more
Auto Trait Implementations
impl<'a> !Send for CompileController<'a>
impl<'a> !Send for CompileController<'a>
impl<'a> !Sync for CompileController<'a>
impl<'a> !Sync for CompileController<'a>