@@ -302,22 +302,6 @@ pub struct ExprUseVisitor<'d,'t,'tcx,TYPER:'t> {
302
302
param_env : ParameterEnvironment < ' tcx > ,
303
303
}
304
304
305
- // If the TYPER results in an error, it's because the type check
306
- // failed (or will fail, when the error is uncovered and reported
307
- // during writeback). In this case, we just ignore this part of the
308
- // code.
309
- //
310
- // Note that this macro appears similar to try!(), but, unlike try!(),
311
- // it does not propagate the error.
312
- macro_rules! return_if_err {
313
- ( $inp: expr) => (
314
- match $inp {
315
- Ok ( v) => v,
316
- Err ( ( ) ) => return
317
- }
318
- )
319
- }
320
-
321
305
/// Whether the elements of an overloaded operation are passed by value or by reference
322
306
enum PassArgs {
323
307
ByValue ,
@@ -348,7 +332,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
348
332
decl : & ast:: FnDecl ,
349
333
body : & ast:: Block ) {
350
334
for arg in decl. inputs . iter ( ) {
351
- let arg_ty = return_if_err ! ( self . typer. node_ty( arg. pat. id) ) ;
335
+ let arg_ty = self . typer . node_ty ( arg. pat . id ) ;
352
336
353
337
let fn_body_scope = region:: CodeExtent :: from_node_id ( body. id ) ;
354
338
let arg_cmt = self . mc . cat_rvalue (
@@ -385,7 +369,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
385
369
pub fn consume_expr ( & mut self , expr : & ast:: Expr ) {
386
370
debug ! ( "consume_expr(expr={})" , expr. repr( self . tcx( ) ) ) ;
387
371
388
- let cmt = return_if_err ! ( self . mc. cat_expr( expr) ) ;
372
+ let cmt = self . mc . cat_expr ( expr) ;
389
373
self . delegate_consume ( expr. id , expr. span , cmt) ;
390
374
self . walk_expr ( expr) ;
391
375
}
@@ -394,7 +378,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
394
378
assignment_expr : & ast:: Expr ,
395
379
expr : & ast:: Expr ,
396
380
mode : MutateMode ) {
397
- let cmt = return_if_err ! ( self . mc. cat_expr( expr) ) ;
381
+ let cmt = self . mc . cat_expr ( expr) ;
398
382
self . delegate . mutate ( assignment_expr. id , assignment_expr. span , cmt, mode) ;
399
383
self . walk_expr ( expr) ;
400
384
}
@@ -407,7 +391,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
407
391
debug ! ( "borrow_expr(expr={}, r={}, bk={})" ,
408
392
expr. repr( self . tcx( ) ) , r. repr( self . tcx( ) ) , bk. repr( self . tcx( ) ) ) ;
409
393
410
- let cmt = return_if_err ! ( self . mc. cat_expr( expr) ) ;
394
+ let cmt = self . mc . cat_expr ( expr) ;
411
395
self . delegate . borrow ( expr. id , expr. span , cmt, r, bk, cause) ;
412
396
413
397
// Note: Unlike consume, we can ignore ExprParen. cat_expr
@@ -500,7 +484,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
500
484
}
501
485
502
486
ast:: ExprMatch ( ref discr, ref arms, _) => {
503
- let discr_cmt = return_if_err ! ( self . mc. cat_expr( & * * discr) ) ;
487
+ let discr_cmt = self . mc . cat_expr ( & * * discr) ;
504
488
self . borrow_expr ( & * * discr, ty:: ReEmpty , ty:: ImmBorrow , MatchDiscriminant ) ;
505
489
506
490
// treatment of the discriminant is handled while walking the arms.
@@ -559,7 +543,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
559
543
560
544
// Fetch the type of the value that the iteration yields to
561
545
// produce the pattern's categorized mutable type.
562
- let pattern_type = return_if_err ! ( self . typer. node_ty( pat. id) ) ;
546
+ let pattern_type = self . typer . node_ty ( pat. id ) ;
563
547
let blk_scope = region:: CodeExtent :: from_node_id ( blk. id ) ;
564
548
let pat_cmt = self . mc . cat_rvalue ( pat. id ,
565
549
pat. span ,
@@ -647,7 +631,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
647
631
}
648
632
649
633
fn walk_callee ( & mut self , call : & ast:: Expr , callee : & ast:: Expr ) {
650
- let callee_ty = return_if_err ! ( self . typer. expr_ty_adjusted( callee) ) ;
634
+ let callee_ty = self . typer . expr_ty_adjusted ( callee) ;
651
635
debug ! ( "walk_callee: callee={} callee_ty={}" ,
652
636
callee. repr( self . tcx( ) ) , callee_ty. repr( self . tcx( ) ) ) ;
653
637
let call_scope = region:: CodeExtent :: from_node_id ( call. id ) ;
@@ -747,7 +731,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
747
731
// "assigns", which is handled by
748
732
// `walk_pat`:
749
733
self . walk_expr ( & * * expr) ;
750
- let init_cmt = return_if_err ! ( self . mc. cat_expr( & * * expr) ) ;
734
+ let init_cmt = self . mc . cat_expr ( & * * expr) ;
751
735
self . walk_irrefutable_pat ( init_cmt, & * local. pat ) ;
752
736
}
753
737
}
@@ -781,7 +765,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
781
765
None => { return ; }
782
766
} ;
783
767
784
- let with_cmt = return_if_err ! ( self . mc. cat_expr( & * with_expr) ) ;
768
+ let with_cmt = self . mc . cat_expr ( & * with_expr) ;
785
769
786
770
// Select just those fields of the `with`
787
771
// expression that will actually be used
@@ -836,7 +820,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
836
820
// rvalue.
837
821
debug ! ( "walk_adjustment(AutoAddEnv|AdjustReifyFnPointer)" ) ;
838
822
let cmt_unadjusted =
839
- return_if_err ! ( self . mc. cat_expr_unadjusted( expr) ) ;
823
+ self . mc . cat_expr_unadjusted ( expr) ;
840
824
self . delegate_consume ( expr. id , expr. span , cmt_unadjusted) ;
841
825
}
842
826
ty:: AdjustDerefRef ( ty:: AutoDerefRef {
@@ -870,7 +854,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
870
854
match self . typer . node_method_ty ( deref_id) {
871
855
None => { }
872
856
Some ( method_ty) => {
873
- let cmt = return_if_err ! ( self . mc. cat_expr_autoderefd( expr, i) ) ;
857
+ let cmt = self . mc . cat_expr_autoderefd ( expr, i) ;
874
858
let self_ty = ty:: ty_fn_args ( method_ty) [ 0 ] ;
875
859
let ( m, r) = match self_ty. sty {
876
860
ty:: ty_rptr( r, ref m) => ( m. mutbl , r) ,
@@ -900,15 +884,14 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
900
884
assert ! ( n == 1 , format!( "Expected exactly 1 deref with Uniq \
901
885
AutoRefs, found: {}", n) ) ;
902
886
let cmt_unadjusted =
903
- return_if_err ! ( self . mc. cat_expr_unadjusted( expr) ) ;
887
+ self . mc . cat_expr_unadjusted ( expr) ;
904
888
self . delegate_consume ( expr. id , expr. span , cmt_unadjusted) ;
905
889
return ;
906
890
}
907
891
_ => { }
908
892
}
909
893
910
- let cmt_derefd = return_if_err ! (
911
- self . mc. cat_expr_autoderefd( expr, n) ) ;
894
+ let cmt_derefd = self . mc . cat_expr_autoderefd ( expr, n) ;
912
895
debug ! ( "walk_adjustment: cmt_derefd={}" ,
913
896
cmt_derefd. repr( self . tcx( ) ) ) ;
914
897
@@ -1001,7 +984,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1001
984
mode : & mut TrackMatchMode < Span > ) {
1002
985
debug ! ( "determine_pat_move_mode cmt_discr={} pat={}" , cmt_discr. repr( self . tcx( ) ) ,
1003
986
pat. repr( self . tcx( ) ) ) ;
1004
- return_if_err ! ( self . mc. cat_pattern( cmt_discr, pat, |_mc, cmt_pat, pat| {
987
+ self . mc . cat_pattern ( cmt_discr, pat, |_mc, cmt_pat, pat| {
1005
988
let tcx = self . typer . tcx ( ) ;
1006
989
let def_map = & self . typer . tcx ( ) . def_map ;
1007
990
if pat_util:: pat_is_binding ( def_map, pat) {
@@ -1024,7 +1007,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1024
1007
}
1025
1008
}
1026
1009
}
1027
- } ) ) ;
1010
+ } ) ;
1028
1011
}
1029
1012
1030
1013
/// The core driver for walking a pattern; `match_mode` must be
@@ -1039,11 +1022,11 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1039
1022
1040
1023
let mc = & self . mc ;
1041
1024
let typer = self . typer ;
1042
- let tcx = typer. tcx ( ) ;
1043
1025
let def_map = & self . typer . tcx ( ) . def_map ;
1044
1026
let delegate = & mut self . delegate ;
1045
1027
let param_env = & mut self . param_env ;
1046
- return_if_err ! ( mc. cat_pattern( cmt_discr. clone( ) , pat, |mc, cmt_pat, pat| {
1028
+
1029
+ mc. cat_pattern ( cmt_discr. clone ( ) , pat, |mc, cmt_pat, pat| {
1047
1030
if pat_util:: pat_is_binding ( def_map, pat) {
1048
1031
let tcx = typer. tcx ( ) ;
1049
1032
@@ -1053,17 +1036,13 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1053
1036
match_mode) ;
1054
1037
1055
1038
// pat_ty: the type of the binding being produced.
1056
- let pat_ty = return_if_err! ( typer. node_ty( pat. id) ) ;
1039
+ let pat_ty = typer. node_ty ( pat. id ) ;
1057
1040
1058
1041
// Each match binding is effectively an assignment to the
1059
1042
// binding being produced.
1060
1043
let def = def_map. borrow ( ) [ pat. id ] . clone ( ) ;
1061
- match mc. cat_def( pat. id, pat. span, pat_ty, def) {
1062
- Ok ( binding_cmt) => {
1063
- delegate. mutate( pat. id, pat. span, binding_cmt, Init ) ;
1064
- }
1065
- Err ( _) => { }
1066
- }
1044
+ let binding_cmt = mc. cat_def ( pat. id , pat. span , pat_ty, def) ;
1045
+ delegate. mutate ( pat. id , pat. span , binding_cmt, Init ) ;
1067
1046
1068
1047
// It is also a borrow or copy/move of the value being matched.
1069
1048
match pat. node {
@@ -1097,15 +1076,8 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1097
1076
// borrow of the elements of the vector being
1098
1077
// matched.
1099
1078
1100
- let ( slice_cmt, slice_mutbl, slice_r) = {
1101
- match mc. cat_slice_pattern( cmt_pat, & * * slice_pat) {
1102
- Ok ( v) => v,
1103
- Err ( ( ) ) => {
1104
- tcx. sess. span_bug( slice_pat. span,
1105
- "Err from mc" )
1106
- }
1107
- }
1108
- } ;
1079
+ let ( slice_cmt, slice_mutbl, slice_r) =
1080
+ mc. cat_slice_pattern ( cmt_pat, & * * slice_pat) ;
1109
1081
1110
1082
// Note: We declare here that the borrow
1111
1083
// occurs upon entering the `[...]`
@@ -1135,13 +1107,13 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1135
1107
_ => { }
1136
1108
}
1137
1109
}
1138
- } ) ) ;
1110
+ } ) ;
1139
1111
1140
1112
// Do a second pass over the pattern, calling `matched_pat` on
1141
1113
// the interior nodes (enum variants and structs), as opposed
1142
1114
// to the above loop's visit of than the bindings that form
1143
1115
// the leaves of the pattern tree structure.
1144
- return_if_err ! ( mc. cat_pattern( cmt_discr, pat, |mc, cmt_pat, pat| {
1116
+ mc. cat_pattern ( cmt_discr, pat, |mc, cmt_pat, pat| {
1145
1117
let def_map = def_map. borrow ( ) ;
1146
1118
let tcx = typer. tcx ( ) ;
1147
1119
@@ -1222,7 +1194,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1222
1194
// cases either.
1223
1195
}
1224
1196
}
1225
- } ) ) ;
1197
+ } ) ;
1226
1198
}
1227
1199
1228
1200
fn walk_captures ( & mut self , closure_expr : & ast:: Expr ) {
@@ -1246,9 +1218,9 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1246
1218
freevars : & [ ty:: Freevar ] ) {
1247
1219
for freevar in freevars. iter ( ) {
1248
1220
let id_var = freevar. def . def_id ( ) . node ;
1249
- let cmt_var = return_if_err ! ( self . cat_captured_var( closure_expr. id,
1250
- closure_expr. span,
1251
- freevar. def) ) ;
1221
+ let cmt_var = self . cat_captured_var ( closure_expr. id ,
1222
+ closure_expr. span ,
1223
+ freevar. def ) ;
1252
1224
1253
1225
// Lookup the kind of borrow the callee requires, as
1254
1226
// inferred by regionbk
@@ -1269,13 +1241,11 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1269
1241
closure_expr : & ast:: Expr ,
1270
1242
freevars : & [ ty:: Freevar ] ) {
1271
1243
for freevar in freevars. iter ( ) {
1272
- let cmt_var = return_if_err ! ( self . cat_captured_var( closure_expr. id,
1273
- closure_expr. span,
1274
- freevar. def) ) ;
1275
- let mode = copy_or_move ( self . tcx ( ) ,
1276
- cmt_var. ty ,
1277
- & self . param_env ,
1278
- CaptureMove ) ;
1244
+ let cmt_var = self . cat_captured_var ( closure_expr. id ,
1245
+ closure_expr. span ,
1246
+ freevar. def ) ;
1247
+ let mode = copy_or_move ( self . tcx ( ) , cmt_var. ty ,
1248
+ & self . param_env , CaptureMove ) ;
1279
1249
self . delegate . consume ( closure_expr. id , freevar. span , cmt_var, mode) ;
1280
1250
}
1281
1251
}
@@ -1284,11 +1254,11 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1284
1254
closure_id : ast:: NodeId ,
1285
1255
closure_span : Span ,
1286
1256
upvar_def : def:: Def )
1287
- -> mc:: McResult < mc :: cmt < ' tcx > > {
1257
+ -> mc:: cmt < ' tcx > {
1288
1258
// Create the cmt for the variable being borrowed, from the
1289
1259
// caller's perspective
1290
1260
let var_id = upvar_def. def_id ( ) . node ;
1291
- let var_ty = try! ( self . typer . node_ty ( var_id) ) ;
1261
+ let var_ty = self . typer . node_ty ( var_id) ;
1292
1262
self . mc . cat_def ( closure_id, closure_span, var_ty, upvar_def)
1293
1263
}
1294
1264
}
0 commit comments