Skip to content

Commit e4ff9f7

Browse files
committed
Port a bunch of code new-visitor; all of these ports were
straightforward uses of `visit_all_items`. In some cases I had to remove empty `visit_item` calls that were just to suppress visiting nested items.
1 parent e14562d commit e4ff9f7

Some content is hidden

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

45 files changed

+286
-345
lines changed

src/librustc/metadata/creader.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ use syntax::attr;
3737
use syntax::attr::AttrMetaMethods;
3838
use syntax::parse::token::InternedString;
3939
use syntax::util::small_vector::SmallVector;
40-
use rustc_front::visit;
40+
use rustc_front::intravisit::Visitor;
4141
use rustc_front::hir;
4242
use log;
4343

@@ -53,10 +53,9 @@ pub struct CrateReader<'a> {
5353
foreign_item_map: FnvHashMap<String, Vec<ast::NodeId>>,
5454
}
5555

56-
impl<'a, 'b, 'v> visit::Visitor<'v> for LocalCrateReader<'a, 'b> {
57-
fn visit_item(&mut self, a: &hir::Item) {
56+
impl<'a, 'b, 'hir> Visitor<'hir> for LocalCrateReader<'a, 'b> {
57+
fn visit_item(&mut self, a: &'hir hir::Item) {
5858
self.process_item(a);
59-
visit::walk_item(self, a);
6059
}
6160
}
6261

@@ -716,7 +715,7 @@ impl<'a, 'b> LocalCrateReader<'a, 'b> {
716715
// etc.
717716
pub fn read_crates(&mut self, krate: &hir::Crate) {
718717
self.process_crate(krate);
719-
visit::walk_crate(self, krate);
718+
krate.visit_all_items(self);
720719
self.creader.inject_allocator_crate();
721720

722721
if log_enabled!(log::INFO) {

src/librustc/metadata/encoder.rs

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ use syntax;
4646
use rbml::writer::Encoder;
4747

4848
use rustc_front::hir;
49-
use rustc_front::visit::Visitor;
50-
use rustc_front::visit;
49+
use rustc_front::intravisit::Visitor;
50+
use rustc_front::intravisit;
5151
use front::map::{LinkedPath, PathElem, PathElems};
5252
use front::map as ast_map;
5353

@@ -431,11 +431,12 @@ fn encode_info_for_mod(ecx: &EncodeContext,
431431
debug!("(encoding info for module) encoding info for module ID {}", id);
432432

433433
// Encode info about all the module children.
434-
for item in &md.items {
434+
for item_id in &md.item_ids {
435435
rbml_w.wr_tagged_u64(tag_mod_child,
436-
def_to_u64(ecx.tcx.map.local_def_id(item.id)));
436+
def_to_u64(ecx.tcx.map.local_def_id(item_id.id)));
437437

438-
each_auxiliary_node_id(&**item, |auxiliary_node_id| {
438+
let item = ecx.tcx.map.expect_item(item_id.id);
439+
each_auxiliary_node_id(item, |auxiliary_node_id| {
439440
rbml_w.wr_tagged_u64(tag_mod_child,
440441
def_to_u64(ecx.tcx.map.local_def_id(auxiliary_node_id)));
441442
true
@@ -1468,25 +1469,26 @@ struct EncodeVisitor<'a, 'b:'a, 'c:'a, 'tcx:'c> {
14681469
index: &'a mut CrateIndex<'tcx>,
14691470
}
14701471

1471-
impl<'a, 'b, 'c, 'tcx, 'v> Visitor<'v> for EncodeVisitor<'a, 'b, 'c, 'tcx> {
1472-
fn visit_expr(&mut self, ex: &hir::Expr) {
1473-
visit::walk_expr(self, ex);
1472+
impl<'a, 'b, 'c, 'tcx> Visitor<'tcx> for EncodeVisitor<'a, 'b, 'c, 'tcx> {
1473+
fn visit_expr(&mut self, ex: &'tcx hir::Expr) {
1474+
intravisit::walk_expr(self, ex);
14741475
my_visit_expr(ex, self.rbml_w_for_visit_item, self.ecx, self.index);
14751476
}
1476-
fn visit_item(&mut self, i: &hir::Item) {
1477-
visit::walk_item(self, i);
1477+
fn visit_item(&mut self, i: &'tcx hir::Item) {
1478+
intravisit::walk_item(self, i);
14781479
my_visit_item(i, self.rbml_w_for_visit_item, self.ecx, self.index);
14791480
}
1480-
fn visit_foreign_item(&mut self, ni: &hir::ForeignItem) {
1481-
visit::walk_foreign_item(self, ni);
1481+
fn visit_foreign_item(&mut self, ni: &'tcx hir::ForeignItem) {
1482+
intravisit::walk_foreign_item(self, ni);
14821483
my_visit_foreign_item(ni, self.rbml_w_for_visit_item, self.ecx, self.index);
14831484
}
14841485
}
14851486

14861487
fn encode_info_for_items<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
1487-
rbml_w: &mut Encoder,
1488-
krate: &hir::Crate)
1488+
rbml_w: &mut Encoder)
14891489
-> CrateIndex<'tcx> {
1490+
let krate = ecx.tcx.map.krate();
1491+
14901492
let mut index = CrateIndex {
14911493
items: IndexData::new(ecx.tcx.map.num_local_def_ids()),
14921494
xrefs: FnvHashMap()
@@ -1503,11 +1505,11 @@ fn encode_info_for_items<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
15031505
syntax::parse::token::intern(&ecx.link_meta.crate_name),
15041506
hir::Public);
15051507

1506-
visit::walk_crate(&mut EncodeVisitor {
1508+
krate.visit_all_items(&mut EncodeVisitor {
15071509
index: &mut index,
15081510
ecx: ecx,
15091511
rbml_w_for_visit_item: &mut *rbml_w,
1510-
}, krate);
1512+
});
15111513

15121514
rbml_w.end_tag();
15131515
index
@@ -1735,7 +1737,7 @@ fn encode_struct_field_attrs(ecx: &EncodeContext,
17351737
}
17361738

17371739
rbml_w.start_tag(tag_struct_fields);
1738-
visit::walk_crate(&mut StructFieldVisitor { ecx: ecx, rbml_w: rbml_w }, krate);
1740+
krate.visit_all_items(&mut StructFieldVisitor { ecx: ecx, rbml_w: rbml_w });
17391741
rbml_w.end_tag();
17401742
}
17411743

@@ -1756,7 +1758,6 @@ impl<'a, 'tcx, 'v> Visitor<'v> for ImplVisitor<'a, 'tcx> {
17561758
.push(impl_id);
17571759
}
17581760
}
1759-
visit::walk_item(self, item);
17601761
}
17611762
}
17621763

@@ -1768,7 +1769,7 @@ fn encode_impls<'a>(ecx: &'a EncodeContext,
17681769
tcx: ecx.tcx,
17691770
impls: FnvHashMap()
17701771
};
1771-
visit::walk_crate(&mut visitor, krate);
1772+
krate.visit_all_items(&mut visitor);
17721773

17731774
rbml_w.start_tag(tag_impls);
17741775
for (trait_, trait_impls) in visitor.impls {
@@ -1787,11 +1788,12 @@ fn encode_misc_info(ecx: &EncodeContext,
17871788
rbml_w: &mut Encoder) {
17881789
rbml_w.start_tag(tag_misc_info);
17891790
rbml_w.start_tag(tag_misc_info_crate_items);
1790-
for item in &krate.module.items {
1791+
for item_id in &krate.module.item_ids {
17911792
rbml_w.wr_tagged_u64(tag_mod_child,
1792-
def_to_u64(ecx.tcx.map.local_def_id(item.id)));
1793+
def_to_u64(ecx.tcx.map.local_def_id(item_id.id)));
17931794

1794-
each_auxiliary_node_id(&**item, |auxiliary_node_id| {
1795+
let item = ecx.tcx.map.expect_item(item_id.id);
1796+
each_auxiliary_node_id(item, |auxiliary_node_id| {
17951797
rbml_w.wr_tagged_u64(tag_mod_child,
17961798
def_to_u64(ecx.tcx.map.local_def_id(auxiliary_node_id)));
17971799
true
@@ -2022,7 +2024,7 @@ fn encode_metadata_inner(wr: &mut Cursor<Vec<u8>>,
20222024
// Encode and index the items.
20232025
rbml_w.start_tag(tag_items);
20242026
i = rbml_w.writer.seek(SeekFrom::Current(0)).unwrap();
2025-
let index = encode_info_for_items(&ecx, &mut rbml_w, krate);
2027+
let index = encode_info_for_items(&ecx, &mut rbml_w);
20262028
stats.item_bytes = rbml_w.writer.seek(SeekFrom::Current(0)).unwrap() - i;
20272029
rbml_w.end_tag();
20282030

src/librustc/metadata/inline.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use rustc_front::hir;
1313
use rustc_front::util::IdVisitor;
1414
use syntax::ast_util::{IdRange, IdRangeComputingVisitor, IdVisitingOperation};
1515
use syntax::ptr::P;
16-
use rustc_front::visit::Visitor;
16+
use rustc_front::intravisit::Visitor;
1717
use self::InlinedItem::*;
1818

1919
/// The data we save and restore about an inlined item or method. This is not

src/librustc/middle/astencode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ fn simplify_ast(ii: InlinedItemRef) -> InlinedItem {
389389
match ii {
390390
// HACK we're not dropping items.
391391
InlinedItemRef::Item(i) => {
392-
InlinedItem::Item(fold::noop_fold_item(P(i.clone()), &mut fld))
392+
InlinedItem::Item(P(fold::noop_fold_item(i.clone(), &mut fld)))
393393
}
394394
InlinedItemRef::TraitItem(d, ti) => {
395395
InlinedItem::TraitItem(d, fold::noop_fold_trait_item(P(ti.clone()), &mut fld))

src/librustc/middle/check_const.rs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ use rustc_front::hir;
4141
use syntax::ast;
4242
use syntax::codemap::Span;
4343
use syntax::feature_gate::UnstableFeatures;
44-
use rustc_front::visit::{self, FnKind, Visitor};
44+
use rustc_front::intravisit::{self, FnKind, Visitor};
4545

4646
use std::collections::hash_map::Entry;
4747
use std::cmp::Ordering;
@@ -81,7 +81,7 @@ bitflags! {
8181
}
8282
}
8383

84-
#[derive(Copy, Clone, Eq, PartialEq)]
84+
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
8585
enum Mode {
8686
Const,
8787
ConstFn,
@@ -190,7 +190,7 @@ impl<'a, 'tcx> CheckCrateVisitor<'a, 'tcx> {
190190

191191
let qualif = self.with_mode(mode, |this| {
192192
this.with_euv(Some(fn_id), |euv| euv.walk_fn(fd, b));
193-
visit::walk_fn(this, fk, fd, b, s);
193+
intravisit::walk_fn(this, fk, fd, b, s);
194194
this.qualif
195195
});
196196

@@ -308,6 +308,7 @@ impl<'a, 'tcx> CheckCrateVisitor<'a, 'tcx> {
308308
impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> {
309309
fn visit_item(&mut self, i: &hir::Item) {
310310
debug!("visit_item(item={})", self.tcx.map.node_to_string(i.id));
311+
assert_eq!(self.mode, Mode::Var);
311312
match i.node {
312313
hir::ItemStatic(_, hir::MutImmutable, ref expr) => {
313314
self.check_static_type(&**expr);
@@ -328,7 +329,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> {
328329
}
329330
}
330331
_ => {
331-
self.with_mode(Mode::Var, |v| visit::walk_item(v, i));
332+
intravisit::walk_item(self, i);
332333
}
333334
}
334335
}
@@ -339,10 +340,10 @@ impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> {
339340
if let Some(ref expr) = *default {
340341
self.global_expr(Mode::Const, &*expr);
341342
} else {
342-
visit::walk_trait_item(self, t);
343+
intravisit::walk_trait_item(self, t);
343344
}
344345
}
345-
_ => self.with_mode(Mode::Var, |v| visit::walk_trait_item(v, t)),
346+
_ => self.with_mode(Mode::Var, |v| intravisit::walk_trait_item(v, t)),
346347
}
347348
}
348349

@@ -351,7 +352,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> {
351352
hir::ImplItemKind::Const(_, ref expr) => {
352353
self.global_expr(Mode::Const, &*expr);
353354
}
354-
_ => self.with_mode(Mode::Var, |v| visit::walk_impl_item(v, i)),
355+
_ => self.with_mode(Mode::Var, |v| intravisit::walk_impl_item(v, i)),
355356
}
356357
}
357358

@@ -386,7 +387,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> {
386387
}
387388
}
388389
}
389-
_ => visit::walk_pat(self, p)
390+
_ => intravisit::walk_pat(self, p)
390391
}
391392
}
392393

@@ -412,7 +413,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> {
412413
tail expressions", self.msg());
413414
}
414415
}
415-
visit::walk_block(self, block);
416+
intravisit::walk_block(self, block);
416417
}
417418

418419
fn visit_expr(&mut self, ex: &hir::Expr) {
@@ -464,11 +465,11 @@ impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> {
464465
if let Some(mutbl) = borrow {
465466
self.record_borrow(discr.id, mutbl);
466467
}
467-
visit::walk_expr(self, ex);
468+
intravisit::walk_expr(self, ex);
468469
}
469470
// Division by zero and overflow checking.
470471
hir::ExprBinary(op, _, _) => {
471-
visit::walk_expr(self, ex);
472+
intravisit::walk_expr(self, ex);
472473
let div_or_rem = op.node == hir::BiDiv || op.node == hir::BiRem;
473474
match node_ty.sty {
474475
ty::TyUint(_) | ty::TyInt(_) if div_or_rem => {
@@ -487,7 +488,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> {
487488
_ => {}
488489
}
489490
}
490-
_ => visit::walk_expr(self, ex)
491+
_ => intravisit::walk_expr(self, ex)
491492
}
492493

493494
// Handle borrows on (or inside the autorefs of) this expression.
@@ -837,12 +838,12 @@ fn check_adjustments<'a, 'tcx>(v: &mut CheckCrateVisitor<'a, 'tcx>, e: &hir::Exp
837838
}
838839

839840
pub fn check_crate(tcx: &ty::ctxt) {
840-
visit::walk_crate(&mut CheckCrateVisitor {
841+
tcx.map.krate().visit_all_items(&mut CheckCrateVisitor {
841842
tcx: tcx,
842843
mode: Mode::Var,
843844
qualif: ConstQualif::NOT_CONST,
844845
rvalue_borrows: NodeMap()
845-
}, tcx.map.krate());
846+
});
846847

847848
tcx.sess.abort_if_errors();
848849
}

src/librustc/middle/check_loop.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ use self::Context::*;
1212
use session::Session;
1313

1414
use syntax::codemap::Span;
15-
use rustc_front::visit::Visitor;
16-
use rustc_front::visit;
15+
use rustc_front::intravisit::{self, Visitor};
1716
use rustc_front::hir;
1817

1918
#[derive(Clone, Copy, PartialEq)]
@@ -28,12 +27,12 @@ struct CheckLoopVisitor<'a> {
2827
}
2928

3029
pub fn check_crate(sess: &Session, krate: &hir::Crate) {
31-
visit::walk_crate(&mut CheckLoopVisitor { sess: sess, cx: Normal }, krate)
30+
krate.visit_all_items(&mut CheckLoopVisitor { sess: sess, cx: Normal });
3231
}
3332

3433
impl<'a, 'v> Visitor<'v> for CheckLoopVisitor<'a> {
3534
fn visit_item(&mut self, i: &hir::Item) {
36-
self.with_context(Normal, |v| visit::walk_item(v, i));
35+
self.with_context(Normal, |v| intravisit::walk_item(v, i));
3736
}
3837

3938
fn visit_expr(&mut self, e: &hir::Expr) {
@@ -50,7 +49,7 @@ impl<'a, 'v> Visitor<'v> for CheckLoopVisitor<'a> {
5049
}
5150
hir::ExprBreak(_) => self.require_loop("break", e.span),
5251
hir::ExprAgain(_) => self.require_loop("continue", e.span),
53-
_ => visit::walk_expr(self, e)
52+
_ => intravisit::walk_expr(self, e)
5453
}
5554
}
5655
}

src/librustc/middle/check_match.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use std::iter::{FromIterator, IntoIterator, repeat};
3333

3434
use rustc_front::hir;
3535
use rustc_front::hir::Pat;
36-
use rustc_front::visit::{self, Visitor, FnKind};
36+
use rustc_front::intravisit::{self, Visitor, FnKind};
3737
use rustc_front::util as front_util;
3838
use rustc_back::slice;
3939

@@ -155,15 +155,15 @@ impl<'a, 'tcx, 'v> Visitor<'v> for MatchCheckCtxt<'a, 'tcx> {
155155
}
156156

157157
pub fn check_crate(tcx: &ty::ctxt) {
158-
visit::walk_crate(&mut MatchCheckCtxt {
158+
tcx.map.krate().visit_all_items(&mut MatchCheckCtxt {
159159
tcx: tcx,
160160
param_env: tcx.empty_parameter_environment(),
161-
}, tcx.map.krate());
161+
});
162162
tcx.sess.abort_if_errors();
163163
}
164164

165165
fn check_expr(cx: &mut MatchCheckCtxt, ex: &hir::Expr) {
166-
visit::walk_expr(cx, ex);
166+
intravisit::walk_expr(cx, ex);
167167
match ex.node {
168168
hir::ExprMatch(ref scrut, ref arms, source) => {
169169
for arm in arms {
@@ -986,7 +986,7 @@ pub fn specialize<'a>(cx: &MatchCheckCtxt, r: &[&'a Pat],
986986
}
987987

988988
fn check_local(cx: &mut MatchCheckCtxt, loc: &hir::Local) {
989-
visit::walk_local(cx, loc);
989+
intravisit::walk_local(cx, loc);
990990

991991
let pat = StaticInliner::new(cx.tcx, None).fold_pat(loc.pat.clone());
992992
check_irrefutable(cx, &pat, false);
@@ -1007,7 +1007,7 @@ fn check_fn(cx: &mut MatchCheckCtxt,
10071007
_ => cx.param_env = ParameterEnvironment::for_item(cx.tcx, fn_id),
10081008
}
10091009

1010-
visit::walk_fn(cx, kind, decl, body, sp);
1010+
intravisit::walk_fn(cx, kind, decl, body, sp);
10111011

10121012
for input in &decl.inputs {
10131013
check_irrefutable(cx, &input.pat, true);
@@ -1187,10 +1187,10 @@ impl<'a, 'b, 'tcx, 'v> Visitor<'v> for AtBindingPatternVisitor<'a, 'b, 'tcx> {
11871187
hir::PatIdent(_, _, Some(_)) => {
11881188
let bindings_were_allowed = self.bindings_allowed;
11891189
self.bindings_allowed = false;
1190-
visit::walk_pat(self, pat);
1190+
intravisit::walk_pat(self, pat);
11911191
self.bindings_allowed = bindings_were_allowed;
11921192
}
1193-
_ => visit::walk_pat(self, pat),
1193+
_ => intravisit::walk_pat(self, pat),
11941194
}
11951195
}
11961196
}

0 commit comments

Comments
 (0)