@@ -26,32 +26,9 @@ use util::ppaux::Repr;
26
26
27
27
///////////////////////////////////////////////////////////////////////////
28
28
// The Delegate trait
29
- //
30
- // This trait defines the callbacks you can expect to receiver when
31
- // employing the ExprUseVisitor.
32
-
33
- #[ deriving( Eq ) ]
34
- pub enum LoanCause {
35
- ClosureCapture ( Span ) ,
36
- AddrOf ,
37
- AutoRef ,
38
- RefBinding ,
39
- OverloadedOperator ,
40
- ClosureInvocation
41
- }
42
-
43
- #[ deriving( Eq , Show ) ]
44
- pub enum ConsumeMode {
45
- Copy , // reference to x where x has a type that copies
46
- Move , // reference to x where x has a type that moves
47
- }
48
-
49
- #[ deriving( Eq , Show ) ]
50
- pub enum MutateMode {
51
- JustWrite , // x = y
52
- WriteAndRead , // x += y
53
- }
54
29
30
+ /// This trait defines the callbacks you can expect to receive when
31
+ /// employing the ExprUseVisitor.
55
32
pub trait Delegate {
56
33
// The value found at `cmt` is either copied or moved, depending
57
34
// on mode.
@@ -91,6 +68,28 @@ pub trait Delegate {
91
68
mode : MutateMode ) ;
92
69
}
93
70
71
+ #[ deriving( Eq ) ]
72
+ pub enum LoanCause {
73
+ ClosureCapture ( Span ) ,
74
+ AddrOf ,
75
+ AutoRef ,
76
+ RefBinding ,
77
+ OverloadedOperator ,
78
+ ClosureInvocation
79
+ }
80
+
81
+ #[ deriving( Eq , Show ) ]
82
+ pub enum ConsumeMode {
83
+ Copy , // reference to x where x has a type that copies
84
+ Move , // reference to x where x has a type that moves
85
+ }
86
+
87
+ #[ deriving( Eq , Show ) ]
88
+ pub enum MutateMode {
89
+ JustWrite , // x = y
90
+ WriteAndRead , // x += y
91
+ }
92
+
94
93
///////////////////////////////////////////////////////////////////////////
95
94
// The ExprUseVisitor type
96
95
//
@@ -112,7 +111,7 @@ pub struct ExprUseVisitor<'d,'t,TYPER> {
112
111
//
113
112
// Note that this macro appears similar to try!(), but, unlike try!(),
114
113
// it does not propagate the error.
115
- macro_rules! ignore_err (
114
+ macro_rules! return_if_err (
116
115
( $inp: expr) => (
117
116
match $inp {
118
117
Ok ( v) => v,
@@ -174,7 +173,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
174
173
fn consume_expr ( & mut self , expr : & ast:: Expr ) {
175
174
debug ! ( "consume_expr(expr={})" , expr. repr( self . tcx( ) ) ) ;
176
175
177
- let cmt = ignore_err ! ( self . mc. cat_expr( expr) ) ;
176
+ let cmt = return_if_err ! ( self . mc. cat_expr( expr) ) ;
178
177
self . delegate_consume ( expr. id , expr. span , cmt) ;
179
178
180
179
match expr. node {
@@ -200,7 +199,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
200
199
assignment_expr : & ast:: Expr ,
201
200
expr : & ast:: Expr ,
202
201
mode : MutateMode ) {
203
- let cmt = ignore_err ! ( self . mc. cat_expr( expr) ) ;
202
+ let cmt = return_if_err ! ( self . mc. cat_expr( expr) ) ;
204
203
self . delegate . mutate ( assignment_expr. id , assignment_expr. span , cmt, mode) ;
205
204
self . walk_expr ( expr) ;
206
205
}
@@ -213,7 +212,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
213
212
debug ! ( "borrow_expr(expr={}, r={}, bk={})" ,
214
213
expr. repr( self . tcx( ) ) , r. repr( self . tcx( ) ) , bk. repr( self . tcx( ) ) ) ;
215
214
216
- let cmt = ignore_err ! ( self . mc. cat_expr( expr) ) ;
215
+ let cmt = return_if_err ! ( self . mc. cat_expr( expr) ) ;
217
216
self . delegate . borrow ( expr. id , expr. span , cmt, r, bk, cause) ;
218
217
219
218
// Note: Unlike consume, we can ignore ExprParen. cat_expr
@@ -284,7 +283,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
284
283
// treatment of the discriminant is handled while
285
284
// walking the arms:
286
285
self . walk_expr ( discr) ;
287
- let discr_cmt = ignore_err ! ( self . mc. cat_expr( discr) ) ;
286
+ let discr_cmt = return_if_err ! ( self . mc. cat_expr( discr) ) ;
288
287
for arm in arms. iter ( ) {
289
288
self . walk_arm ( discr_cmt. clone ( ) , arm) ;
290
289
}
@@ -471,7 +470,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
471
470
// "assigns", which is handled by
472
471
// `walk_pat`:
473
472
self . walk_expr ( expr) ;
474
- let init_cmt = ignore_err ! ( self . mc. cat_expr( expr) ) ;
473
+ let init_cmt = return_if_err ! ( self . mc. cat_expr( expr) ) ;
475
474
self . walk_pat ( init_cmt, local. pat ) ;
476
475
}
477
476
}
@@ -508,7 +507,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
508
507
None => { return ; }
509
508
} ;
510
509
511
- let with_cmt = ignore_err ! ( self . mc. cat_expr( with_expr) ) ;
510
+ let with_cmt = return_if_err ! ( self . mc. cat_expr( with_expr) ) ;
512
511
513
512
// Select just those fields of the `with`
514
513
// expression that will actually be used
@@ -558,7 +557,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
558
557
// input and stores it into the resulting rvalue.
559
558
debug ! ( "walk_adjustment(AutoAddEnv|AutoObject)" ) ;
560
559
let cmt_unadjusted =
561
- ignore_err ! ( self . mc. cat_expr_unadjusted( expr) ) ;
560
+ return_if_err ! ( self . mc. cat_expr_unadjusted( expr) ) ;
562
561
self . delegate_consume ( expr. id , expr. span , cmt_unadjusted) ;
563
562
}
564
563
ty:: AutoDerefRef ( ty:: AutoDerefRef {
@@ -596,7 +595,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
596
595
match self . typer . node_method_ty ( deref_id) {
597
596
None => { }
598
597
Some ( method_ty) => {
599
- let cmt = ignore_err ! ( self . mc. cat_expr_autoderefd( expr, i) ) ;
598
+ let cmt = return_if_err ! ( self . mc. cat_expr_autoderefd( expr, i) ) ;
600
599
let self_ty = * ty:: ty_fn_args ( method_ty) . get ( 0 ) ;
601
600
let ( m, r) = match ty:: get ( self_ty) . sty {
602
601
ty:: ty_rptr( r, ref m) => ( m. mutbl , r) ,
@@ -618,7 +617,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
618
617
autoderefs : uint ) {
619
618
debug ! ( "walk_autoref expr={} autoderefs={}" , expr. repr( self . tcx( ) ) , autoderefs) ;
620
619
621
- let cmt_derefd = ignore_err ! (
620
+ let cmt_derefd = return_if_err ! (
622
621
self . mc. cat_expr_autoderefd( expr, autoderefs) ) ;
623
622
624
623
debug ! ( "walk_autoref: cmt_derefd={}" , cmt_derefd. repr( self . tcx( ) ) ) ;
@@ -699,7 +698,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
699
698
let tcx = typer. tcx ( ) ;
700
699
let def_map = & self . typer . tcx ( ) . def_map ;
701
700
let delegate = & mut self . delegate ;
702
- ignore_err ! ( mc. cat_pattern( cmt_discr, pat, |mc, cmt_pat, pat| {
701
+ return_if_err ! ( mc. cat_pattern( cmt_discr, pat, |mc, cmt_pat, pat| {
703
702
if pat_util:: pat_is_binding( def_map, pat) {
704
703
let tcx = typer. tcx( ) ;
705
704
@@ -810,9 +809,9 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
810
809
freevars : & [ freevars:: freevar_entry ] ) {
811
810
for freevar in freevars. iter ( ) {
812
811
let id_var = ast_util:: def_id_of_def ( freevar. def ) . node ;
813
- let cmt_var = ignore_err ! ( self . cat_captured_var( closure_expr. id,
814
- closure_expr. span,
815
- freevar. def) ) ;
812
+ let cmt_var = return_if_err ! ( self . cat_captured_var( closure_expr. id,
813
+ closure_expr. span,
814
+ freevar. def) ) ;
816
815
817
816
// Lookup the kind of borrow the callee requires, as
818
817
// inferred by regionbk
@@ -834,9 +833,9 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
834
833
closure_expr : & ast:: Expr ,
835
834
freevars : & [ freevars:: freevar_entry ] ) {
836
835
for freevar in freevars. iter ( ) {
837
- let cmt_var = ignore_err ! ( self . cat_captured_var( closure_expr. id,
838
- closure_expr. span,
839
- freevar. def) ) ;
836
+ let cmt_var = return_if_err ! ( self . cat_captured_var( closure_expr. id,
837
+ closure_expr. span,
838
+ freevar. def) ) ;
840
839
self . delegate_consume ( closure_expr. id , freevar. span , cmt_var) ;
841
840
}
842
841
}
0 commit comments