098106870e
The purpose here is to get rid of compile_upto, which pretty much always requires the user to read the source to figure out what it does. It's replaced by a sequence of obviously-named functions: - phase_1_parse_input(sess, cfg, input); - phase_2_configure_and_expand(sess, cfg, crate); - phase_3_run_analysis_passes(sess, expanded_crate); - phase_4_translate_to_llvm(sess, expanded_crate, &analysis, outputs); - phase_5_run_llvm_passes(sess, &trans, outputs); - phase_6_link_output(sess, &trans, outputs); Each of which takes what it takes and returns what it returns, with as little variation as possible in behaviour: no "pairs of options" and "pairs of control flags". You can tell if you missed a phase because you will be missing a `phase_N` call to some `N` between 1 and 6. It does mean that people invoking librustc from outside need to write more function calls. The benefit is that they can _figure out what they're doing_ much more easily, and stop at any point, rather than further overloading the tangled logic of `compile_upto`. |
||
---|---|---|
.. | ||
borrowck | ||
cfg | ||
trans | ||
typeck | ||
astencode.rs | ||
check_const.rs | ||
check_loop.rs | ||
check_match.rs | ||
const_eval.rs | ||
dataflow.rs | ||
effect.rs | ||
entry.rs | ||
freevars.rs | ||
graph.rs | ||
kind.rs | ||
lang_items.rs | ||
lint.rs | ||
liveness.rs | ||
mem_categorization.rs | ||
moves.rs | ||
pat_util.rs | ||
privacy.rs | ||
reachable.rs | ||
region.rs | ||
resolve.rs | ||
subst.rs | ||
ty.rs |