@@ -61,52 +61,54 @@ pub fn field_exprs(fields: ~[ast::Field]) -> ~[@ast::Expr] {
61
61
}
62
62
63
63
struct LoopQueryVisitor < ' self > {
64
- p : & ' self fn ( & ast:: Expr_ ) -> bool
64
+ p : & ' self fn ( & ast:: Expr_ ) -> bool ,
65
+ flag : bool ,
65
66
}
66
67
67
- impl < ' self > Visitor < @ mut bool > for LoopQueryVisitor < ' self > {
68
- fn visit_expr ( & mut self , e : @ast:: Expr , flag : @ mut bool ) {
69
- * flag |= ( self . p ) ( & e. node ) ;
68
+ impl < ' self > Visitor < ( ) > for LoopQueryVisitor < ' self > {
69
+ fn visit_expr ( & mut self , e : @ast:: Expr , _ : ( ) ) {
70
+ self . flag |= ( self . p ) ( & e. node ) ;
70
71
match e. node {
71
72
// Skip inner loops, since a break in the inner loop isn't a
72
73
// break inside the outer loop
73
74
ast:: ExprLoop ( * ) | ast:: ExprWhile ( * ) => { }
74
- _ => visit:: walk_expr ( self , e, flag )
75
+ _ => visit:: walk_expr ( self , e, ( ) )
75
76
}
76
77
}
77
78
}
78
79
79
80
// Takes a predicate p, returns true iff p is true for any subexpressions
80
81
// of b -- skipping any inner loops (loop, while, loop_body)
81
82
pub fn loop_query ( b : & ast:: Block , p : & fn ( & ast:: Expr_ ) -> bool ) -> bool {
82
- let rs = @mut false ;
83
83
let mut v = LoopQueryVisitor {
84
84
p : p,
85
+ flag : false ,
85
86
} ;
86
- visit:: walk_block ( & mut v, b, rs ) ;
87
- return * rs ;
87
+ visit:: walk_block ( & mut v, b, ( ) ) ;
88
+ return v . flag ;
88
89
}
89
90
90
91
struct BlockQueryVisitor < ' self > {
91
- p : & ' self fn ( @ast:: Expr ) -> bool
92
+ p : & ' self fn ( @ast:: Expr ) -> bool ,
93
+ flag : bool ,
92
94
}
93
95
94
- impl < ' self > Visitor < @ mut bool > for BlockQueryVisitor < ' self > {
95
- fn visit_expr ( & mut self , e : @ast:: Expr , flag : @ mut bool ) {
96
- * flag |= ( self . p ) ( e) ;
97
- visit:: walk_expr ( self , e, flag )
96
+ impl < ' self > Visitor < ( ) > for BlockQueryVisitor < ' self > {
97
+ fn visit_expr ( & mut self , e : @ast:: Expr , _ : ( ) ) {
98
+ self . flag |= ( self . p ) ( e) ;
99
+ visit:: walk_expr ( self , e, ( ) )
98
100
}
99
101
}
100
102
101
103
// Takes a predicate p, returns true iff p is true for any subexpressions
102
104
// of b -- skipping any inner loops (loop, while, loop_body)
103
105
pub fn block_query ( b : & ast:: Block , p : & fn ( @ast:: Expr ) -> bool ) -> bool {
104
- let rs = @mut false ;
105
106
let mut v = BlockQueryVisitor {
106
107
p : p,
108
+ flag : false ,
107
109
} ;
108
- visit:: walk_block ( & mut v, b, rs ) ;
109
- return * rs ;
110
+ visit:: walk_block ( & mut v, b, ( ) ) ;
111
+ return v . flag ;
110
112
}
111
113
112
114
pub fn local_rhs_span ( l : @ast:: Local , def : Span ) -> Span {
0 commit comments