Remove largely unused context from Visitor.
This commit is contained in:
parent
22e749ded1
commit
a09dbf28e6
48 changed files with 1449 additions and 1504 deletions
|
|
@ -366,17 +366,16 @@ impl<'a, O: IdVisitingOperation> IdVisitor<'a, O> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
|
||||
impl<'a, O: IdVisitingOperation> Visitor for IdVisitor<'a, O> {
|
||||
fn visit_mod(&mut self,
|
||||
module: &Mod,
|
||||
_: Span,
|
||||
node_id: NodeId,
|
||||
env: ()) {
|
||||
node_id: NodeId) {
|
||||
self.operation.visit_id(node_id);
|
||||
visit::walk_mod(self, module, env)
|
||||
visit::walk_mod(self, module)
|
||||
}
|
||||
|
||||
fn visit_view_item(&mut self, view_item: &ViewItem, env: ()) {
|
||||
fn visit_view_item(&mut self, view_item: &ViewItem) {
|
||||
if !self.pass_through_items {
|
||||
if self.visited_outermost {
|
||||
return;
|
||||
|
|
@ -403,16 +402,16 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
|
|||
}
|
||||
}
|
||||
}
|
||||
visit::walk_view_item(self, view_item, env);
|
||||
visit::walk_view_item(self, view_item);
|
||||
self.visited_outermost = false;
|
||||
}
|
||||
|
||||
fn visit_foreign_item(&mut self, foreign_item: &ForeignItem, env: ()) {
|
||||
fn visit_foreign_item(&mut self, foreign_item: &ForeignItem) {
|
||||
self.operation.visit_id(foreign_item.id);
|
||||
visit::walk_foreign_item(self, foreign_item, env)
|
||||
visit::walk_foreign_item(self, foreign_item)
|
||||
}
|
||||
|
||||
fn visit_item(&mut self, item: &Item, env: ()) {
|
||||
fn visit_item(&mut self, item: &Item) {
|
||||
if !self.pass_through_items {
|
||||
if self.visited_outermost {
|
||||
return
|
||||
|
|
@ -431,48 +430,48 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
|
|||
_ => {}
|
||||
}
|
||||
|
||||
visit::walk_item(self, item, env);
|
||||
visit::walk_item(self, item);
|
||||
|
||||
self.visited_outermost = false
|
||||
}
|
||||
|
||||
fn visit_local(&mut self, local: &Local, env: ()) {
|
||||
fn visit_local(&mut self, local: &Local) {
|
||||
self.operation.visit_id(local.id);
|
||||
visit::walk_local(self, local, env)
|
||||
visit::walk_local(self, local)
|
||||
}
|
||||
|
||||
fn visit_block(&mut self, block: &Block, env: ()) {
|
||||
fn visit_block(&mut self, block: &Block) {
|
||||
self.operation.visit_id(block.id);
|
||||
visit::walk_block(self, block, env)
|
||||
visit::walk_block(self, block)
|
||||
}
|
||||
|
||||
fn visit_stmt(&mut self, statement: &Stmt, env: ()) {
|
||||
fn visit_stmt(&mut self, statement: &Stmt) {
|
||||
self.operation.visit_id(ast_util::stmt_id(statement));
|
||||
visit::walk_stmt(self, statement, env)
|
||||
visit::walk_stmt(self, statement)
|
||||
}
|
||||
|
||||
fn visit_pat(&mut self, pattern: &Pat, env: ()) {
|
||||
fn visit_pat(&mut self, pattern: &Pat) {
|
||||
self.operation.visit_id(pattern.id);
|
||||
visit::walk_pat(self, pattern, env)
|
||||
visit::walk_pat(self, pattern)
|
||||
}
|
||||
|
||||
fn visit_expr(&mut self, expression: &Expr, env: ()) {
|
||||
fn visit_expr(&mut self, expression: &Expr) {
|
||||
self.operation.visit_id(expression.id);
|
||||
visit::walk_expr(self, expression, env)
|
||||
visit::walk_expr(self, expression)
|
||||
}
|
||||
|
||||
fn visit_ty(&mut self, typ: &Ty, env: ()) {
|
||||
fn visit_ty(&mut self, typ: &Ty) {
|
||||
self.operation.visit_id(typ.id);
|
||||
match typ.node {
|
||||
TyPath(_, _, id) => self.operation.visit_id(id),
|
||||
_ => {}
|
||||
}
|
||||
visit::walk_ty(self, typ, env)
|
||||
visit::walk_ty(self, typ)
|
||||
}
|
||||
|
||||
fn visit_generics(&mut self, generics: &Generics, env: ()) {
|
||||
fn visit_generics(&mut self, generics: &Generics) {
|
||||
self.visit_generics_helper(generics);
|
||||
visit::walk_generics(self, generics, env)
|
||||
visit::walk_generics(self, generics)
|
||||
}
|
||||
|
||||
fn visit_fn(&mut self,
|
||||
|
|
@ -480,8 +479,7 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
|
|||
function_declaration: &FnDecl,
|
||||
block: &Block,
|
||||
span: Span,
|
||||
node_id: NodeId,
|
||||
env: ()) {
|
||||
node_id: NodeId) {
|
||||
if !self.pass_through_items {
|
||||
match *function_kind {
|
||||
visit::FkMethod(..) if self.visited_outermost => return,
|
||||
|
|
@ -508,8 +506,7 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
|
|||
function_kind,
|
||||
function_declaration,
|
||||
block,
|
||||
span,
|
||||
env);
|
||||
span);
|
||||
|
||||
if !self.pass_through_items {
|
||||
match *function_kind {
|
||||
|
|
@ -519,28 +516,27 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
|
|||
}
|
||||
}
|
||||
|
||||
fn visit_struct_field(&mut self, struct_field: &StructField, env: ()) {
|
||||
fn visit_struct_field(&mut self, struct_field: &StructField) {
|
||||
self.operation.visit_id(struct_field.node.id);
|
||||
visit::walk_struct_field(self, struct_field, env)
|
||||
visit::walk_struct_field(self, struct_field)
|
||||
}
|
||||
|
||||
fn visit_struct_def(&mut self,
|
||||
struct_def: &StructDef,
|
||||
_: ast::Ident,
|
||||
_: &ast::Generics,
|
||||
id: NodeId,
|
||||
_: ()) {
|
||||
id: NodeId) {
|
||||
self.operation.visit_id(id);
|
||||
struct_def.ctor_id.map(|ctor_id| self.operation.visit_id(ctor_id));
|
||||
visit::walk_struct_def(self, struct_def, ());
|
||||
visit::walk_struct_def(self, struct_def);
|
||||
}
|
||||
|
||||
fn visit_trait_item(&mut self, tm: &ast::TraitItem, _: ()) {
|
||||
fn visit_trait_item(&mut self, tm: &ast::TraitItem) {
|
||||
match *tm {
|
||||
ast::RequiredMethod(ref m) => self.operation.visit_id(m.id),
|
||||
ast::ProvidedMethod(ref m) => self.operation.visit_id(m.id),
|
||||
}
|
||||
visit::walk_trait_item(self, tm, ());
|
||||
visit::walk_trait_item(self, tm);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -552,7 +548,7 @@ pub fn visit_ids_for_inlined_item<O: IdVisitingOperation>(item: &InlinedItem,
|
|||
visited_outermost: false,
|
||||
};
|
||||
|
||||
visit::walk_inlined_item(&mut id_visitor, item, ());
|
||||
visit::walk_inlined_item(&mut id_visitor, item);
|
||||
}
|
||||
|
||||
struct IdRangeComputingVisitor {
|
||||
|
|
@ -595,7 +591,7 @@ pub fn compute_id_range_for_fn_body(fk: &visit::FnKind,
|
|||
pass_through_items: false,
|
||||
visited_outermost: false,
|
||||
};
|
||||
id_visitor.visit_fn(fk, decl, body, sp, id, ());
|
||||
id_visitor.visit_fn(fk, decl, body, sp, id);
|
||||
visitor.result.get()
|
||||
}
|
||||
|
||||
|
|
@ -643,8 +639,8 @@ struct EachViewItemData<'a> {
|
|||
callback: |&ast::ViewItem|: 'a -> bool,
|
||||
}
|
||||
|
||||
impl<'a> Visitor<()> for EachViewItemData<'a> {
|
||||
fn visit_view_item(&mut self, view_item: &ast::ViewItem, _: ()) {
|
||||
impl<'a> Visitor for EachViewItemData<'a> {
|
||||
fn visit_view_item(&mut self, view_item: &ast::ViewItem) {
|
||||
let _ = (self.callback)(view_item);
|
||||
}
|
||||
}
|
||||
|
|
@ -654,7 +650,7 @@ impl EachViewItem for ast::Crate {
|
|||
let mut visit = EachViewItemData {
|
||||
callback: f,
|
||||
};
|
||||
visit::walk_crate(&mut visit, self, ());
|
||||
visit::walk_crate(&mut visit, self);
|
||||
true
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -648,29 +648,29 @@ fn expand_arm(arm: &ast::Arm, fld: &mut MacroExpander) -> ast::Arm {
|
|||
/// array
|
||||
#[deriving(Clone)]
|
||||
struct PatIdentFinder {
|
||||
ident_accumulator: Vec<ast::Ident> ,
|
||||
ident_accumulator: Vec<ast::Ident>
|
||||
}
|
||||
|
||||
impl Visitor<()> for PatIdentFinder {
|
||||
fn visit_pat(&mut self, pattern: &ast::Pat, _: ()) {
|
||||
impl Visitor for PatIdentFinder {
|
||||
fn visit_pat(&mut self, pattern: &ast::Pat) {
|
||||
match *pattern {
|
||||
ast::Pat { id: _, node: ast::PatIdent(_, ref path1, ref inner), span: _ } => {
|
||||
self.ident_accumulator.push(path1.node);
|
||||
// visit optional subpattern of PatIdent:
|
||||
for subpat in inner.iter() {
|
||||
self.visit_pat(&**subpat, ())
|
||||
self.visit_pat(&**subpat)
|
||||
}
|
||||
}
|
||||
// use the default traversal for non-PatIdents
|
||||
_ => visit::walk_pat(self, pattern, ())
|
||||
_ => visit::walk_pat(self, pattern)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// find the PatIdent paths in a pattern
|
||||
fn pattern_bindings(pat : &ast::Pat) -> Vec<ast::Ident> {
|
||||
fn pattern_bindings(pat: &ast::Pat) -> Vec<ast::Ident> {
|
||||
let mut name_finder = PatIdentFinder{ident_accumulator:Vec::new()};
|
||||
name_finder.visit_pat(pat,());
|
||||
name_finder.visit_pat(pat);
|
||||
name_finder.ident_accumulator
|
||||
}
|
||||
|
||||
|
|
@ -678,7 +678,7 @@ fn pattern_bindings(pat : &ast::Pat) -> Vec<ast::Ident> {
|
|||
fn fn_decl_arg_bindings(fn_decl: &ast::FnDecl) -> Vec<ast::Ident> {
|
||||
let mut pat_idents = PatIdentFinder{ident_accumulator:Vec::new()};
|
||||
for arg in fn_decl.inputs.iter() {
|
||||
pat_idents.visit_pat(&*arg.pat, ());
|
||||
pat_idents.visit_pat(&*arg.pat);
|
||||
}
|
||||
pat_idents.ident_accumulator
|
||||
}
|
||||
|
|
@ -1099,7 +1099,7 @@ fn original_span(cx: &ExtCtxt) -> Gc<codemap::ExpnInfo> {
|
|||
|
||||
/// Check that there are no macro invocations left in the AST:
|
||||
pub fn check_for_macros(sess: &parse::ParseSess, krate: &ast::Crate) {
|
||||
visit::walk_crate(&mut MacroExterminator{sess:sess}, krate, ());
|
||||
visit::walk_crate(&mut MacroExterminator{sess:sess}, krate);
|
||||
}
|
||||
|
||||
/// A visitor that ensures that no macro invocations remain in an AST.
|
||||
|
|
@ -1107,8 +1107,8 @@ struct MacroExterminator<'a>{
|
|||
sess: &'a parse::ParseSess
|
||||
}
|
||||
|
||||
impl<'a> visit::Visitor<()> for MacroExterminator<'a> {
|
||||
fn visit_mac(&mut self, macro: &ast::Mac, _:()) {
|
||||
impl<'a> Visitor for MacroExterminator<'a> {
|
||||
fn visit_mac(&mut self, macro: &ast::Mac) {
|
||||
self.sess.span_diagnostic.span_bug(macro.span,
|
||||
"macro exterminator: expected AST \
|
||||
with no macro invocations");
|
||||
|
|
@ -1144,15 +1144,14 @@ mod test {
|
|||
path_accumulator: Vec<ast::Path> ,
|
||||
}
|
||||
|
||||
impl Visitor<()> for PathExprFinderContext {
|
||||
|
||||
fn visit_expr(&mut self, expr: &ast::Expr, _: ()) {
|
||||
match *expr {
|
||||
ast::Expr{id:_,span:_,node:ast::ExprPath(ref p)} => {
|
||||
impl Visitor for PathExprFinderContext {
|
||||
fn visit_expr(&mut self, expr: &ast::Expr) {
|
||||
match expr.node {
|
||||
ast::ExprPath(ref p) => {
|
||||
self.path_accumulator.push(p.clone());
|
||||
// not calling visit_path, but it should be fine.
|
||||
}
|
||||
_ => visit::walk_expr(self,expr,())
|
||||
_ => visit::walk_expr(self, expr)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1160,18 +1159,18 @@ mod test {
|
|||
// find the variable references in a crate
|
||||
fn crate_varrefs(the_crate : &ast::Crate) -> Vec<ast::Path> {
|
||||
let mut path_finder = PathExprFinderContext{path_accumulator:Vec::new()};
|
||||
visit::walk_crate(&mut path_finder, the_crate, ());
|
||||
visit::walk_crate(&mut path_finder, the_crate);
|
||||
path_finder.path_accumulator
|
||||
}
|
||||
|
||||
/// A Visitor that extracts the identifiers from a thingy.
|
||||
// as a side note, I'm starting to want to abstract over these....
|
||||
struct IdentFinder{
|
||||
struct IdentFinder {
|
||||
ident_accumulator: Vec<ast::Ident>
|
||||
}
|
||||
|
||||
impl Visitor<()> for IdentFinder {
|
||||
fn visit_ident(&mut self, _: codemap::Span, id: ast::Ident, _: ()){
|
||||
impl Visitor for IdentFinder {
|
||||
fn visit_ident(&mut self, _: codemap::Span, id: ast::Ident){
|
||||
self.ident_accumulator.push(id);
|
||||
}
|
||||
}
|
||||
|
|
@ -1179,7 +1178,7 @@ mod test {
|
|||
/// Find the idents in a crate
|
||||
fn crate_idents(the_crate: &ast::Crate) -> Vec<ast::Ident> {
|
||||
let mut ident_finder = IdentFinder{ident_accumulator: Vec::new()};
|
||||
visit::walk_crate(&mut ident_finder, the_crate, ());
|
||||
visit::walk_crate(&mut ident_finder, the_crate);
|
||||
ident_finder.ident_accumulator
|
||||
}
|
||||
|
||||
|
|
@ -1277,7 +1276,7 @@ mod test {
|
|||
// find the pat_ident paths in a crate
|
||||
fn crate_bindings(the_crate : &ast::Crate) -> Vec<ast::Ident> {
|
||||
let mut name_finder = PatIdentFinder{ident_accumulator:Vec::new()};
|
||||
visit::walk_crate(&mut name_finder, the_crate, ());
|
||||
visit::walk_crate(&mut name_finder, the_crate);
|
||||
name_finder.ident_accumulator
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue