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

🔬 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?

🔬 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?

🔬 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?

🔬 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?

🔬 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?

🔬 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?

🔬 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?

🔬 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?

🔬 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.

🔬 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]

🔬 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]

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);

🔬 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

🔬 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

🔬 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

🔬 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?

🔬 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> !Sync for CompileController<'a>