Skip to content

Commit b062128

Browse files
committed
rustc: fix fallout from using ptr::P.
1 parent d379ad1 commit b062128

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+1956
-2070
lines changed

src/librustc/driver/driver.rs

Lines changed: 57 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ use std::io::fs;
3535
use std::os;
3636
use arena::TypedArena;
3737
use syntax::ast;
38+
use syntax::ast_map;
3839
use syntax::attr;
3940
use syntax::attr::{AttrMetaMethods};
4041
use syntax::diagnostics;
@@ -65,7 +66,7 @@ pub fn compile_input(sess: Session,
6566
// large chunks of memory alive and we want to free them as soon as
6667
// possible to keep the peak memory usage low
6768
let (outputs, trans, sess) = {
68-
let (outputs, expanded_crate, ast_map, id) = {
69+
let (outputs, expanded_crate, id) = {
6970
let krate = phase_1_parse_input(&sess, cfg, input);
7071
if stop_after_phase_1(&sess) { return; }
7172
let outputs = build_output_filenames(input,
@@ -75,25 +76,28 @@ pub fn compile_input(sess: Session,
7576
&sess);
7677
let id = link::find_crate_name(Some(&sess), krate.attrs.as_slice(),
7778
input);
78-
let (expanded_crate, ast_map)
79+
let expanded_crate
7980
= match phase_2_configure_and_expand(&sess, krate, id.as_slice(),
8081
addl_plugins) {
8182
None => return,
82-
Some(p) => p,
83+
Some(k) => k
8384
};
8485

85-
(outputs, expanded_crate, ast_map, id)
86+
(outputs, expanded_crate, id)
8687
};
88+
89+
let mut forest = ast_map::Forest::new(expanded_crate);
90+
let ast_map = assign_node_ids_and_map(&sess, &mut forest);
91+
8792
write_out_deps(&sess, input, &outputs, id.as_slice());
8893

8994
if stop_after_phase_2(&sess) { return; }
9095

9196
let type_arena = TypedArena::new();
92-
let analysis = phase_3_run_analysis_passes(sess, &expanded_crate,
93-
ast_map, &type_arena, id);
94-
phase_save_analysis(&analysis.ty_cx.sess, &expanded_crate, &analysis, outdir);
97+
let analysis = phase_3_run_analysis_passes(sess, ast_map, &type_arena, id);
98+
phase_save_analysis(&analysis.ty_cx.sess, analysis.ty_cx.map.krate(), &analysis, outdir);
9599
if stop_after_phase_3(&analysis.ty_cx.sess) { return; }
96-
let (tcx, trans) = phase_4_translate_to_llvm(expanded_crate, analysis);
100+
let (tcx, trans) = phase_4_translate_to_llvm(analysis);
97101

98102
// Discard interned strings as they are no longer required.
99103
token::get_ident_interner().clear();
@@ -182,7 +186,7 @@ pub fn phase_2_configure_and_expand(sess: &Session,
182186
mut krate: ast::Crate,
183187
crate_name: &str,
184188
addl_plugins: Option<Plugins>)
185-
-> Option<(ast::Crate, syntax::ast_map::Map)> {
189+
-> Option<ast::Crate> {
186190
let time_passes = sess.time_passes();
187191

188192
*sess.crate_types.borrow_mut() =
@@ -294,20 +298,37 @@ pub fn phase_2_configure_and_expand(sess: &Session,
294298
krate = time(time_passes, "prelude injection", krate, |krate|
295299
front::std_inject::maybe_inject_prelude(sess, krate));
296300

297-
let (krate, map) = time(time_passes, "assigning node ids and indexing ast", krate, |krate|
298-
front::assign_node_ids_and_map::assign_node_ids_and_map(sess, krate));
301+
time(time_passes, "checking that all macro invocations are gone", &krate, |krate|
302+
syntax::ext::expand::check_for_macros(&sess.parse_sess, krate));
303+
304+
Some(krate)
305+
}
306+
307+
pub fn assign_node_ids_and_map<'ast>(sess: &Session,
308+
forest: &'ast mut ast_map::Forest)
309+
-> ast_map::Map<'ast> {
310+
struct NodeIdAssigner<'a> {
311+
sess: &'a Session
312+
}
313+
314+
impl<'a> ast_map::FoldOps for NodeIdAssigner<'a> {
315+
fn new_id(&self, old_id: ast::NodeId) -> ast::NodeId {
316+
assert_eq!(old_id, ast::DUMMY_NODE_ID);
317+
self.sess.next_node_id()
318+
}
319+
}
320+
321+
let map = time(sess.time_passes(), "assigning node ids and indexing ast", forest, |forest|
322+
ast_map::map_crate(forest, NodeIdAssigner { sess: sess }));
299323

300324
if sess.opts.debugging_opts & config::AST_JSON != 0 {
301325
let mut stdout = io::BufferedWriter::new(io::stdout());
302326
let mut json = json::PrettyEncoder::new(&mut stdout);
303327
// unwrapping so IoError isn't ignored
304-
krate.encode(&mut json).unwrap();
328+
map.krate().encode(&mut json).unwrap();
305329
}
306330

307-
time(time_passes, "checking that all macro invocations are gone", &krate, |krate|
308-
syntax::ext::expand::check_for_macros(&sess.parse_sess, krate));
309-
310-
Some((krate, map))
331+
map
311332
}
312333

313334
pub struct CrateAnalysis<'tcx> {
@@ -324,11 +345,11 @@ pub struct CrateAnalysis<'tcx> {
324345
/// miscellaneous analysis passes on the crate. Return various
325346
/// structures carrying the results of the analysis.
326347
pub fn phase_3_run_analysis_passes<'tcx>(sess: Session,
327-
krate: &ast::Crate,
328-
ast_map: syntax::ast_map::Map,
348+
ast_map: ast_map::Map<'tcx>,
329349
type_arena: &'tcx TypedArena<ty::t_box_>,
330350
name: String) -> CrateAnalysis<'tcx> {
331351
let time_passes = sess.time_passes();
352+
let krate = ast_map.krate();
332353

333354
time(time_passes, "external crate/lib resolution", (), |_|
334355
creader::read_crates(&sess, krate));
@@ -353,7 +374,7 @@ pub fn phase_3_run_analysis_passes<'tcx>(sess: Session,
353374
|_| middle::resolve_lifetime::krate(&sess, krate));
354375

355376
time(time_passes, "looking for entry point", (),
356-
|_| middle::entry::find_entry_point(&sess, krate, &ast_map));
377+
|_| middle::entry::find_entry_point(&sess, &ast_map));
357378

358379
sess.plugin_registrar_fn.set(
359380
time(time_passes, "looking for plugin registrar", (), |_|
@@ -385,43 +406,43 @@ pub fn phase_3_run_analysis_passes<'tcx>(sess: Session,
385406
stability_index);
386407

387408
// passes are timed inside typeck
388-
typeck::check_crate(&ty_cx, trait_map, krate);
409+
typeck::check_crate(&ty_cx, trait_map);
389410

390411
time(time_passes, "check static items", (), |_|
391-
middle::check_static::check_crate(&ty_cx, krate));
412+
middle::check_static::check_crate(&ty_cx));
392413

393414
// These next two const passes can probably be merged
394415
time(time_passes, "const marking", (), |_|
395-
middle::const_eval::process_crate(krate, &ty_cx));
416+
middle::const_eval::process_crate(&ty_cx));
396417

