diff options
| author | Marijn Haverbeke <[email protected]> | 2011-05-13 11:31:27 +0200 |
|---|---|---|
| committer | Marijn Haverbeke <[email protected]> | 2011-05-13 11:35:25 +0200 |
| commit | 7082bf4478d3c4dab5a46bf2df18b57a496023f4 (patch) | |
| tree | 951267554233423ee965f691d3c2a71bdef8a21c /src/comp/middle | |
| parent | Add visit_arm and visit_method to walk.rs (diff) | |
| download | rust-7082bf4478d3c4dab5a46bf2df18b57a496023f4.tar.xz rust-7082bf4478d3c4dab5a46bf2df18b57a496023f4.zip | |
Ensure visit_ty is called on type parameters during walk
Diffstat (limited to 'src/comp/middle')
| -rw-r--r-- | src/comp/middle/walk.rs | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/comp/middle/walk.rs b/src/comp/middle/walk.rs index 43695b32..8a3c72f4 100644 --- a/src/comp/middle/walk.rs +++ b/src/comp/middle/walk.rs @@ -170,13 +170,31 @@ fn walk_ty(&ast_visitor v, @ast::ty t) { walk_ty(v, m.output); } } - case (ast::ty_path(_, _)) {} + case (ast::ty_path(?p, _)) { + for (@ast::ty tp in p.node.types) { + walk_ty(v, tp); + } + } case (ast::ty_type) {} case (ast::ty_constr(?t, _)) { walk_ty(v, t); } } v.visit_ty_post(t); } +fn walk_pat(&ast_visitor v, &@ast::pat p) { + alt (p.node) { + case (ast::pat_tag(?path, ?children, _)) { + for (@ast::ty tp in path.node.types) { + walk_ty(v, tp); + } + for (@ast::pat child in children) { + walk_pat(v, child); + } + } + case (_) {} + } +} + fn walk_native_mod(&ast_visitor v, &ast::native_mod nm) { if (!v.keep_going()) { ret; } for (@ast::view_item vi in nm.view_items) { @@ -349,6 +367,7 @@ fn walk_expr(&ast_visitor v, @ast::expr e) { case (ast::expr_alt(?x, ?arms, _)) { walk_expr(v, x); for (ast::arm a in arms) { + walk_pat(v, a.pat); v.visit_arm_pre(a); walk_block(v, a.block); v.visit_arm_post(a); @@ -380,7 +399,11 @@ fn walk_expr(&ast_visitor v, @ast::expr e) { walk_expr(v, a); walk_expr(v, b); } - case (ast::expr_path(_, _)) { } + case (ast::expr_path(?p, _)) { + for (@ast::ty tp in p.node.types) { + walk_ty(v, tp); + } + } case (ast::expr_ext(_, ?args, ?body, ?expansion, _)) { // Only walk expansion, not args/body. walk_expr(v, expansion); |