aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarijn Haverbeke <[email protected]>2011-05-13 11:31:27 +0200
committerMarijn Haverbeke <[email protected]>2011-05-13 11:35:25 +0200
commit7082bf4478d3c4dab5a46bf2df18b57a496023f4 (patch)
tree951267554233423ee965f691d3c2a71bdef8a21c /src
parentAdd visit_arm and visit_method to walk.rs (diff)
downloadrust-7082bf4478d3c4dab5a46bf2df18b57a496023f4.tar.xz
rust-7082bf4478d3c4dab5a46bf2df18b57a496023f4.zip
Ensure visit_ty is called on type parameters during walk
Diffstat (limited to 'src')
-rw-r--r--src/comp/middle/walk.rs27
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);