use rustc::util::common::{time, ErrorReported};
use rustc::session::Session;
use rustc::session::config::{self, CrateType, Input, OutputFilenames, OutputType};
+use rustc::session::config::{PpMode, PpSourceMode};
use rustc::session::search_paths::PathKind;
use rustc_codegen_ssa::back::link::emit_metadata;
use rustc_codegen_utils::codegen_backend::CodegenBackend;
use rustc_incremental;
use rustc_metadata::cstore;
use rustc_mir as mir;
+use rustc_parse::{parse_crate_from_file, parse_crate_from_source_str};
use rustc_passes::{self, ast_validation, hir_stats, layout_test};
use rustc_plugin as plugin;
use rustc_plugin::registry::Registry;
use syntax::early_buffered_lints::BufferedEarlyLint;
use syntax_expand::base::{NamedSyntaxExtension, ExtCtxt};
use syntax::mut_visit::MutVisitor;
-use syntax::parse;
use syntax::util::node_count::NodeCounter;
use syntax::symbol::Symbol;
use syntax_pos::FileName;
let krate = time(sess, "parsing", || {
let _prof_timer = sess.prof.generic_activity("parse_crate");
- match *input {
- Input::File(ref file) => parse::parse_crate_from_file(file, &sess.parse_sess),
- Input::Str {
- ref input,
- ref name,
- } => parse::parse_crate_from_source_str(name.clone(), input.clone(), &sess.parse_sess),
+ match input {
+ Input::File(file) => parse_crate_from_file(file, &sess.parse_sess),
+ Input::Str { input, name } => {
+ parse_crate_from_source_str(name.clone(), input.clone(), &sess.parse_sess)
+ }
}
})?;
)
});
- let (krate, features) = syntax::config::features(
+ let (krate, features) = syntax_expand::config::features(
krate,
&sess.parse_sess,
sess.edition(),
}
});
- let Registry {
- syntax_exts,
- llvm_passes,
- attributes,
- ..
- } = registry;
-
+ let Registry { syntax_exts, llvm_passes, .. } = registry;
*sess.plugin_llvm_passes.borrow_mut() = llvm_passes;
- *sess.plugin_attributes.borrow_mut() = attributes;
Ok((krate, PluginInfo { syntax_exts }, Lrc::new(lint_store)))
}
// If we're actually rustdoc then there's no need to actually compile
// anything, so switch everything to just looping
- if sess.opts.actually_rustdoc {
- util::ReplaceBodyWithLoop::new(sess).visit_crate(&mut krate);
+ let mut should_loop = sess.opts.actually_rustdoc;
+ if let Some((PpMode::PpmSource(PpSourceMode::PpmEveryBodyLoops), _)) = sess.opts.pretty {
+ should_loop |= true;
+ }
+ if should_loop {
+ util::ReplaceBodyWithLoop::new(&mut resolver).visit_crate(&mut krate);
}
let has_proc_macro_decls = time(sess, "AST validation", || {
) -> Result<hir::map::Forest> {
// Lower AST to HIR.
let hir_forest = time(sess, "lowering AST -> HIR", || {
- let nt_to_tokenstream = syntax::parse::nt_to_tokenstream;
+ let nt_to_tokenstream = rustc_parse::nt_to_tokenstream;
let hir_crate = lower_crate(sess, &dep_graph, &krate, resolver, nt_to_tokenstream);
if sess.opts.debugging_opts.hir_stats {
let codegen_backend = compiler.codegen_backend().clone();
let crate_name = crate_name.to_string();
let defs = mem::take(&mut resolver_outputs.definitions);
+ let override_queries = compiler.override_queries;
let ((), result) = BoxedGlobalCtxt::new(static move || {
let sess = &*sess;
default_provide_extern(&mut extern_providers);
codegen_backend.provide_extern(&mut extern_providers);
+ if let Some(callback) = override_queries {
+ callback(sess, &mut local_providers, &mut extern_providers);
+ }
+
let gcx = TyCtxt::create_global_ctxt(
sess,
lint_store,
tcx.ensure().check_mod_loops(local_def_id);
tcx.ensure().check_mod_attrs(local_def_id);
tcx.ensure().check_mod_unstable_api_usage(local_def_id);
+ tcx.ensure().check_mod_const_bodies(local_def_id);
});
});
});