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:
parent
25727d70d1
commit
e14562d515
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user