From e133f929b782a0697c4aa9ad708ad88e7fe08491 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 26 Jul 2011 16:47:13 +0200 Subject: [PATCH] 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. --- src/comp/metadata/creader.rs | 12 +++---- src/comp/middle/freevars.rs | 44 +++++++++++------------- src/comp/middle/tstate/annotate.rs | 24 ++++++------- src/comp/middle/tstate/collect_locals.rs | 13 +++---- src/comp/middle/typeck.rs | 10 +++--- src/comp/util/common.rs | 10 +++--- 6 files changed, 53 insertions(+), 60 deletions(-) diff --git a/src/comp/metadata/creader.rs b/src/comp/metadata/creader.rs index 9c26713a0d2..816294a7853 100644 --- a/src/comp/metadata/creader.rs +++ b/src/comp/metadata/creader.rs @@ -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 = diff --git a/src/comp/middle/freevars.rs b/src/comp/middle/freevars.rs index 5d17bea86ea..ab95af55670 100644 --- a/src/comp/middle/freevars.rs +++ b/src/comp/middle/freevars.rs @@ -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; } diff --git a/src/comp/middle/tstate/annotate.rs b/src/comp/middle/tstate/annotate.rs index 438b21a5c78..22be9065ab1 100644 --- a/src/comp/middle/tstate/annotate.rs +++ b/src/comp/middle/tstate/annotate.rs @@ -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: diff --git a/src/comp/middle/tstate/collect_locals.rs b/src/comp/middle/tstate/collect_locals.rs index 8d4fc6cc119..d1f21181727 100644 --- a/src/comp/middle/tstate/collect_locals.rs +++ b/src/comp/middle/tstate/collect_locals.rs @@ -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: diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs index 0944f9a805b..f72762a588a 100644 --- a/src/comp/middle/typeck.rs +++ b/src/comp/middle/typeck.rs @@ -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); } } diff --git a/src/comp/util/common.rs b/src/comp/util/common.rs index 3ffef690334..a6cd47278b6 100644 --- a/src/comp/util/common.rs +++ b/src/comp/util/common.rs @@ -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; }