提交 e14562d5 编写于 作者: N Niko Matsakis

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

visit nested items). This is what all clients wanted anyhow.
上级 25727d70
......@@ -555,7 +555,6 @@ fn visit_ids<F>(&mut self, f: F)
{
let mut v = ast_util::IdVisitor {
operation: self,
pass_through_items: false,
visited_outermost: false,
};
f(&mut v);
......@@ -583,11 +582,7 @@ fn new(tcx: &'a ty::ctxt<'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 @@ pub fn visit<'ast,V>(&'ast self, visitor: &mut V)
}
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 @@ fn record_renamings(const_expr: &hir::Expr,
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 @@ fn visit_foreign_item(&mut self, foreign_item: &ForeignItem) {
}
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 @@ fn visit_fn(&mut self,
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 @@ fn visit_fn(&mut self,
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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册