Convert all code that uses walk.rs in the straightforward way to simple_visit

Code that needs the keep_going functionality is still using walk. I will
add an equivalent to visit.rs later.
This commit is contained in:
Marijn Haverbeke 2011-07-26 16:47:13 +02:00
parent 473a03a214
commit e133f929b7
6 changed files with 53 additions and 60 deletions

View file

@ -8,7 +8,7 @@ import lib::llvm::mk_object_file;
import lib::llvm::mk_section_iter;
import front::attr;
import middle::resolve;
import syntax::walk;
import syntax::visit;
import syntax::codemap::span;
import back::x86;
import util::common;
@ -36,11 +36,11 @@ fn read_crates(session::session sess,
crate_cache=@std::map::new_str_hash[int](),
library_search_paths=sess.get_opts().library_search_paths,
mutable next_crate_num=1);
auto v =
rec(visit_view_item_pre=bind visit_view_item(e, _),
visit_item_pre=bind visit_item(e, _)
with walk::default_visitor());
walk::walk_crate(v, crate);
auto v = visit::mk_simple_visitor
(@rec(visit_view_item=bind visit_view_item(e, _),
visit_item=bind visit_item(e, _)
with *visit::default_simple_visitor()));
visit::visit_crate(crate, (), v);
}
type env =

View file

