Skip to content

Commit 2f28737

Browse files
committed
Move AST crate.
1 parent c520cf2 commit 2f28737

File tree

4 files changed

+21
-29
lines changed

4 files changed

+21
-29
lines changed

compiler/rustc_driver/src/lib.rs

+2-9
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ use std::ffi::OsString;
4646
use std::fs;
4747
use std::io::{self, Read, Write};
4848
use std::lazy::SyncLazy;
49-
use std::mem;
5049
use std::panic::{self, catch_unwind};
5150
use std::path::PathBuf;
5251
use std::process::{self, Command, Stdio};
@@ -316,12 +315,12 @@ fn run_compiler(
316315

317316
if let Some(ppm) = &sess.opts.pretty {
318317
if ppm.needs_ast_map() {
318+
let expanded_crate = { &queries.expansion()?.peek().0 };
319319
queries.global_ctxt()?.peek_mut().enter(|tcx| {
320-
let expanded_crate = queries.expansion()?.take().0;
321320
pretty::print_after_hir_lowering(
322321
tcx,
323322
compiler.input(),
324-
&expanded_crate,
323+
expanded_crate,
325324
*ppm,
326325
compiler.output_file().as_ref().map(|p| &**p),
327326
);
@@ -377,12 +376,6 @@ fn run_compiler(
377376

378377
queries.global_ctxt()?;
379378

380-
// Drop AST after creating GlobalCtxt to free memory
381-
{
382-
let _timer = sess.prof.generic_activity("drop_ast");
383-
mem::drop(queries.expansion()?.take());
384-
}
385-
386379
if sess.opts.debugging_opts.no_analysis || sess.opts.debugging_opts.ast_json {
387380
return early_exit();
388381
}

compiler/rustc_interface/src/passes.rs

+8-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use rustc_ast::{self as ast, visit};
77
use rustc_codegen_ssa::back::link::emit_metadata;
88
use rustc_codegen_ssa::traits::CodegenBackend;
99
use rustc_data_structures::parallel;
10-
use rustc_data_structures::steal::Steal;
1110
use rustc_data_structures::sync::{par_iter, Lrc, OnceCell, ParallelIterator, WorkerLocal};
1211
use rustc_data_structures::temp_dir::MaybeTempDir;
1312
use rustc_errors::{ErrorReported, PResult};
@@ -458,7 +457,7 @@ pub fn lower_to_hir<'res, 'tcx>(
458457
sess: &'tcx Session,
459458
lint_store: &LintStore,
460459
resolver: &'res mut Resolver<'_>,
461-
krate: &'res ast::Crate,
460+
krate: ast::Crate,
462461
arena: &'tcx rustc_ast_lowering::Arena<'tcx>,
463462
) -> &'tcx Crate<'tcx> {
464463
// Lower AST to HIR.
@@ -485,6 +484,9 @@ pub fn lower_to_hir<'res, 'tcx>(
485484
)
486485
});
487486

487+
// Drop AST to free memory
488+
sess.time("drop_ast", || std::mem::drop(krate));
489+
488490
// Discard hygiene data, which isn't required after lowering to HIR.
489491
if !sess.opts.debugging_opts.keep_hygiene_data {
490492
rustc_span::hygiene::clear_syntax_context_map();
@@ -577,7 +579,7 @@ fn escape_dep_env(symbol: Symbol) -> String {
577579

578580
fn write_out_deps(
579581
sess: &Session,
580-
boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>,
582+
boxed_resolver: &RefCell<BoxedResolver>,
581583
outputs: &OutputFilenames,
582584
out_filenames: &[PathBuf],
583585
) {
@@ -604,7 +606,7 @@ fn write_out_deps(
604606
}
605607

606608
if sess.binary_dep_depinfo() {
607-
boxed_resolver.borrow().borrow_mut().access(|resolver| {
609+
boxed_resolver.borrow_mut().access(|resolver| {
608610
for cnum in resolver.cstore().crates_untracked() {
609611
let source = resolver.cstore().crate_source_untracked(cnum);
610612
if let Some((path, _)) = source.dylib {
@@ -673,7 +675,7 @@ pub fn prepare_outputs(
673675
sess: &Session,
674676
compiler: &Compiler,
675677
krate: &ast::Crate,
676-
boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>,
678+
boxed_resolver: &RefCell<BoxedResolver>,
677679
crate_name: &str,
678680
) -> Result<OutputFilenames> {
679681
let _timer = sess.timer("prepare_outputs");
@@ -777,7 +779,7 @@ impl<'tcx> QueryContext<'tcx> {
777779
pub fn create_global_ctxt<'tcx>(
778780
compiler: &'tcx Compiler,
779781
lint_store: Lrc<LintStore>,
780-
krate: &ast::Crate,
782+
krate: ast::Crate,
781783
dep_graph: DepGraph,
782784
resolver: Rc<RefCell<BoxedResolver>>,
783785
outputs: OutputFilenames,

compiler/rustc_interface/src/queries.rs

+9-11
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use crate::passes::{self, BoxedResolver, QueryContext};
33

44
use rustc_ast as ast;
55
use rustc_codegen_ssa::traits::CodegenBackend;
6-
use rustc_data_structures::steal::Steal;
76
use rustc_data_structures::svh::Svh;
87
use rustc_data_structures::sync::{Lrc, OnceCell, WorkerLocal};
98
use rustc_errors::ErrorReported;
@@ -80,7 +79,7 @@ pub struct Queries<'tcx> {
8079
parse: Query<ast::Crate>,
8180
crate_name: Query<String>,
8281
register_plugins: Query<(ast::Crate, Lrc<LintStore>)>,
83-
expansion: Query<(ast::Crate, Steal<Rc<RefCell<BoxedResolver>>>, Lrc<LintStore>)>,
82+
expansion: Query<(ast::Crate, Rc<RefCell<BoxedResolver>>, Lrc<LintStore>)>,
8483
dep_graph: Query<DepGraph>,
8584
prepare_outputs: Query<OutputFilenames>,
8685
global_ctxt: Query<QueryContext<'tcx>>,
@@ -168,7 +167,7 @@ impl<'tcx> Queries<'tcx> {
168167

169168
pub fn expansion(
170169
&self,
171-
) -> Result<&Query<(ast::Crate, Steal<Rc<RefCell<BoxedResolver>>>, Lrc<LintStore>)>> {
170+
) -> Result<&Query<(ast::Crate, Rc<RefCell<BoxedResolver>>, Lrc<LintStore>)>> {
172171
tracing::trace!("expansion");
173172
self.expansion.compute(|| {
174173
let crate_name = self.crate_name()?.peek().clone();
@@ -184,7 +183,7 @@ impl<'tcx> Queries<'tcx> {
184183
let krate = resolver.access(|resolver| {
185184
passes::configure_and_expand(&sess, &lint_store, krate, &crate_name, resolver)
186185
})?;
187-
Ok((krate, Steal::new(Rc::new(RefCell::new(resolver))), lint_store))
186+
Ok((krate, Rc::new(RefCell::new(resolver)), lint_store))
188187
})
189188
}
190189

@@ -206,14 +205,13 @@ impl<'tcx> Queries<'tcx> {
206205

207206
pub fn prepare_outputs(&self) -> Result<&Query<OutputFilenames>> {
208207
self.prepare_outputs.compute(|| {
209-
let expansion_result = self.expansion()?;
210-
let (krate, boxed_resolver, _) = &*expansion_result.peek();
208+
let (krate, boxed_resolver, _) = &*self.expansion()?.peek();
211209
let crate_name = self.crate_name()?.peek();
212210
passes::prepare_outputs(
213211
self.session(),
214212
self.compiler,
215-
&krate,
216-
&boxed_resolver,
213+
krate,
214+
&*boxed_resolver,
217215
&crate_name,
218216
)
219217
})
@@ -223,14 +221,14 @@ impl<'tcx> Queries<'tcx> {
223221
self.global_ctxt.compute(|| {
224222
let crate_name = self.crate_name()?.peek().clone();
225223
let outputs = self.prepare_outputs()?.peek().clone();
226-
let (ref krate, ref resolver, ref lint_store) = &*self.expansion()?.peek();
227224
let dep_graph = self.dep_graph()?.peek().clone();
225+
let (krate, resolver, lint_store) = self.expansion()?.take();
228226
Ok(passes::create_global_ctxt(
229227
self.compiler,
230-
lint_store.clone(),
228+
lint_store,
231229
krate,
232230
dep_graph,
233-
resolver.steal(),
231+
resolver,
234232
outputs,
235233
&crate_name,
236234
&self.queries,

src/librustdoc/core.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -303,9 +303,8 @@ crate fn create_resolver<'a>(
303303
queries: &Queries<'a>,
304304
sess: &Session,
305305
) -> Rc<RefCell<interface::BoxedResolver>> {
306-
let parts = abort_on_err(queries.expansion(), sess).peek();
307-
let (krate, resolver, _) = &*parts;
308-
let resolver = resolver.borrow().clone();
306+
let (krate, resolver, _) = &*abort_on_err(queries.expansion(), sess).peek();
307+
let resolver = resolver.clone();
309308

310309
let mut loader = crate::passes::collect_intra_doc_links::IntraLinkCrateLoader::new(resolver);
311310
ast::visit::walk_crate(&mut loader, krate);

0 commit comments

Comments
 (0)