Skip to content

Commit 7caf8a0

Browse files
committed
Convert gather_locals to use visit.
1 parent 9fadab6 commit 7caf8a0

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

src/comp/middle/typeck.rs

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import ast::path_to_str;
66
import ast::respan;
77
import ast::spanned;
88
import syntax::walk;
9+
import syntax::visit;
910
import metadata::csearch;
1011
import driver::session;
1112
import util::common;
@@ -1211,49 +1212,51 @@ fn gather_locals(&@crate_ctxt ccx, &ast::_fn f,
12111212
f.decl.inputs.(i).ident, some[ty::t](arg.ty));
12121213
i += 1u;
12131214
}
1214-
// Add explicitly-declared locals.
12151215

1216-
fn visit_local_pre(@crate_ctxt ccx, @ty::unify::var_bindings vb,
1217-
hashmap[ast::node_id, int] locals,
1218-
hashmap[ast::node_id, ast::ident] local_names,
1219-
@mutable int nvi, &@ast::local local) {
1216+
// Add explicitly-declared locals.
1217+
fn visit_local(@crate_ctxt ccx, @ty::unify::var_bindings vb,
1218+
hashmap[ast::node_id, int] locals,
1219+
hashmap[ast::node_id, ast::ident] local_names,
1220+
@mutable int nvi, &@ast::local local,
1221+
&() e, &visit::vt[()] v) {
12201222
alt (local.node.ty) {
12211223
case (none) {
12221224
// Auto slot.
1223-
12241225
assign(ccx.tcx, vb, locals, local_names, nvi, local.node.id,
12251226
local.node.ident, none[ty::t]);
12261227
}
12271228
case (some(?ast_ty)) {
12281229
// Explicitly typed slot.
1229-
12301230
auto local_ty = ast_ty_to_ty_crate(ccx, ast_ty);
12311231
assign(ccx.tcx, vb, locals, local_names, nvi, local.node.id,
12321232
local.node.ident, some[ty::t](local_ty));
12331233
}
12341234
}
1235+
visit::visit_local(local, e, v);
12351236
}
1236-
// Add pattern bindings.
12371237

1238-
fn visit_pat_pre(@crate_ctxt ccx, @ty::unify::var_bindings vb,
1239-
hashmap[ast::node_id, int] locals,
1240-
hashmap[ast::node_id, ast::ident] local_names,
1241-
@mutable int nvi, &@ast::pat p) {
1238+
// Add pattern bindings.
1239+
fn visit_pat(@crate_ctxt ccx, @ty::unify::var_bindings vb,
1240+
hashmap[ast::node_id, int] locals,
1241+
hashmap[ast::node_id, ast::ident] local_names,
1242+
@mutable int nvi, &@ast::pat p,
1243+
&() e, &visit::vt[()] v) {
12421244
alt (p.node) {
12431245
case (ast::pat_bind(?ident)) {
12441246
assign(ccx.tcx, vb, locals, local_names, nvi,
12451247
p.id, ident, none[ty::t]);
12461248
}
12471249
case (_) {/* no-op */ }
12481250
}
1251+
visit::visit_pat(p, e, v);
12491252
}
12501253
auto visit =
1251-
rec(visit_local_pre=bind visit_local_pre(ccx, vb, locals, local_names,
1252-
nvi, _),
1253-
visit_pat_pre=bind visit_pat_pre(ccx, vb, locals, local_names,
1254-
nvi, _)
1255-
with walk::default_visitor());
1256-
walk::walk_block(visit, f.body);
1254+
@rec(visit_local=bind visit_local(ccx, vb, locals, local_names,
1255+
nvi, _, _, _),
1256+
visit_pat=bind visit_pat(ccx, vb, locals, local_names,
1257+
nvi, _, _, _)
1258+
with *visit::default_visitor());
1259+
visit::visit_block(f.body, (), visit::mk_vt(visit));
12571260
ret rec(var_bindings=vb,
12581261
locals=locals,
12591262
local_names=local_names,

0 commit comments

Comments
 (0)