397418
time(time_passes, "const checking", (), |_|
398-
middle::check_const::check_crate(krate, &ty_cx));
419+
middle::check_const::check_crate(&ty_cx));
399420

400421
let maps = (external_exports, last_private_map);
401422
let (exported_items, public_items) =
402423
time(time_passes, "privacy checking", maps, |(a, b)|
403-
middle::privacy::check_crate(&ty_cx, &exp_map2, a, b, krate));
424+
middle::privacy::check_crate(&ty_cx, &exp_map2, a, b));
404425

405426
time(time_passes, "intrinsic checking", (), |_|
406-
middle::intrinsicck::check_crate(&ty_cx, krate));
427+
middle::intrinsicck::check_crate(&ty_cx));
407428

408429
time(time_passes, "effect checking", (), |_|
409-
middle::effect::check_crate(&ty_cx, krate));
430+
middle::effect::check_crate(&ty_cx));
410431

411432
time(time_passes, "match checking", (), |_|
412-
middle::check_match::check_crate(&ty_cx, krate));
433+
middle::check_match::check_crate(&ty_cx));
413434

414435
time(time_passes, "liveness checking", (), |_|
415-
middle::liveness::check_crate(&ty_cx, krate));
436+
middle::liveness::check_crate(&ty_cx));
416437

417438
time(time_passes, "borrow checking", (), |_|
418-
middle::borrowck::check_crate(&ty_cx, krate));
439+
middle::borrowck::check_crate(&ty_cx));
419440

420441
time(time_passes, "rvalue checking", (), |_|
421442
middle::check_rvalues::check_crate(&ty_cx, krate));
422443

423444
time(time_passes, "kind checking", (), |_|
424-
kind::check_crate(&ty_cx, krate));
445+
kind::check_crate(&ty_cx));
425446

426447
let reachable_map =
427448
time(time_passes, "reachability checking", (), |_|
@@ -430,12 +451,11 @@ pub fn phase_3_run_analysis_passes<'tcx>(sess: Session,
430451
time(time_passes, "death checking", (), |_| {
431452
middle::dead::check_crate(&ty_cx,
432453
&exported_items,
433-
&reachable_map,
434-
krate)
454+
&reachable_map)
435455
});
436456

437457
time(time_passes, "lint checking", (), |_|
438-
lint::check_crate(&ty_cx, krate, &exported_items));
458+
lint::check_crate(&ty_cx, &exported_items));
439459

440460
CrateAnalysis {
441461
exp_map2: exp_map2,
@@ -475,16 +495,16 @@ pub struct CrateTranslation {
475495

476496
/// Run the translation phase to LLVM, after which the AST and analysis can
477497
/// be discarded.
478-
pub fn phase_4_translate_to_llvm(krate: ast::Crate,
479-
analysis: CrateAnalysis) -> (ty::ctxt, CrateTranslation) {
498+
pub fn phase_4_translate_to_llvm<'tcx>(analysis: CrateAnalysis<'tcx>)
499+
-> (ty::ctxt<'tcx>, CrateTranslation) {
480500
let time_passes = analysis.ty_cx.sess.time_passes();
481501

482502
time(time_passes, "resolving dependency formats", (), |_|
483503
dependency_format::calculate(&analysis.ty_cx));
484504

485505
// Option dance to work around the lack of stack once closures.
486-
time(time_passes, "translation", (krate, analysis), |(krate, analysis)|
487-
trans::base::trans_crate(krate, analysis))
506+
time(time_passes, "translation", analysis, |analysis|
507+
trans::base::trans_crate(analysis))
488508
}
489509

490510
/// Run LLVM itself, producing a bitcode file, assembly file or object file

0 commit comments

Comments
 (0)