Rework the IdVisitor so that it only visits item contents (and doesn't

visit nested items). This is what all clients wanted anyhow.
This commit is contained in:
Niko Matsakis 2015-11-17 17:47:51 -05:00
parent 25727d70d1
commit e14562d515
4 changed files with 13 additions and 34 deletions

View File

@ -555,7 +555,6 @@ impl<'a> EarlyContext<'a> {
{
let mut v = ast_util::IdVisitor {
operation: self,
pass_through_items: false,
visited_outermost: false,
};
f(&mut v);
@ -583,11 +582,7 @@ impl<'a, 'tcx> LateContext<'a, 'tcx> {
fn visit_ids<F>(&mut self, f: F)
where F: FnOnce(&mut util::IdVisitor<LateContext>)
{
let mut v = util::IdVisitor {
operation: self,
pass_through_items: false,
visited_outermost: false,
};
let mut v = util::IdVisitor::new(self);
f(&mut v);
}
}

View File

@ -48,11 +48,7 @@ impl InlinedItem {
}
pub fn visit_ids<O: IdVisitingOperation>(&self, operation: &mut O) {
let mut id_visitor = IdVisitor {
operation: operation,
pass_through_items: true,
visited_outermost: false,
};
let mut id_visitor = IdVisitor::new(operation);
self.visit(&mut id_visitor);
}

View File

@ -485,11 +485,7 @@ impl<'a, 'tcx> Folder for StaticInliner<'a, 'tcx> {
renaming_map: renaming_map,
};
let mut id_visitor = front_util::IdVisitor {
operation: &mut renaming_recorder,
pass_through_items: true,
visited_outermost: false,
};
let mut id_visitor = front_util::IdVisitor::new(&mut renaming_recorder);
id_visitor.visit_expr(const_expr);
}

View File

@ -289,7 +289,6 @@ pub trait IdVisitingOperation {
pub struct IdVisitor<'a, O:'a> {
pub operation: &'a mut O,
pub pass_through_items: bool,
pub visited_outermost: bool,
}
@ -319,12 +318,10 @@ impl<'a, 'v, O: IdVisitingOperation> Visitor<'v> for IdVisitor<'a, O> {
}
fn visit_item(&mut self, item: &Item) {
if !self.pass_through_items {
if self.visited_outermost {
return
} else {
self.visited_outermost = true
}
if self.visited_outermost {
return
} else {
self.visited_outermost = true
}
self.operation.visit_id(item.id);
@ -390,12 +387,10 @@ impl<'a, 'v, O: IdVisitingOperation> Visitor<'v> for IdVisitor<'a, O> {
block: &'v Block,
span: Span,
node_id: NodeId) {
if !self.pass_through_items {
match function_kind {
FnKind::Method(..) if self.visited_outermost => return,
FnKind::Method(..) => self.visited_outermost = true,
_ => {}
}
match function_kind {
FnKind::Method(..) if self.visited_outermost => return,
FnKind::Method(..) => self.visited_outermost = true,
_ => {}
}
self.operation.visit_id(node_id);
@ -420,10 +415,8 @@ impl<'a, 'v, O: IdVisitingOperation> Visitor<'v> for IdVisitor<'a, O> {
block,
span);
if !self.pass_through_items {
if let FnKind::Method(..) = function_kind {
self.visited_outermost = false;
}
if let FnKind::Method(..) = function_kind {
self.visited_outermost = false;
}
}
@ -497,7 +490,6 @@ pub fn compute_id_range_for_fn_body(fk: FnKind,
let mut visitor = IdRangeComputingVisitor::new();
let mut id_visitor = IdVisitor {
operation: &mut visitor,
pass_through_items: false,
visited_outermost: false,
};
id_visitor.visit_fn(fk, decl, body, sp, id);