Move AST crate.
This commit is contained in:
parent
c520cf2253
commit
2f28737ebe
4 changed files with 21 additions and 29 deletions
|
@ -46,7 +46,6 @@ use std::ffi::OsString;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io::{self, Read, Write};
|
use std::io::{self, Read, Write};
|
||||||
use std::lazy::SyncLazy;
|
use std::lazy::SyncLazy;
|
||||||
use std::mem;
|
|
||||||
use std::panic::{self, catch_unwind};
|
use std::panic::{self, catch_unwind};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::process::{self, Command, Stdio};
|
use std::process::{self, Command, Stdio};
|
||||||
|
@ -316,12 +315,12 @@ fn run_compiler(
|
||||||
|
|
||||||
if let Some(ppm) = &sess.opts.pretty {
|
if let Some(ppm) = &sess.opts.pretty {
|
||||||
if ppm.needs_ast_map() {
|
if ppm.needs_ast_map() {
|
||||||
|
let expanded_crate = { &queries.expansion()?.peek().0 };
|
||||||
queries.global_ctxt()?.peek_mut().enter(|tcx| {
|
queries.global_ctxt()?.peek_mut().enter(|tcx| {
|
||||||
let expanded_crate = queries.expansion()?.take().0;
|
|
||||||
pretty::print_after_hir_lowering(
|
pretty::print_after_hir_lowering(
|
||||||
tcx,
|
tcx,
|
||||||
compiler.input(),
|
compiler.input(),
|
||||||
&expanded_crate,
|
expanded_crate,
|
||||||
*ppm,
|
*ppm,
|
||||||
compiler.output_file().as_ref().map(|p| &**p),
|
compiler.output_file().as_ref().map(|p| &**p),
|
||||||
);
|
);
|
||||||
|
@ -377,12 +376,6 @@ fn run_compiler(
|
||||||
|
|
||||||
queries.global_ctxt()?;
|
queries.global_ctxt()?;
|
||||||
|
|
||||||
// Drop AST after creating GlobalCtxt to free memory
|
|
||||||
{
|
|
||||||
let _timer = sess.prof.generic_activity("drop_ast");
|
|
||||||
mem::drop(queries.expansion()?.take());
|
|
||||||
}
|
|
||||||
|
|
||||||
if sess.opts.debugging_opts.no_analysis || sess.opts.debugging_opts.ast_json {
|
if sess.opts.debugging_opts.no_analysis || sess.opts.debugging_opts.ast_json {
|
||||||
return early_exit();
|
return early_exit();
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ use rustc_ast::{self as ast, visit};
|
||||||
use rustc_codegen_ssa::back::link::emit_metadata;
|
use rustc_codegen_ssa::back::link::emit_metadata;
|
||||||
use rustc_codegen_ssa::traits::CodegenBackend;
|
use rustc_codegen_ssa::traits::CodegenBackend;
|
||||||
use rustc_data_structures::parallel;
|
use rustc_data_structures::parallel;
|
||||||
use rustc_data_structures::steal::Steal;
|
|
||||||
use rustc_data_structures::sync::{par_iter, Lrc, OnceCell, ParallelIterator, WorkerLocal};
|
use rustc_data_structures::sync::{par_iter, Lrc, OnceCell, ParallelIterator, WorkerLocal};
|
||||||
use rustc_data_structures::temp_dir::MaybeTempDir;
|
use rustc_data_structures::temp_dir::MaybeTempDir;
|
||||||
use rustc_errors::{ErrorReported, PResult};
|
use rustc_errors::{ErrorReported, PResult};
|
||||||
|
@ -458,7 +457,7 @@ pub fn lower_to_hir<'res, 'tcx>(
|
||||||
sess: &'tcx Session,
|
sess: &'tcx Session,
|
||||||
lint_store: &LintStore,
|
lint_store: &LintStore,
|
||||||
resolver: &'res mut Resolver<'_>,
|
resolver: &'res mut Resolver<'_>,
|
||||||
krate: &'res ast::Crate,
|
krate: ast::Crate,
|
||||||
arena: &'tcx rustc_ast_lowering::Arena<'tcx>,
|
arena: &'tcx rustc_ast_lowering::Arena<'tcx>,
|
||||||
) -> &'tcx Crate<'tcx> {
|
) -> &'tcx Crate<'tcx> {
|
||||||
// Lower AST to HIR.
|
// Lower AST to HIR.
|
||||||
|
@ -485,6 +484,9 @@ pub fn lower_to_hir<'res, 'tcx>(
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Drop AST to free memory
|
||||||
|
sess.time("drop_ast", || std::mem::drop(krate));
|
||||||
|
|
||||||
// Discard hygiene data, which isn't required after lowering to HIR.
|
// Discard hygiene data, which isn't required after lowering to HIR.
|
||||||
if !sess.opts.debugging_opts.keep_hygiene_data {
|
if !sess.opts.debugging_opts.keep_hygiene_data {
|
||||||
rustc_span::hygiene::clear_syntax_context_map();
|
rustc_span::hygiene::clear_syntax_context_map();
|
||||||
|
@ -577,7 +579,7 @@ fn escape_dep_env(symbol: Symbol) -> String {
|
||||||
|
|
||||||
fn write_out_deps(
|
fn write_out_deps(
|
||||||
sess: &Session,
|
sess: &Session,
|
||||||
boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>,
|
boxed_resolver: &RefCell<BoxedResolver>,
|
||||||
outputs: &OutputFilenames,
|
outputs: &OutputFilenames,
|
||||||
out_filenames: &[PathBuf],
|
out_filenames: &[PathBuf],
|
||||||
) {
|
) {
|
||||||
|
@ -604,7 +606,7 @@ fn write_out_deps(
|
||||||
}
|
}
|
||||||
|
|
||||||
if sess.binary_dep_depinfo() {
|
if sess.binary_dep_depinfo() {
|
||||||
boxed_resolver.borrow().borrow_mut().access(|resolver| {
|
boxed_resolver.borrow_mut().access(|resolver| {
|
||||||
for cnum in resolver.cstore().crates_untracked() {
|
for cnum in resolver.cstore().crates_untracked() {
|
||||||
let source = resolver.cstore().crate_source_untracked(cnum);
|
let source = resolver.cstore().crate_source_untracked(cnum);
|
||||||
if let Some((path, _)) = source.dylib {
|
if let Some((path, _)) = source.dylib {
|
||||||
|
@ -673,7 +675,7 @@ pub fn prepare_outputs(
|
||||||
sess: &Session,
|
sess: &Session,
|
||||||
compiler: &Compiler,
|
compiler: &Compiler,
|
||||||
krate: &ast::Crate,
|
krate: &ast::Crate,
|
||||||
boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>,
|
boxed_resolver: &RefCell<BoxedResolver>,
|
||||||
crate_name: &str,
|
crate_name: &str,
|
||||||
) -> Result<OutputFilenames> {
|
) -> Result<OutputFilenames> {
|
||||||
let _timer = sess.timer("prepare_outputs");
|
let _timer = sess.timer("prepare_outputs");
|
||||||
|
@ -777,7 +779,7 @@ impl<'tcx> QueryContext<'tcx> {
|
||||||
pub fn create_global_ctxt<'tcx>(
|
pub fn create_global_ctxt<'tcx>(
|
||||||
compiler: &'tcx Compiler,
|
compiler: &'tcx Compiler,
|
||||||
lint_store: Lrc<LintStore>,
|
lint_store: Lrc<LintStore>,
|
||||||
krate: &ast::Crate,
|
krate: ast::Crate,
|
||||||
dep_graph: DepGraph,
|
dep_graph: DepGraph,
|
||||||
resolver: Rc<RefCell<BoxedResolver>>,
|
resolver: Rc<RefCell<BoxedResolver>>,
|
||||||
outputs: OutputFilenames,
|
outputs: OutputFilenames,
|
||||||
|
|
|
@ -3,7 +3,6 @@ use crate::passes::{self, BoxedResolver, QueryContext};
|
||||||
|
|
||||||
use rustc_ast as ast;
|
use rustc_ast as ast;
|
||||||
use rustc_codegen_ssa::traits::CodegenBackend;
|
use rustc_codegen_ssa::traits::CodegenBackend;
|
||||||
use rustc_data_structures::steal::Steal;
|
|
||||||
use rustc_data_structures::svh::Svh;
|
use rustc_data_structures::svh::Svh;
|
||||||
use rustc_data_structures::sync::{Lrc, OnceCell, WorkerLocal};
|
use rustc_data_structures::sync::{Lrc, OnceCell, WorkerLocal};
|
||||||
use rustc_errors::ErrorReported;
|
use rustc_errors::ErrorReported;
|
||||||
|
@ -80,7 +79,7 @@ pub struct Queries<'tcx> {
|
||||||
parse: Query<ast::Crate>,
|
parse: Query<ast::Crate>,
|
||||||
crate_name: Query<String>,
|
crate_name: Query<String>,
|
||||||
register_plugins: Query<(ast::Crate, Lrc<LintStore>)>,
|
register_plugins: Query<(ast::Crate, Lrc<LintStore>)>,
|
||||||
expansion: Query<(ast::Crate, Steal<Rc<RefCell<BoxedResolver>>>, Lrc<LintStore>)>,
|
expansion: Query<(ast::Crate, Rc<RefCell<BoxedResolver>>, Lrc<LintStore>)>,
|
||||||
dep_graph: Query<DepGraph>,
|
dep_graph: Query<DepGraph>,
|
||||||
prepare_outputs: Query<OutputFilenames>,
|
prepare_outputs: Query<OutputFilenames>,
|
||||||
global_ctxt: Query<QueryContext<'tcx>>,
|
global_ctxt: Query<QueryContext<'tcx>>,
|
||||||
|
@ -168,7 +167,7 @@ impl<'tcx> Queries<'tcx> {
|
||||||
|
|
||||||
pub fn expansion(
|
pub fn expansion(
|
||||||
&self,
|
&self,
|
||||||
) -> Result<&Query<(ast::Crate, Steal<Rc<RefCell<BoxedResolver>>>, Lrc<LintStore>)>> {
|
) -> Result<&Query<(ast::Crate, Rc<RefCell<BoxedResolver>>, Lrc<LintStore>)>> {
|
||||||
tracing::trace!("expansion");
|
tracing::trace!("expansion");
|
||||||
self.expansion.compute(|| {
|
self.expansion.compute(|| {
|
||||||
let crate_name = self.crate_name()?.peek().clone();
|
let crate_name = self.crate_name()?.peek().clone();
|
||||||
|
@ -184,7 +183,7 @@ impl<'tcx> Queries<'tcx> {
|
||||||
let krate = resolver.access(|resolver| {
|
let krate = resolver.access(|resolver| {
|
||||||
passes::configure_and_expand(&sess, &lint_store, krate, &crate_name, resolver)
|
passes::configure_and_expand(&sess, &lint_store, krate, &crate_name, resolver)
|
||||||
})?;
|
})?;
|
||||||
Ok((krate, Steal::new(Rc::new(RefCell::new(resolver))), lint_store))
|
Ok((krate, Rc::new(RefCell::new(resolver)), lint_store))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,14 +205,13 @@ impl<'tcx> Queries<'tcx> {
|
||||||
|
|
||||||
pub fn prepare_outputs(&self) -> Result<&Query<OutputFilenames>> {
|
pub fn prepare_outputs(&self) -> Result<&Query<OutputFilenames>> {
|
||||||
self.prepare_outputs.compute(|| {
|
self.prepare_outputs.compute(|| {
|
||||||
let expansion_result = self.expansion()?;
|
let (krate, boxed_resolver, _) = &*self.expansion()?.peek();
|
||||||
let (krate, boxed_resolver, _) = &*expansion_result.peek();
|
|
||||||
let crate_name = self.crate_name()?.peek();
|
let crate_name = self.crate_name()?.peek();
|
||||||
passes::prepare_outputs(
|
passes::prepare_outputs(
|
||||||
self.session(),
|
self.session(),
|
||||||
self.compiler,
|
self.compiler,
|
||||||
&krate,
|
krate,
|
||||||
&boxed_resolver,
|
&*boxed_resolver,
|
||||||
&crate_name,
|
&crate_name,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
@ -223,14 +221,14 @@ impl<'tcx> Queries<'tcx> {
|
||||||
self.global_ctxt.compute(|| {
|
self.global_ctxt.compute(|| {
|
||||||
let crate_name = self.crate_name()?.peek().clone();
|
let crate_name = self.crate_name()?.peek().clone();
|
||||||
let outputs = self.prepare_outputs()?.peek().clone();
|
let outputs = self.prepare_outputs()?.peek().clone();
|
||||||
let (ref krate, ref resolver, ref lint_store) = &*self.expansion()?.peek();
|
|
||||||
let dep_graph = self.dep_graph()?.peek().clone();
|
let dep_graph = self.dep_graph()?.peek().clone();
|
||||||
|
let (krate, resolver, lint_store) = self.expansion()?.take();
|
||||||
Ok(passes::create_global_ctxt(
|
Ok(passes::create_global_ctxt(
|
||||||
self.compiler,
|
self.compiler,
|
||||||
lint_store.clone(),
|
lint_store,
|
||||||
krate,
|
krate,
|
||||||
dep_graph,
|
dep_graph,
|
||||||
resolver.steal(),
|
resolver,
|
||||||
outputs,
|
outputs,
|
||||||
&crate_name,
|
&crate_name,
|
||||||
&self.queries,
|
&self.queries,
|
||||||
|
|
|
@ -303,9 +303,8 @@ crate fn create_resolver<'a>(
|
||||||
queries: &Queries<'a>,
|
queries: &Queries<'a>,
|
||||||
sess: &Session,
|
sess: &Session,
|
||||||
) -> Rc<RefCell<interface::BoxedResolver>> {
|
) -> Rc<RefCell<interface::BoxedResolver>> {
|
||||||
let parts = abort_on_err(queries.expansion(), sess).peek();
|
let (krate, resolver, _) = &*abort_on_err(queries.expansion(), sess).peek();
|
||||||
let (krate, resolver, _) = &*parts;
|
let resolver = resolver.clone();
|
||||||
let resolver = resolver.borrow().clone();
|
|
||||||
|
|
||||||
let mut loader = crate::passes::collect_intra_doc_links::IntraLinkCrateLoader::new(resolver);
|
let mut loader = crate::passes::collect_intra_doc_links::IntraLinkCrateLoader::new(resolver);
|
||||||
ast::visit::walk_crate(&mut loader, krate);
|
ast::visit::walk_crate(&mut loader, krate);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue