Skip to content

Commit fc6fbc1

Browse files
committed
Integrate walk.rs
1 parent 9034a8f commit fc6fbc1

File tree

2 files changed

+29
-23
lines changed

2 files changed

+29
-23
lines changed

src/comp/middle/trans.rs

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3368,38 +3368,44 @@ fn collect_upvars(@block_ctxt cx, &ast.block bloc, &ast.def_id initial_decl)
33683368
hashmap[ast.def_id,()] decls
33693369
);
33703370

3371-
fn fold_expr_path(&env e, &common.span sp, &ast.path p,
3372-
&option.t[ast.def] d, ast.ann a) -> @ast.expr {
3373-
alt (option.get[ast.def](d)) {
3374-
case (ast.def_arg(?did)) { e.refs += vec(did); }
3375-
case (ast.def_local(?did)) { e.refs += vec(did); }
3376-
case (ast.def_upvar(?did)) { e.refs += vec(did); }
3377-
case (_) { /* ignore */ }
3371+
fn walk_expr(env e, @ast.expr expr) {
3372+
alt (expr.node) {
3373+
case (ast.expr_path(?path, ?d, _)) {
3374+
alt (option.get[ast.def](d)) {
3375+
case (ast.def_arg(?did)) {
3376+
_vec.push[ast.def_id](e.refs, did);
3377+
}
3378+
case (ast.def_local(?did)) {
3379+
_vec.push[ast.def_id](e.refs, did);
3380+
}
3381+
case (ast.def_upvar(?did)) {
3382+
_vec.push[ast.def_id](e.refs, did);
3383+
}
3384+
case (_) {}
3385+
}
3386+
}
3387+
case (_) {}
33783388
}
3379-
3380-
ret @fold.respan[ast.expr_](sp, ast.expr_path(p, d, a));
33813389
}
33823390

3383-
fn fold_decl_local(&env e, &common.span sp, @ast.local local)
3384-
-> @ast.decl {
3385-
e.decls.insert(local.id, ());
3386-
ret @fold.respan[ast.decl_](sp, ast.decl_local(local));
3391+
fn walk_decl(env e, @ast.decl decl) {
3392+
alt (decl.node) {
3393+
case (ast.decl_local(?local)) {
3394+
e.decls.insert(local.id, ());
3395+
}
3396+
case (_) {}
3397+
}
33873398
}
33883399

3389-
auto fep = fold_expr_path;
3390-
auto fdl = fold_decl_local;
3391-
auto fld = @rec(
3392-
fold_expr_path=fep,
3393-
fold_decl_local=fdl
3394-
with *fold.new_identity_fold[env]()
3395-
);
3396-
33973400
let vec[ast.def_id] refs = vec();
33983401
let hashmap[ast.def_id,()] decls = new_def_hash[()]();
33993402
decls.insert(initial_decl, ());
34003403
let env e = @rec(mutable refs=refs, decls=decls);
34013404

3402-
fold.fold_block[env](e, fld, bloc);
3405+
auto visitor = @rec(visit_decl_pre = bind walk_decl(e, _),
3406+
visit_expr_pre = bind walk_expr(e, _)
3407+
with walk.default_visitor());
3408+
walk.walk_block(*visitor, bloc);
34033409

34043410
// Calculate (refs - decls). This is the set of captured upvars.
34053411
let vec[ast.def_id] result = vec();

src/comp/middle/walk.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ fn walk_ty(&ast_visitor v, @ast.ty t) {
150150
walk_ty(v, f.mt.ty);
151151
}
152152
}
153-
case (ast.ty_fn(_, _, ?args, ?out)) {
153+
case (ast.ty_fn(_, ?args, ?out)) {
154154
for (ast.ty_arg a in args) {
155155
walk_ty(v, a.ty);
156156
}

0 commit comments

Comments
 (0)