@@ -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 = ty :: expr_ty_adjusted ( self . tcx ( ) , 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 ) ;
@@ -670,22 +654,19 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
670
654
}
671
655
_ => {
672
656
let overloaded_call_type =
673
- match self . tcx ( )
674
- . method_map
675
- . borrow ( )
676
- . get ( & MethodCall :: expr ( call. id ) ) {
677
- Some ( ref method_callee) => {
678
- OverloadedCallType :: from_method_origin (
679
- self . tcx ( ) ,
680
- & method_callee. origin )
681
- }
682
- None => {
683
- self . tcx ( ) . sess . span_bug (
684
- callee. span ,
685
- format ! ( "unexpected callee type {}" ,
686
- callee_ty. repr( self . tcx( ) ) ) [ ] )
687
- }
688
- } ;
657
+ match self . typer . node_method_origin ( MethodCall :: expr ( call. id ) ) {
658
+ Some ( method_origin) => {
659
+ OverloadedCallType :: from_method_origin (
660
+ self . tcx ( ) ,
661
+ & method_origin)
662
+ }
663
+ None => {
664
+ self . tcx ( ) . sess . span_bug (
665
+ callee. span ,
666
+ format ! ( "unexpected callee type {}" ,
667
+ callee_ty. repr( self . tcx( ) ) ) . as_slice ( ) )
668
+ }
669
+ } ;
689
670
match overloaded_call_type {
690
671
FnMutOverloadedCall => {
691
672
self . borrow_expr ( callee,
@@ -747,7 +728,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
747
728
// "assigns", which is handled by
748
729
// `walk_pat`:
749
730
self . walk_expr ( & * * expr) ;
750
- let init_cmt = return_if_err ! ( self . mc. cat_expr( & * * expr) ) ;
731
+ let init_cmt = self . mc . cat_expr ( & * * expr) ;
751
732
self . walk_irrefutable_pat ( init_cmt, & * local. pat ) ;
752
733
}
753
734
}
@@ -781,7 +762,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
781
762
None => { return ; }
782
763
} ;
783
764
784
- let with_cmt = return_if_err ! ( self . mc. cat_expr( & * with_expr) ) ;
765
+ let with_cmt = self . mc . cat_expr ( & * with_expr) ;
785
766
786
767
// Select just those fields of the `with`
787
768
// expression that will actually be used
@@ -836,7 +817,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
836
817
// rvalue.
837
818
debug ! ( "walk_adjustment(AutoAddEnv|AdjustReifyFnPointer)" ) ;
838
819
let cmt_unadjusted =
839
- return_if_err ! ( self . mc. cat_expr_unadjusted( expr) ) ;
820
+ self . mc . cat_expr_unadjusted ( expr) ;
840
821
self . delegate_consume ( expr. id , expr. span , cmt_unadjusted) ;
841
822
}
842
823
ty:: AdjustDerefRef ( ty:: AutoDerefRef {
@@ -870,7 +851,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
870
851
match self . typer . node_method_ty ( deref_id) {
871
852
None => { }
872
853
Some ( method_ty) => {
873
- let cmt = return_if_err ! ( self . mc. cat_expr_autoderefd( expr, i) ) ;
854
+ let cmt = self . mc . cat_expr_autoderefd ( expr, i) ;
874
855
let self_ty = ty:: ty_fn_args ( method_ty) [ 0 ] ;
875
856
let ( m, r) = match self_ty. sty {
876
857
ty:: ty_rptr( r, ref m) => ( m. mutbl , r) ,
@@ -900,15 +881,14 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
900
881
assert ! ( n == 1 , format!( "Expected exactly 1 deref with Uniq \
901
882
AutoRefs, found: {}", n) ) ;
902
883
let cmt_unadjusted =
903
- return_if_err ! ( self . mc. cat_expr_unadjusted( expr) ) ;
884
+ self . mc . cat_expr_unadjusted ( expr) ;
904
885
self . delegate_consume ( expr. id , expr. span , cmt_unadjusted) ;
905
886
return ;
906
887
}
907
888
_ => { }
908
889
}
909
890
910
- let cmt_derefd = return_if_err ! (
911
- self . mc. cat_expr_autoderefd( expr, n) ) ;
891
+ let cmt_derefd = self . mc . cat_expr_autoderefd ( expr, n) ;
912
892
debug ! ( "walk_adjustment: cmt_derefd={}" ,
913
893
cmt_derefd. repr( self . tcx( ) ) ) ;
914
894
@@ -1001,7 +981,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1001
981
mode : & mut TrackMatchMode < Span > ) {
1002
982
debug ! ( "determine_pat_move_mode cmt_discr={} pat={}" , cmt_discr. repr( self . tcx( ) ) ,
1003
983
pat. repr( self . tcx( ) ) ) ;
1004
- return_if_err ! ( self . mc. cat_pattern( cmt_discr, pat, |_mc, cmt_pat, pat| {
984
+ self . mc . cat_pattern ( cmt_discr, pat, |_mc, cmt_pat, pat| {
1005
985
let tcx = self . typer . tcx ( ) ;
1006
986
let def_map = & self . typer . tcx ( ) . def_map ;
1007
987
if pat_util:: pat_is_binding ( def_map, pat) {
@@ -1024,7 +1004,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1024
1004
}
1025
1005
}
1026
1006
}
1027
- } ) ) ;
1007
+ } ) ;
1028
1008
}
1029
1009
1030
1010
/// The core driver for walking a pattern; `match_mode` must be
@@ -1039,11 +1019,11 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1039
1019
1040
1020
let mc = & self . mc ;
1041
1021
let typer = self . typer ;
1042
- let tcx = typer. tcx ( ) ;
1043
1022
let def_map = & self . typer . tcx ( ) . def_map ;
1044
1023
let delegate = & mut self . delegate ;
1045
1024
let param_env = & mut self . param_env ;
1046
- return_if_err ! ( mc. cat_pattern( cmt_discr. clone( ) , pat, |mc, cmt_pat, pat| {
1025
+
1026
+ mc. cat_pattern ( cmt_discr. clone ( ) , pat, |mc, cmt_pat, pat| {
1047
1027
if pat_util:: pat_is_binding ( def_map, pat) {
1048
1028
let tcx = typer. tcx ( ) ;
1049
1029
@@ -1053,17 +1033,13 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1053
1033
match_mode) ;
1054
1034
1055
1035
// pat_ty: the type of the binding being produced.
1056
- let pat_ty = return_if_err! ( typer. node_ty( pat. id) ) ;
1036
+ let pat_ty = typer. node_ty ( pat. id ) ;
1057
1037
1058
1038
// Each match binding is effectively an assignment to the
1059
1039
// binding being produced.
1060
1040
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
- }
1041
+ let binding_cmt = mc. cat_def ( pat. id , pat. span , pat_ty, def) ;
1042
+ delegate. mutate ( pat. id , pat. span , binding_cmt, Init ) ;
1067
1043
1068
1044
// It is also a borrow or copy/move of the value being matched.
1069
1045
match pat. node {
@@ -1097,15 +1073,8 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1097
1073
// borrow of the elements of the vector being
1098
1074
// matched.
1099
1075
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
- } ;
1076
+ let ( slice_cmt, slice_mutbl, slice_r) =
1077
+ mc. cat_slice_pattern ( cmt_pat, & * * slice_pat) ;
1109
1078
1110
1079
// Note: We declare here that the borrow
1111
1080
// occurs upon entering the `[...]`
@@ -1135,13 +1104,13 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1135
1104
_ => { }
1136
1105
}
1137
1106
}
1138
- } ) ) ;
1107
+ } ) ;
1139
1108
1140
1109
// Do a second pass over the pattern, calling `matched_pat` on
1141
1110
// the interior nodes (enum variants and structs), as opposed
1142
1111
// to the above loop's visit of than the bindings that form
1143
1112
// the leaves of the pattern tree structure.
1144
- return_if_err ! ( mc. cat_pattern( cmt_discr, pat, |mc, cmt_pat, pat| {
1113
+ mc. cat_pattern ( cmt_discr, pat, |mc, cmt_pat, pat| {
1145
1114
let def_map = def_map. borrow ( ) ;
1146
1115
let tcx = typer. tcx ( ) ;
1147
1116
@@ -1222,7 +1191,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1222
1191
// cases either.
1223
1192
}
1224
1193
}
1225
- } ) ) ;
1194
+ } ) ;
1226
1195
}
1227
1196
1228
1197
fn walk_captures ( & mut self , closure_expr : & ast:: Expr ) {
@@ -1246,15 +1215,15 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1246
1215
freevars : & [ ty:: Freevar ] ) {
1247
1216
for freevar in freevars. iter ( ) {
1248
1217
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) ) ;
1218
+ let cmt_var = self . cat_captured_var ( closure_expr. id ,
1219
+ closure_expr. span ,
1220
+ freevar. def ) ;
1252
1221
1253
1222
// Lookup the kind of borrow the callee requires, as
1254
1223
// inferred by regionbk
1255
1224
let upvar_id = ty:: UpvarId { var_id : id_var,
1256
1225
closure_expr_id : closure_expr. id } ;
1257
- let upvar_borrow = self . tcx ( ) . upvar_borrow_map . borrow ( ) [ upvar_id] . clone ( ) ;
1226
+ let upvar_borrow = self . typer . upvar_borrow ( upvar_id) ;
1258
1227
1259
1228
self . delegate . borrow ( closure_expr. id ,
1260
1229
closure_expr. span ,
@@ -1269,13 +1238,11 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1269
1238
closure_expr : & ast:: Expr ,
1270
1239
freevars : & [ ty:: Freevar ] ) {
1271
1240
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 ) ;
1241
+ let cmt_var = self . cat_captured_var ( closure_expr. id ,
1242
+ closure_expr. span ,
1243
+ freevar. def ) ;
1244
+ let mode = copy_or_move ( self . tcx ( ) , cmt_var. ty ,
1245
+ & self . param_env , CaptureMove ) ;
1279
1246
self . delegate . consume ( closure_expr. id , freevar. span , cmt_var, mode) ;
1280
1247
}
1281
1248
}
@@ -1284,11 +1251,11 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> {
1284
1251
closure_id : ast:: NodeId ,
1285
1252
closure_span : Span ,
1286
1253
upvar_def : def:: Def )
1287
- -> mc:: McResult < mc :: cmt < ' tcx > > {
1254
+ -> mc:: cmt < ' tcx > {
1288
1255
// Create the cmt for the variable being borrowed, from the
1289
1256
// caller's perspective
1290
1257
let var_id = upvar_def. def_id ( ) . node ;
1291
- let var_ty = try! ( self . typer . node_ty ( var_id) ) ;
1258
+ let var_ty = self . typer . node_ty ( var_id) ;
1292
1259
self . mc . cat_def ( closure_id, closure_span, var_ty, upvar_def)
1293
1260
}
1294
1261
}
0 commit comments