@@ -77,7 +77,6 @@ type parameter).
77
77
*/
78
78
79
79
pub use self :: LvaluePreference :: * ;
80
- pub use self :: DerefArgs :: * ;
81
80
pub use self :: Expectation :: * ;
82
81
use self :: IsBinopAssignment :: * ;
83
82
use self :: TupleArgumentsFlag :: * ;
@@ -2117,7 +2116,7 @@ fn try_overloaded_call<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
2117
2116
method_callee. ty ,
2118
2117
call_expression,
2119
2118
args,
2120
- DontDerefArgs ,
2119
+ AutorefArgs :: No ,
2121
2120
TupleArguments ) ;
2122
2121
fcx. inh . method_map . borrow_mut ( ) . insert ( method_call, method_callee) ;
2123
2122
write_call ( fcx, call_expression, output_type) ;
@@ -2274,7 +2273,7 @@ fn try_overloaded_slice<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
2274
2273
method_ty_or_err,
2275
2274
expr,
2276
2275
args. as_slice ( ) ,
2277
- DoDerefArgs ,
2276
+ AutorefArgs :: Yes ,
2278
2277
DontTupleArguments ) ;
2279
2278
2280
2279
opt_method_ty. map ( |method_ty| {
@@ -2480,7 +2479,7 @@ fn lookup_method_for_for_loop<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
2480
2479
method_type,
2481
2480
iterator_expr,
2482
2481
& [ ] ,
2483
- DontDerefArgs ,
2482
+ AutorefArgs :: No ,
2484
2483
DontTupleArguments ) ;
2485
2484
2486
2485
match method {
@@ -2522,7 +2521,7 @@ fn check_method_argument_types<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
2522
2521
method_fn_ty : Ty < ' tcx > ,
2523
2522
callee_expr : & ast:: Expr ,
2524
2523
args_no_rcvr : & [ & P < ast:: Expr > ] ,
2525
- deref_args : DerefArgs ,
2524
+ autoref_args : AutorefArgs ,
2526
2525
tuple_arguments : TupleArgumentsFlag )
2527
2526
-> ty:: FnOutput < ' tcx > {
2528
2527
if ty:: type_is_error ( method_fn_ty) {
@@ -2538,7 +2537,7 @@ fn check_method_argument_types<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
2538
2537
err_inputs. as_slice ( ) ,
2539
2538
callee_expr,
2540
2539
args_no_rcvr,
2541
- deref_args ,
2540
+ autoref_args ,
2542
2541
false ,
2543
2542
tuple_arguments) ;
2544
2543
ty:: FnConverging ( ty:: mk_err ( ) )
@@ -2551,7 +2550,7 @@ fn check_method_argument_types<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
2551
2550
fty. sig . inputs . slice_from ( 1 ) ,
2552
2551
callee_expr,
2553
2552
args_no_rcvr,
2554
- deref_args ,
2553
+ autoref_args ,
2555
2554
fty. sig . variadic ,
2556
2555
tuple_arguments) ;
2557
2556
fty. sig . output
@@ -2571,7 +2570,7 @@ fn check_argument_types<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
2571
2570
fn_inputs : & [ Ty < ' tcx > ] ,
2572
2571
_callee_expr : & ast:: Expr ,
2573
2572
args : & [ & P < ast:: Expr > ] ,
2574
- deref_args : DerefArgs ,
2573
+ autoref_args : AutorefArgs ,
2575
2574
variadic : bool ,
2576
2575
tuple_arguments : TupleArgumentsFlag ) {
2577
2576
let tcx = fcx. ccx . tcx ;
@@ -2674,8 +2673,8 @@ fn check_argument_types<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
2674
2673
debug ! ( "checking the argument" ) ;
2675
2674
let mut formal_ty = formal_tys[ i] ;
2676
2675
2677
- match deref_args {
2678
- DoDerefArgs => {
2676
+ match autoref_args {
2677
+ AutorefArgs :: Yes => {
2679
2678
match formal_ty. sty {
2680
2679
ty:: ty_rptr( _, mt) => formal_ty = mt. ty ,
2681
2680
ty:: ty_err => ( ) ,
@@ -2690,7 +2689,7 @@ fn check_argument_types<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
2690
2689
}
2691
2690
}
2692
2691
}
2693
- DontDerefArgs => { }
2692
+ AutorefArgs :: No => { }
2694
2693
}
2695
2694
2696
2695
check_expr_coercable_to_type ( fcx, & * * * arg, formal_ty) ;
@@ -2905,12 +2904,12 @@ pub fn lookup_tup_field_ty<'tcx>(tcx: &ty::ctxt<'tcx>,
2905
2904
// Controls whether the arguments are automatically referenced. This is useful
2906
2905
// for overloaded binary and unary operators.
2907
2906
#[ deriving( PartialEq ) ]
2908
- pub enum DerefArgs {
2909
- DontDerefArgs ,
2910
- DoDerefArgs
2907
+ pub enum AutorefArgs {
2908
+ Yes ,
2909
+ No ,
2911
2910
}
2912
2911
2913
- impl Copy for DerefArgs { }
2912
+ impl Copy for AutorefArgs { }
2914
2913
2915
2914
/// Controls whether the arguments are tupled. This is used for the call
2916
2915
/// operator.
@@ -2998,7 +2997,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
2998
2997
fn_sig. inputs . as_slice ( ) ,
2999
2998
f,
3000
2999
args,
3001
- DontDerefArgs ,
3000
+ AutorefArgs :: No ,
3002
3001
fn_sig. variadic ,
3003
3002
DontTupleArguments ) ;
3004
3003
@@ -3048,7 +3047,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
3048
3047
fn_ty,
3049
3048
expr,
3050
3049
args. as_slice ( ) ,
3051
- DontDerefArgs ,
3050
+ AutorefArgs :: No ,
3052
3051
DontTupleArguments ) ;
3053
3052
3054
3053
write_call ( fcx, expr, ret_ty) ;
@@ -3132,7 +3131,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
3132
3131
lhs : & ' a ast:: Expr ,
3133
3132
rhs : Option < & P < ast:: Expr > > ,
3134
3133
unbound_method : F ,
3135
- deref_args : DerefArgs ) -> Ty < ' tcx > where
3134
+ autoref_args : AutorefArgs ) -> Ty < ' tcx > where
3136
3135
F : FnOnce ( ) ,
3137
3136
{
3138
3137
let method = match trait_did {
@@ -3148,7 +3147,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
3148
3147
// traits that don't force left and right to have same
3149
3148
// type.
3150
3149
let ( adj_ty, adjustment) = match lhs_ty. sty {
3151
- ty:: ty_rptr( r_in, mt) if deref_args == DoDerefArgs => {
3150
+ ty:: ty_rptr( r_in, mt) => {
3152
3151
let r_adj = fcx. infcx ( ) . next_region_var ( infer:: Autoref ( lhs. span ) ) ;
3153
3152
fcx. mk_subr ( infer:: Reborrow ( lhs. span ) , r_adj, r_in) ;
3154
3153
let adjusted_ty = ty:: mk_rptr ( fcx. tcx ( ) , r_adj, mt) ;
@@ -3185,7 +3184,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
3185
3184
method_ty,
3186
3185
op_ex,
3187
3186
args. as_slice ( ) ,
3188
- deref_args ,
3187
+ autoref_args ,
3189
3188
DontTupleArguments ) {
3190
3189
ty:: FnConverging ( result_type) => result_type,
3191
3190
ty:: FnDiverging => ty:: mk_err ( )
@@ -3201,7 +3200,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
3201
3200
expected_ty,
3202
3201
op_ex,
3203
3202
args. as_slice ( ) ,
3204
- deref_args ,
3203
+ autoref_args ,
3205
3204
DontTupleArguments ) ;
3206
3205
ty:: mk_err ( )
3207
3206
}
@@ -3320,23 +3319,23 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
3320
3319
rhs : & P < ast:: Expr > ) -> Ty < ' tcx > {
3321
3320
let tcx = fcx. ccx . tcx ;
3322
3321
let lang = & tcx. lang_items ;
3323
- let ( name, trait_did, deref_args ) = match op {
3324
- ast:: BiAdd => ( "add" , lang. add_trait ( ) , DontDerefArgs ) ,
3325
- ast:: BiSub => ( "sub" , lang. sub_trait ( ) , DontDerefArgs ) ,
3326
- ast:: BiMul => ( "mul" , lang. mul_trait ( ) , DontDerefArgs ) ,
3327
- ast:: BiDiv => ( "div" , lang. div_trait ( ) , DontDerefArgs ) ,
3328
- ast:: BiRem => ( "rem" , lang. rem_trait ( ) , DontDerefArgs ) ,
3329
- ast:: BiBitXor => ( "bitxor" , lang. bitxor_trait ( ) , DontDerefArgs ) ,
3330
- ast:: BiBitAnd => ( "bitand" , lang. bitand_trait ( ) , DontDerefArgs ) ,
3331
- ast:: BiBitOr => ( "bitor" , lang. bitor_trait ( ) , DontDerefArgs ) ,
3332
- ast:: BiShl => ( "shl" , lang. shl_trait ( ) , DontDerefArgs ) ,
3333
- ast:: BiShr => ( "shr" , lang. shr_trait ( ) , DontDerefArgs ) ,
3334
- ast:: BiLt => ( "lt" , lang. ord_trait ( ) , DoDerefArgs ) ,
3335
- ast:: BiLe => ( "le" , lang. ord_trait ( ) , DoDerefArgs ) ,
3336
- ast:: BiGe => ( "ge" , lang. ord_trait ( ) , DoDerefArgs ) ,
3337
- ast:: BiGt => ( "gt" , lang. ord_trait ( ) , DoDerefArgs ) ,
3338
- ast:: BiEq => ( "eq" , lang. eq_trait ( ) , DoDerefArgs ) ,
3339
- ast:: BiNe => ( "ne" , lang. eq_trait ( ) , DoDerefArgs ) ,
3322
+ let ( name, trait_did) = match op {
3323
+ ast:: BiAdd => ( "add" , lang. add_trait ( ) ) ,
3324
+ ast:: BiSub => ( "sub" , lang. sub_trait ( ) ) ,
3325
+ ast:: BiMul => ( "mul" , lang. mul_trait ( ) ) ,
3326
+ ast:: BiDiv => ( "div" , lang. div_trait ( ) ) ,
3327
+ ast:: BiRem => ( "rem" , lang. rem_trait ( ) ) ,
3328
+ ast:: BiBitXor => ( "bitxor" , lang. bitxor_trait ( ) ) ,
3329
+ ast:: BiBitAnd => ( "bitand" , lang. bitand_trait ( ) ) ,
3330
+ ast:: BiBitOr => ( "bitor" , lang. bitor_trait ( ) ) ,
3331
+ ast:: BiShl => ( "shl" , lang. shl_trait ( ) ) ,
3332
+ ast:: BiShr => ( "shr" , lang. shr_trait ( ) ) ,
3333
+ ast:: BiLt => ( "lt" , lang. ord_trait ( ) ) ,
3334
+ ast:: BiLe => ( "le" , lang. ord_trait ( ) ) ,
3335
+ ast:: BiGe => ( "ge" , lang. ord_trait ( ) ) ,
3336
+ ast:: BiGt => ( "gt" , lang. ord_trait ( ) ) ,
3337
+ ast:: BiEq => ( "eq" , lang. eq_trait ( ) ) ,
3338
+ ast:: BiNe => ( "ne" , lang. eq_trait ( ) ) ,
3340
3339
ast:: BiAnd | ast:: BiOr => {
3341
3340
check_expr ( fcx, & * * rhs) ;
3342
3341
return ty:: mk_err ( ) ;
@@ -3349,7 +3348,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
3349
3348
ast_util:: binop_to_string( op) ,
3350
3349
actual)
3351
3350
} , lhs_resolved_t, None )
3352
- } , deref_args )
3351
+ } , if ast_util :: is_by_value_binop ( op ) { AutorefArgs :: No } else { AutorefArgs :: Yes } )
3353
3352
}
3354
3353
3355
3354
fn check_user_unop < ' a , ' tcx > ( fcx : & FnCtxt < ' a , ' tcx > ,
@@ -3365,7 +3364,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
3365
3364
format ! ( "cannot apply unary operator `{}` to type `{}`" ,
3366
3365
op_str, actual)
3367
3366
} , rhs_t, None ) ;
3368
- } , DontDerefArgs )
3367
+ } , AutorefArgs :: Yes )
3369
3368
}
3370
3369
3371
3370
// Check field access expressions
0 commit comments