@@ -26,32 +26,9 @@ use util::ppaux::Repr;
2626
2727///////////////////////////////////////////////////////////////////////////
2828// 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- }
5429
30+ /// This trait defines the callbacks you can expect to receive when
31+ /// employing the ExprUseVisitor.
5532pub trait Delegate {
5633 // The value found at `cmt` is either copied or moved, depending
5734 // on mode.
@@ -91,6 +68,28 @@ pub trait Delegate {
9168 mode : MutateMode ) ;
9269}
9370
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+
9493///////////////////////////////////////////////////////////////////////////
9594// The ExprUseVisitor type
9695//
@@ -112,7 +111,7 @@ pub struct ExprUseVisitor<'d,'t,TYPER> {
112111//
113112// Note that this macro appears similar to try!(), but, unlike try!(),
114113// it does not propagate the error.
115- macro_rules! ignore_err (
114+ macro_rules! return_if_err (
116115 ( $inp: expr) => (
117116 match $inp {
118117 Ok ( v) => v,
@@ -174,7 +173,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
174173 fn consume_expr ( & mut self , expr : & ast:: Expr ) {
175174 debug ! ( "consume_expr(expr={})" , expr. repr( self . tcx( ) ) ) ;
176175
177- let cmt = ignore_err ! ( self . mc. cat_expr( expr) ) ;
176+ let cmt = return_if_err ! ( self . mc. cat_expr( expr) ) ;
178177 self . delegate_consume ( expr. id , expr. span , cmt) ;
179178
180179 match expr. node {
@@ -200,7 +199,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
200199 assignment_expr : & ast:: Expr ,
201200 expr : & ast:: Expr ,
202201 mode : MutateMode ) {
203- let cmt = ignore_err ! ( self . mc. cat_expr( expr) ) ;
202+ let cmt = return_if_err ! ( self . mc. cat_expr( expr) ) ;
204203 self . delegate . mutate ( assignment_expr. id , assignment_expr. span , cmt, mode) ;
205204 self . walk_expr ( expr) ;
206205 }
@@ -213,7 +212,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
213212 debug ! ( "borrow_expr(expr={}, r={}, bk={})" ,
214213 expr. repr( self . tcx( ) ) , r. repr( self . tcx( ) ) , bk. repr( self . tcx( ) ) ) ;
215214
216- let cmt = ignore_err ! ( self . mc. cat_expr( expr) ) ;
215+ let cmt = return_if_err ! ( self . mc. cat_expr( expr) ) ;
217216 self . delegate . borrow ( expr. id , expr. span , cmt, r, bk, cause) ;
218217
219218 // Note: Unlike consume, we can ignore ExprParen. cat_expr
@@ -284,7 +283,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
284283 // treatment of the discriminant is handled while
285284 // walking the arms:
286285 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) ) ;
288287 for arm in arms. iter ( ) {
289288 self . walk_arm ( discr_cmt. clone ( ) , arm) ;
290289 }
@@ -471,7 +470,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
471470 // "assigns", which is handled by
472471 // `walk_pat`:
473472 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) ) ;
475474 self . walk_pat ( init_cmt, local. pat ) ;
476475 }
477476 }
@@ -508,7 +507,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
508507 None => { return ; }
509508 } ;
510509
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) ) ;
512511
513512 // Select just those fields of the `with`
514513 // expression that will actually be used
@@ -558,7 +557,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
558557 // input and stores it into the resulting rvalue.
559558 debug ! ( "walk_adjustment(AutoAddEnv|AutoObject)" ) ;
560559 let cmt_unadjusted =
561- ignore_err ! ( self . mc. cat_expr_unadjusted( expr) ) ;
560+ return_if_err ! ( self . mc. cat_expr_unadjusted( expr) ) ;
562561 self . delegate_consume ( expr. id , expr. span , cmt_unadjusted) ;
563562 }
564563 ty:: AutoDerefRef ( ty:: AutoDerefRef {
@@ -596,7 +595,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
596595 match self . typer . node_method_ty ( deref_id) {
597596 None => { }
598597 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) ) ;
600599 let self_ty = * ty:: ty_fn_args ( method_ty) . get ( 0 ) ;
601600 let ( m, r) = match ty:: get ( self_ty) . sty {
602601 ty:: ty_rptr( r, ref m) => ( m. mutbl , r) ,
@@ -618,7 +617,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
618617 autoderefs : uint ) {
619618 debug ! ( "walk_autoref expr={} autoderefs={}" , expr. repr( self . tcx( ) ) , autoderefs) ;
620619
621- let cmt_derefd = ignore_err ! (
620+ let cmt_derefd = return_if_err ! (
622621 self . mc. cat_expr_autoderefd( expr, autoderefs) ) ;
623622
624623 debug ! ( "walk_autoref: cmt_derefd={}" , cmt_derefd. repr( self . tcx( ) ) ) ;
@@ -699,7 +698,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
699698 let tcx = typer. tcx ( ) ;
700699 let def_map = & self . typer . tcx ( ) . def_map ;
701700 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| {
703702 if pat_util:: pat_is_binding( def_map, pat) {
704703 let tcx = typer. tcx( ) ;
705704
@@ -810,9 +809,9 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
810809 freevars : & [ freevars:: freevar_entry ] ) {
811810 for freevar in freevars. iter ( ) {
812811 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) ) ;
816815
817816 // Lookup the kind of borrow the callee requires, as
818817 // inferred by regionbk
@@ -834,9 +833,9 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
834833 closure_expr : & ast:: Expr ,
835834 freevars : & [ freevars:: freevar_entry ] ) {
836835 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) ) ;
840839 self . delegate_consume ( closure_expr. id , freevar. span , cmt_var) ;
841840 }
842841 }
0 commit comments