Skip to content

Commit 7ef6ff0

Browse files
committed
Track the visited AST's lifetime throughout Visitor.
1 parent a09dbf2 commit 7ef6ff0

Some content is hidden

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

47 files changed

+288
-302
lines changed

src/librustc/front/feature_gate.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ impl<'a> Context<'a> {
143143
}
144144
}
145145

146-
impl<'a> Visitor for Context<'a> {
146+
impl<'a, 'v> Visitor<'v> for Context<'a> {
147147
fn visit_ident(&mut self, sp: Span, id: ast::Ident) {
148148
if !token::get_ident(id).get().is_ascii() {
149149
self.gate_feature("non_ascii_idents", sp,
@@ -386,13 +386,13 @@ impl<'a> Visitor for Context<'a> {
386386
}
387387

388388
fn visit_fn(&mut self,
389-
fn_kind: &visit::FnKind,
390-
fn_decl: &ast::FnDecl,
391-
block: &ast::Block,
389+
fn_kind: visit::FnKind<'v>,
390+
fn_decl: &'v ast::FnDecl,
391+
block: &'v ast::Block,
392392
span: Span,
393393
_: NodeId) {
394-
match *fn_kind {
395-
visit::FkItemFn(_, _, _, ref abi) if *abi == RustIntrinsic => {
394+
match fn_kind {
395+
visit::FkItemFn(_, _, _, abi) if abi == RustIntrinsic => {
396396
self.gate_feature("intrinsics",
397397
span,
398398
"intrinsics are subject to change")

src/librustc/front/show_span.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ struct ShowSpanVisitor<'a> {
2323
sess: &'a Session
2424
}
2525

26-
impl<'a> Visitor for ShowSpanVisitor<'a> {
26+
impl<'a, 'v> Visitor<'v> for ShowSpanVisitor<'a> {
2727
fn visit_expr(&mut self, e: &ast::Expr) {
2828
self.sess.span_note(e.span, "expression");
2929
visit::walk_expr(self, e);

src/librustc/lint/builtin.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ impl<'a, 'tcx> CTypesVisitor<'a, 'tcx> {
366366
}
367367
}
368368

369-
impl<'a, 'tcx> Visitor for CTypesVisitor<'a, 'tcx> {
369+
impl<'a, 'tcx, 'v> Visitor<'v> for CTypesVisitor<'a, 'tcx> {
370370
fn visit_ty(&mut self, ty: &ast::Ty) {
371371
match ty.node {
372372
ast::TyPath(_, _, id) => self.check_def(ty.span, ty.id, id),
@@ -500,7 +500,7 @@ struct RawPtrDerivingVisitor<'a, 'tcx: 'a> {
500500
cx: &'a Context<'a, 'tcx>
501501
}
502502

503-
impl<'a, 'tcx> Visitor for RawPtrDerivingVisitor<'a, 'tcx> {
503+
impl<'a, 'tcx, 'v> Visitor<'v> for RawPtrDerivingVisitor<'a, 'tcx> {
504504
fn visit_ty(&mut self, ty: &ast::Ty) {
505505
static MSG: &'static str = "use of `#[deriving]` with a raw pointer";
506506
match ty.node {
@@ -908,9 +908,9 @@ impl LintPass for NonSnakeCase {
908908
}
909909

910910
fn check_fn(&mut self, cx: &Context,
911-
fk: &visit::FnKind, _: &ast::FnDecl,
911+
fk: visit::FnKind, _: &ast::FnDecl,
912912
_: &ast::Block, span: Span, _: ast::NodeId) {
913-
match *fk {
913+
match fk {
914914
visit::FkMethod(ident, _, m) => match method_context(cx, m) {
915915
PlainImpl
916916
=> self.check_snake_case(cx, "method", ident, span),
@@ -1218,7 +1218,7 @@ impl LintPass for UnusedMut {
12181218
}
12191219

12201220
fn check_fn(&mut self, cx: &Context,
1221-
_: &visit::FnKind, decl: &ast::FnDecl,
1221+
_: visit::FnKind, decl: &ast::FnDecl,
12221222
_: &ast::Block, _: Span, _: ast::NodeId) {
12231223
for a in decl.inputs.iter() {
12241224
self.check_unused_mut_pat(cx, &[a.pat]);
@@ -1387,9 +1387,9 @@ impl LintPass for MissingDoc {
13871387
}
13881388

13891389
fn check_fn(&mut self, cx: &Context,
1390-
fk: &visit::FnKind, _: &ast::FnDecl,
1390+
fk: visit::FnKind, _: &ast::FnDecl,
13911391
_: &ast::Block, _: Span, _: ast::NodeId) {
1392-
match *fk {
1392+
match fk {
13931393
visit::FkMethod(_, _, m) => {
13941394
// If the method is an impl for a trait, don't doc.
13951395
if method_context(cx, m) == TraitImpl { return; }

src/librustc/lint/context.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ impl<'a, 'tcx> AstConv<'tcx> for Context<'a, 'tcx>{
492492
}
493493
}
494494

495-
impl<'a, 'tcx> Visitor for Context<'a, 'tcx> {
495+
impl<'a, 'tcx, 'v> Visitor<'v> for Context<'a, 'tcx> {
496496
fn visit_item(&mut self, it: &ast::Item) {
497497
self.with_lint_attrs(it.attrs.as_slice(), |cx| {
498498
run_lints!(cx, check_item, it);
@@ -531,9 +531,9 @@ impl<'a, 'tcx> Visitor for Context<'a, 'tcx> {
531531
visit::walk_stmt(self, s);
532532
}
533533

534-
fn visit_fn(&mut self, fk: &FnKind, decl: &ast::FnDecl,
535-
body: &ast::Block, span: Span, id: ast::NodeId) {
536-
match *fk {
534+
fn visit_fn(&mut self, fk: FnKind<'v>, decl: &'v ast::FnDecl,
535+
body: &'v ast::Block, span: Span, id: ast::NodeId) {
536+
match fk {
537537
visit::FkMethod(_, _, m) => {
538538
self.with_lint_attrs(m.attrs.as_slice(), |cx| {
539539
run_lints!(cx, check_fn, fk, decl, body, span, id);

src/librustc/lint/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ pub trait LintPass {
139139
fn check_ty(&mut self, _: &Context, _: &ast::Ty) { }
140140
fn check_generics(&mut self, _: &Context, _: &ast::Generics) { }
141141
fn check_fn(&mut self, _: &Context,
142-
_: &FnKind, _: &ast::FnDecl, _: &ast::Block, _: Span, _: ast::NodeId) { }
142+
_: FnKind, _: &ast::FnDecl, _: &ast::Block, _: Span, _: ast::NodeId) { }
143143
fn check_ty_method(&mut self, _: &Context, _: &ast::TypeMethod) { }
144144
fn check_trait_method(&mut self, _: &Context, _: &ast::TraitItem) { }
145145
fn check_struct_def(&mut self, _: &Context,

src/librustc/metadata/creader.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ pub fn read_crates(sess: &Session,
5454
warn_if_multiple_versions(sess.diagnostic(), &sess.cstore)
5555
}
5656

57-
impl<'a> visit::Visitor for Env<'a> {
57+
impl<'a, 'v> visit::Visitor<'v> for Env<'a> {
5858
fn visit_view_item(&mut self, a: &ast::ViewItem) {
5959
visit_view_item(self, a);
6060
visit::walk_view_item(self, a);

src/librustc/metadata/encoder.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1473,7 +1473,7 @@ struct EncodeVisitor<'a,'b:'a> {
14731473
index: &'a mut Vec<entry<i64>>,
14741474
}
14751475

1476-
impl<'a,'b> visit::Visitor for EncodeVisitor<'a,'b> {
1476+
impl<'a, 'b, 'v> Visitor<'v> for EncodeVisitor<'a, 'b> {
14771477
fn visit_expr(&mut self, ex: &Expr) {
14781478
visit::walk_expr(self, ex);
14791479
my_visit_expr(ex);
@@ -1775,7 +1775,7 @@ fn encode_struct_field_attrs(rbml_w: &mut Encoder, krate: &Crate) {
17751775
rbml_w: &'a mut Encoder<'b>,
17761776
}
17771777

1778-
impl<'a, 'b> Visitor for StructFieldVisitor<'a, 'b> {
1778+
impl<'a, 'b, 'v> Visitor<'v> for StructFieldVisitor<'a, 'b> {
17791779
fn visit_struct_field(&mut self, field: &ast::StructField) {
17801780
self.rbml_w.start_tag(tag_struct_field);
17811781
self.rbml_w.wr_tagged_u32(tag_struct_field_id, field.node.id);
@@ -1798,7 +1798,7 @@ struct ImplVisitor<'a, 'b:'a, 'c:'a, 'tcx:'b> {
17981798
rbml_w: &'a mut Encoder<'c>,
17991799
}
18001800

1801-
impl<'a, 'b, 'c, 'tcx> Visitor for ImplVisitor<'a, 'b, 'c, 'tcx> {
1801+
impl<'a, 'b, 'c, 'tcx, 'v> Visitor<'v> for ImplVisitor<'a, 'b, 'c, 'tcx> {
18021802
fn visit_item(&mut self, item: &Item) {
18031803
match item.node {
18041804
ItemImpl(_, Some(ref trait_ref), _, _) => {

src/librustc/middle/borrowck/gather_loans/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ struct StaticInitializerCtxt<'a, 'tcx: 'a> {
471471
bccx: &'a BorrowckCtxt<'a, 'tcx>
472472
}
473473

474-
impl<'a, 'tcx> Visitor for StaticInitializerCtxt<'a, 'tcx> {
474+
impl<'a, 'tcx, 'v> Visitor<'v> for StaticInitializerCtxt<'a, 'tcx> {
475475
fn visit_expr(&mut self, ex: &Expr) {
476476
match ex.node {
477477
ast::ExprAddrOf(mutbl, ref base) => {

src/librustc/middle/borrowck/mod.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ pub struct LoanDataFlowOperator;
6060

6161
pub type LoanDataFlow<'a, 'tcx> = DataFlowContext<'a, 'tcx, LoanDataFlowOperator>;
6262

63-
impl<'a, 'tcx> Visitor for BorrowckCtxt<'a, 'tcx> {
64-
fn visit_fn(&mut self, fk: &FnKind, fd: &FnDecl,
65-
b: &Block, s: Span, n: NodeId) {
63+
impl<'a, 'tcx, 'v> Visitor<'v> for BorrowckCtxt<'a, 'tcx> {
64+
fn visit_fn(&mut self, fk: FnKind<'v>, fd: &'v FnDecl,
65+
b: &'v Block, s: Span, n: NodeId) {
6666
borrowck_fn(self, fk, fd, b, s, n);
6767
}
6868

@@ -127,7 +127,7 @@ pub struct AnalysisData<'a, 'tcx: 'a> {
127127
}
128128

129129
fn borrowck_fn(this: &mut BorrowckCtxt,
130-
fk: &FnKind,
130+
fk: FnKind,
131131
decl: &ast::FnDecl,
132132
body: &ast::Block,
133133
sp: Span,
@@ -146,7 +146,7 @@ fn borrowck_fn(this: &mut BorrowckCtxt,
146146
}
147147

148148
fn build_borrowck_dataflow_data<'a, 'tcx>(this: &mut BorrowckCtxt<'a, 'tcx>,
149-
fk: &FnKind,
149+
fk: FnKind,
150150
decl: &ast::FnDecl,
151151
cfg: &cfg::CFG,
152152
body: &ast::Block,
@@ -217,7 +217,7 @@ pub fn build_borrowck_dataflow_data_for_fn<'a, 'tcx>(
217217
let p = input.fn_parts;
218218

219219
let dataflow_data = build_borrowck_dataflow_data(&mut bccx,
220-
&p.kind,
220+
p.kind,
221221
&*p.decl,
222222
input.cfg,
223223
&*p.body,

src/librustc/middle/check_const.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ impl<'a, 'tcx> CheckCrateVisitor<'a, 'tcx> {
4141
}
4242
}
4343

44-
impl<'a, 'tcx> Visitor for CheckCrateVisitor<'a, 'tcx> {
44+
impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> {
4545
fn visit_item(&mut self, i: &Item) {
4646
check_item(self, i);
4747
}
@@ -238,7 +238,7 @@ pub fn check_item_recursion<'a>(sess: &'a Session,
238238
visitor.visit_item(it);
239239
}
240240

241-
impl<'a> Visitor for CheckItemRecursionVisitor<'a> {
241+
impl<'a, 'v> Visitor<'v> for CheckItemRecursionVisitor<'a> {
242242
fn visit_item(&mut self, it: &Item) {
243243
if self.idstack.iter().any(|x| x == &(it.id)) {
244244
self.sess.span_fatal(self.root_it.span, "recursive constant");

src/librustc/middle/check_loop.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pub fn check_crate(sess: &Session, krate: &ast::Crate) {
2929
visit::walk_crate(&mut CheckLoopVisitor { sess: sess, cx: Normal }, krate)
3030
}
3131

32-
impl<'a> Visitor for CheckLoopVisitor<'a> {
32+
impl<'a, 'v> Visitor<'v> for CheckLoopVisitor<'a> {
3333
fn visit_item(&mut self, i: &ast::Item) {
3434
self.with_context(Normal, |v| visit::walk_item(v, i));
3535
}

src/librustc/middle/check_match.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,15 @@ enum WitnessPreference {
119119
LeaveOutWitness
120120
}
121121

122-
impl<'a, 'tcx> Visitor for MatchCheckCtxt<'a, 'tcx> {
122+
impl<'a, 'tcx, 'v> Visitor<'v> for MatchCheckCtxt<'a, 'tcx> {
123123
fn visit_expr(&mut self, ex: &Expr) {
124124
check_expr(self, ex);
125125
}
126126
fn visit_local(&mut self, l: &Local) {
127127
check_local(self, l);
128128
}
129-
fn visit_fn(&mut self, fk: &FnKind, fd: &FnDecl, b: &Block, s: Span, _: NodeId) {
129+
fn visit_fn(&mut self, fk: FnKind<'v>, fd: &'v FnDecl,
130+
b: &'v Block, s: Span, _: NodeId) {
130131
check_fn(self, fk, fd, b, s);
131132
}
132133
}
@@ -868,7 +869,7 @@ fn check_local(cx: &mut MatchCheckCtxt, loc: &Local) {
868869
}
869870

870871
fn check_fn(cx: &mut MatchCheckCtxt,
871-
kind: &FnKind,
872+
kind: FnKind,
872873
decl: &FnDecl,
873874
body: &Block,
874875
sp: Span) {
@@ -1022,7 +1023,7 @@ struct AtBindingPatternVisitor<'a, 'b:'a, 'tcx:'b> {
10221023
bindings_allowed: bool
10231024
}
10241025

1025-
impl<'a, 'b, 'tcx> Visitor for AtBindingPatternVisitor<'a, 'b, 'tcx> {
1026+
impl<'a, 'b, 'tcx, 'v> Visitor<'v> for AtBindingPatternVisitor<'a, 'b, 'tcx> {
10261027
fn visit_pat(&mut self, pat: &Pat) {
10271028
if !self.bindings_allowed && pat_is_binding(&self.cx.tcx.def_map, pat) {
10281029
self.cx.tcx.sess.span_err(pat.span,

src/librustc/middle/check_rvalues.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ struct RvalueContext<'a, 'tcx: 'a> {
3030
tcx: &'a ty::ctxt<'tcx>
3131
}
3232

33-
impl<'a, 'tcx> visit::Visitor for RvalueContext<'a, 'tcx> {
33+
impl<'a, 'tcx, 'v> visit::Visitor<'v> for RvalueContext<'a, 'tcx> {
3434
fn visit_fn(&mut self,
35-
_: &visit::FnKind,
36-
fd: &ast::FnDecl,
37-
b: &ast::Block,
35+
_: visit::FnKind<'v>,
36+
fd: &'v ast::FnDecl,
37+
b: &'v ast::Block,
3838
_: Span,
3939
_: ast::NodeId) {
4040
let mut euv = euv::ExprUseVisitor::new(self, self.tcx);

src/librustc/middle/check_static.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ impl<'a, 'tcx> CheckStaticVisitor<'a, 'tcx> {
6969
}
7070
}
7171

72-
impl<'a, 'tcx> Visitor for CheckStaticVisitor<'a, 'tcx> {
72+
impl<'a, 'tcx, 'v> Visitor<'v> for CheckStaticVisitor<'a, 'tcx> {
7373
fn visit_item(&mut self, i: &ast::Item) {
7474
debug!("visit_item(item={})", pprust::item_to_string(i));
7575
match i.node {

src/librustc/middle/const_eval.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ impl<'a, 'tcx> ConstEvalVisitor<'a, 'tcx> {
268268

269269
}
270270

271-
impl<'a, 'tcx> Visitor for ConstEvalVisitor<'a, 'tcx> {
271+
impl<'a, 'tcx, 'v> Visitor<'v> for ConstEvalVisitor<'a, 'tcx> {
272272
fn visit_ty(&mut self, t: &Ty) {
273273
match t.node {
274274
TyFixedLengthVec(_, expr) => {

src/librustc/middle/dataflow.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ fn build_nodeid_to_index(decl: Option<&ast::FnDecl>,
173173
}
174174
let mut formals = Formals { entry: entry, index: index };
175175
visit::walk_fn_decl(&mut formals, decl);
176-
impl<'a> visit::Visitor for Formals<'a> {
176+
impl<'a, 'v> visit::Visitor<'v> for Formals<'a> {
177177
fn visit_pat(&mut self, p: &ast::Pat) {
178178
self.index.insert(p.id, self.entry);
179179
visit::walk_pat(self, p)

src/librustc/middle/dead.rs

+11-12
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ impl<'a, 'tcx> MarkSymbolVisitor<'a, 'tcx> {
237237
}
238238
}
239239

240-
impl<'a, 'tcx> Visitor for MarkSymbolVisitor<'a, 'tcx> {
240+
impl<'a, 'tcx, 'v> Visitor<'v> for MarkSymbolVisitor<'a, 'tcx> {
241241

242242
fn visit_struct_def(&mut self, def: &ast::StructDef, _: ast::Ident,
243243
_: &ast::Generics, _: ast::NodeId) {
@@ -329,7 +329,7 @@ struct LifeSeeder {
329329
worklist: Vec<ast::NodeId> ,
330330
}
331331

332-
impl Visitor for LifeSeeder {
332+
impl<'v> Visitor<'v> for LifeSeeder {
333333
fn visit_item(&mut self, item: &ast::Item) {
334334
if has_allow_dead_code_or_lang_attr(item.attrs.as_slice()) {
335335
self.worklist.push(item.id);
@@ -349,11 +349,11 @@ impl Visitor for LifeSeeder {
349349
visit::walk_item(self, item);
350350
}
351351

352-
fn visit_fn(&mut self, fk: &visit::FnKind,
353-
_: &ast::FnDecl, block: &ast::Block,
352+
fn visit_fn(&mut self, fk: visit::FnKind<'v>,
353+
_: &'v ast::FnDecl, block: &'v ast::Block,
354354
_: codemap::Span, id: ast::NodeId) {
355355
// Check for method here because methods are not ast::Item
356-
match *fk {
356+
match fk {
357357
visit::FkMethod(_, _, method) => {
358358
if has_allow_dead_code_or_lang_attr(method.attrs.as_slice()) {
359359
self.worklist.push(id);
@@ -499,7 +499,7 @@ impl<'a, 'tcx> DeadVisitor<'a, 'tcx> {
499499
}
500500
}
501501

502-
impl<'a, 'tcx> Visitor for DeadVisitor<'a, 'tcx> {
502+
impl<'a, 'tcx, 'v> Visitor<'v> for DeadVisitor<'a, 'tcx> {
503503
fn visit_item(&mut self, item: &ast::Item) {
504504
let ctor_id = get_struct_ctor_id(item);
505505
if !self.symbol_is_live(item.id, ctor_id) && should_warn(item) {
@@ -515,15 +515,14 @@ impl<'a, 'tcx> Visitor for DeadVisitor<'a, 'tcx> {
515515
visit::walk_foreign_item(self, fi);
516516
}
517517

518-
fn visit_fn(&mut self, fk: &visit::FnKind,
519-
_: &ast::FnDecl, block: &ast::Block,
518+
fn visit_fn(&mut self, fk: visit::FnKind<'v>,
519+
_: &'v ast::FnDecl, block: &'v ast::Block,
520520
span: codemap::Span, id: ast::NodeId) {
521521
// Have to warn method here because methods are not ast::Item
522-
match *fk {
523-
visit::FkMethod(..) => {
524-
let ident = visit::name_of_fn(fk);
522+
match fk {
523+
visit::FkMethod(name, _, _) => {
525524
if !self.symbol_is_live(id, None) {
526-
self.warn_dead_code(id, span, ident);
525+
self.warn_dead_code(id, span, name);
527526
}
528527
}
529528
_ => ()

src/librustc/middle/effect.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ impl<'a, 'tcx> EffectCheckVisitor<'a, 'tcx> {
8686
}
8787
}
8888

89-
impl<'a, 'tcx> Visitor for EffectCheckVisitor<'a, 'tcx> {
90-
fn visit_fn(&mut self, fn_kind: &visit::FnKind, fn_decl: &ast::FnDecl,
91-
block: &ast::Block, span: Span, _: ast::NodeId) {
89+
impl<'a, 'tcx, 'v> Visitor<'v> for EffectCheckVisitor<'a, 'tcx> {
90+
fn visit_fn(&mut self, fn_kind: visit::FnKind<'v>, fn_decl: &'v ast::FnDecl,
91+
block: &'v ast::Block, span: Span, _: ast::NodeId) {
9292

93-
let (is_item_fn, is_unsafe_fn) = match *fn_kind {
93+
let (is_item_fn, is_unsafe_fn) = match fn_kind {
9494
visit::FkItemFn(_, _, fn_style, _) =>
9595
(true, fn_style == ast::UnsafeFn),
9696
visit::FkMethod(_, _, method) =>

src/librustc/middle/entry.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ struct EntryContext<'a> {
4141
non_main_fns: Vec<(NodeId, Span)> ,
4242
}
4343

44-
impl<'a> Visitor for EntryContext<'a> {
44+
impl<'a, 'v> Visitor<'v> for EntryContext<'a> {
4545
fn visit_item(&mut self, item: &Item) {
4646
find_item(item, self);
4747
}

0 commit comments

Comments
 (0)