@ -8,7 +8,7 @@ import std::option;
import std::int;
import std::option::*;
import syntax::ast;
import syntax::walk;
import syntax::visit;
import driver::session;
import middle::resolve;
import syntax::codemap::span;
@ -33,7 +33,7 @@ type freevar_map = hashmap[ast::node_id, freevar_info];
// of the AST, we take a walker function that we invoke with a visitor
// in order to start the search.
fn collect_freevars(&resolve::def_map def_map, &session::session sess,
&fn (&walk::ast_visitor) walker,
&fn (&visit::vt[()]) walker,
ast::node_id[] initial_decls) -> freevar_info {
type env =
@rec(mutable ast::node_id[] refs,
@ -76,18 +76,16 @@ fn collect_freevars(&resolve::def_map def_map, &session::session sess,
let hashset[ast::node_id] decls = new_int_hash();
for (ast::node_id decl in initial_decls) { set_add(decls, decl); }
let env e =
@rec(mutable refs=~[],
decls=decls,
def_map=def_map,
sess=sess);
auto visitor =
@rec(visit_fn_pre=bind walk_fn(e, _, _, _, _, _),
visit_local_pre=bind walk_local(e, _),
visit_expr_pre=bind walk_expr(e, _),
visit_pat_pre=bind walk_pat(e, _)
with walk::default_visitor());
walker(*visitor);
let env e = @rec(mutable refs=~[],
decls=decls,
def_map=def_map,
sess=sess);
walker(visit::mk_simple_visitor(
@rec(visit_local=bind walk_local(e, _),
visit_pat=bind walk_pat(e, _),
visit_expr=bind walk_expr(e, _),
visit_fn=bind walk_fn(e, _, _, _, _, _)
with *visit::default_simple_visitor())));
// Calculate (refs - decls). This is the set of captured upvars.
// We build a vec of the node ids of the uses and a set of the
@ -119,16 +117,16 @@ fn annotate_freevars(&session::session sess, &resolve::def_map def_map,
fn walk_fn(env e, &ast::_fn f, &ast::ty_param[] tps, &span sp,
&ast::fn_ident i, ast::node_id nid) {
auto walker = bind walk::walk_fn(_, f, tps, sp, i, nid);
auto walker = bind visit::visit_fn(f, tps, sp, i, nid, (), _);
auto vars = collect_freevars(e.def_map, e.sess, walker, ~[]);
e.freevars.insert(nid, vars);
}
fn walk_expr(env e, &@ast::expr expr) {
alt (expr.node) {
ast::expr_for_each(?local, _, ?body) {
auto vars = collect_freevars(e.def_map, e.sess,
bind walk::walk_block(_, body),
~[local.node.id]);
auto vars = collect_freevars
(e.def_map, e.sess, bind visit::visit_block(body, (), _),
~[local.node.id]);
e.freevars.insert(body.node.id, vars);
}
_ {}
@ -137,11 +135,11 @@ fn annotate_freevars(&session::session sess, &resolve::def_map def_map,
let env e =
rec(freevars = new_int_hash(), def_map=def_map, sess=sess);
auto visitor =
rec(visit_fn_pre=bind walk_fn(e, _, _, _, _, _),
visit_expr_pre=bind walk_expr(e, _)
with walk::default_visitor());
walk::walk_crate(visitor, *crate);
auto visitor = visit::mk_simple_visitor
(@rec(visit_fn=bind walk_fn(e, _, _, _, _, _),
visit_expr=bind walk_expr(e, _)
with *visit::default_simple_visitor()));
visit::visit_crate(*crate, (), visitor);
ret e.freevars;
}

View file

@ -5,7 +5,7 @@ import std::option::none;
import std::int;
import std::uint;
import syntax::ast::*;
import syntax::walk;
import syntax::visit;
import syntax::codemap::span;
import std::map::new_str_hash;
import util::common::log_expr_err;
@ -53,13 +53,13 @@ fn collect_ids_local(&@local l, @mutable node_id[] rs) {
fn node_ids_in_fn(&_fn f, &ty_param[] tps, &span sp, &fn_ident i,
node_id id, @mutable node_id[] rs) {
auto collect_ids = walk::default_visitor();
collect_ids =
rec(visit_expr_pre=bind collect_ids_expr(_, rs),
visit_block_pre=bind collect_ids_block(_, rs),
visit_stmt_pre=bind collect_ids_stmt(_, rs),
visit_local_pre=bind collect_ids_local(_, rs) with collect_ids);
walk::walk_fn(collect_ids, f, tps, sp, i, id);
auto collect_ids = visit::mk_simple_visitor
(@rec(visit_expr=bind collect_ids_expr(_, rs),
visit_block=bind collect_ids_block(_, rs),
visit_stmt=bind collect_ids_stmt(_, rs),
visit_local=bind collect_ids_local(_, rs)
with *visit::default_simple_visitor()));
visit::visit_fn(f, tps, sp, i, id, (), collect_ids);
}
fn init_vecs(&crate_ctxt ccx, &node_id[] node_ids, uint len) {
@ -84,10 +84,10 @@ fn annotate_in_fn(&crate_ctxt ccx, &_fn f, &ty_param[] tps,
}
fn annotate_crate(&crate_ctxt ccx, &crate crate) {
auto do_ann = walk::default_visitor();
do_ann =
rec(visit_fn_pre=bind annotate_in_fn(ccx, _, _, _, _, _) with do_ann);
walk::walk_crate(do_ann, crate);
auto do_ann = visit::mk_simple_visitor
(@rec(visit_fn=bind annotate_in_fn(ccx, _, _, _, _, _)
with *visit::default_simple_visitor()));
visit::visit_crate(crate, (), do_ann);
}
//
// Local Variables:

View file

@ -4,11 +4,7 @@ import std::ivec;
import syntax::ast::*;
import util::ppaux::fn_ident_to_string;
import std::option::*;
import syntax::walk;
import syntax::visit;
import walk::walk_crate;
import walk::walk_fn;
import walk::ast_visitor;
import aux::*;
import std::map::new_int_hash;
import util::common::new_def_hash;
@ -137,11 +133,10 @@ fn mk_fn_info(&crate_ctxt ccx, &_fn f, &ty_param[] tp,
nested locally defined functions, onto a mapping from local variable name
to bit number) */
fn mk_f_to_fn_info(&crate_ctxt ccx, @crate c) {
let ast_visitor vars_visitor = walk::default_visitor();
vars_visitor =
rec(visit_fn_pre=bind mk_fn_info(ccx, _, _, _, _, _)
with vars_visitor);
walk_crate(vars_visitor, *c);
auto visitor = visit::mk_simple_visitor
(@rec(visit_fn=bind mk_fn_info(ccx, _, _, _, _, _)
with *visit::default_simple_visitor()));
visit::visit_crate(*c, (), visitor);
}
//
// Local Variables:

View file

@ -853,11 +853,11 @@ mod collect {
auto abi = @mutable none[ast::native_abi];
auto cx = @rec(tcx=tcx);
auto visit =
rec(visit_item_pre=bind convert(cx, abi, _),
visit_native_item_pre=bind convert_native(cx, abi, _)
with walk::default_visitor());
walk::walk_crate(visit, *crate);
auto visit = visit::mk_simple_visitor
(@rec(visit_item=bind convert(cx, abi, _),
visit_native_item=bind convert_native(cx, abi, _)
with *visit::default_simple_visitor()));
visit::visit_crate(*crate, (), visit);
}
}

View file

@ -13,7 +13,7 @@ import syntax::codemap::codemap;
import syntax::codemap::span;
import ast::lit;
import ast::path;
import syntax::walk;
import syntax::visit;
import std::ioivec::stdout;
import std::ioivec::str_writer;
import std::ioivec::string_writer;
@ -98,10 +98,10 @@ fn has_nonlocal_exits(&ast::blk b) -> bool {
case (_) { }
}
}
auto v =
rec(visit_expr_pre=bind visit_expr(has_exits, _)
with walk::default_visitor());
walk::walk_block(v, b);
auto v = visit::mk_simple_visitor
(@rec(visit_expr=bind visit_expr(has_exits, _)
with *visit::default_simple_visitor()));
visit::visit_block(b, (), v);
ret *has_exits;
}