Skip to content

Commit 9b4e147

Browse files
author
Jorge Aparicio
committed
---
yaml --- r: 163423 b: refs/heads/snap-stage3 c: c3a6d28 h: refs/heads/master i: 163421: 1acb95d 163419: 624ad0b 163415: 2ed43c8 163407: 5d18593 163391: a44538f v: v3
1 parent 878e81a commit 9b4e147

File tree

2 files changed

+26
-24
lines changed

2 files changed

+26
-24
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 9146a919b616e39e528e4d7100d16eef52f1f852
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: 14c0a708cc33245d86d48b99d7dc93a6f5b9d20d
4+
refs/heads/snap-stage3: c3a6d2860cc0448dea8a9918d22b30839d2548c8
55
refs/heads/try: 20cbbffeefc1f35e2ea63afce7b42fbd79611d42
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d

branches/snap-stage3/src/librustc_typeck/check/mod.rs

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2904,6 +2904,7 @@ pub fn lookup_tup_field_ty<'tcx>(tcx: &ty::ctxt<'tcx>,
29042904

29052905
// Controls whether the arguments are automatically referenced. This is useful
29062906
// for overloaded binary and unary operators.
2907+
#[deriving(PartialEq)]
29072908
pub enum DerefArgs {
29082909
DontDerefArgs,
29092910
DoDerefArgs
@@ -3130,7 +3131,8 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
31303131
trait_did: Option<ast::DefId>,
31313132
lhs: &'a ast::Expr,
31323133
rhs: Option<&P<ast::Expr>>,
3133-
unbound_method: F) -> Ty<'tcx> where
3134+
unbound_method: F,
3135+
deref_args: DerefArgs) -> Ty<'tcx> where
31343136
F: FnOnce(),
31353137
{
31363138
let method = match trait_did {
@@ -3146,7 +3148,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
31463148
// traits that don't force left and right to have same
31473149
// type.
31483150
let (adj_ty, adjustment) = match lhs_ty.sty {
3149-
ty::ty_rptr(r_in, mt) => {
3151+
ty::ty_rptr(r_in, mt) if deref_args == DoDerefArgs => {
31503152
let r_adj = fcx.infcx().next_region_var(infer::Autoref(lhs.span));
31513153
fcx.mk_subr(infer::Reborrow(lhs.span), r_adj, r_in);
31523154
let adjusted_ty = ty::mk_rptr(fcx.tcx(), r_adj, mt);
@@ -3183,7 +3185,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
31833185
method_ty,
31843186
op_ex,
31853187
args.as_slice(),
3186-
DoDerefArgs,
3188+
deref_args,
31873189
DontTupleArguments) {
31883190
ty::FnConverging(result_type) => result_type,
31893191
ty::FnDiverging => ty::mk_err()
@@ -3199,7 +3201,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
31993201
expected_ty,
32003202
op_ex,
32013203
args.as_slice(),
3202-
DoDerefArgs,
3204+
deref_args,
32033205
DontTupleArguments);
32043206
ty::mk_err()
32053207
}
@@ -3318,23 +3320,23 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
33183320
rhs: &P<ast::Expr>) -> Ty<'tcx> {
33193321
let tcx = fcx.ccx.tcx;
33203322
let lang = &tcx.lang_items;
3321-
let (name, trait_did) = match op {
3322-
ast::BiAdd => ("add", lang.add_trait()),
3323-
ast::BiSub => ("sub", lang.sub_trait()),
3324-
ast::BiMul => ("mul", lang.mul_trait()),
3325-
ast::BiDiv => ("div", lang.div_trait()),
3326-
ast::BiRem => ("rem", lang.rem_trait()),
3327-
ast::BiBitXor => ("bitxor", lang.bitxor_trait()),
3328-
ast::BiBitAnd => ("bitand", lang.bitand_trait()),
3329-
ast::BiBitOr => ("bitor", lang.bitor_trait()),
3330-
ast::BiShl => ("shl", lang.shl_trait()),
3331-
ast::BiShr => ("shr", lang.shr_trait()),
3332-
ast::BiLt => ("lt", lang.ord_trait()),
3333-
ast::BiLe => ("le", lang.ord_trait()),
3334-
ast::BiGe => ("ge", lang.ord_trait()),
3335-
ast::BiGt => ("gt", lang.ord_trait()),
3336-
ast::BiEq => ("eq", lang.eq_trait()),
3337-
ast::BiNe => ("ne", lang.eq_trait()),
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),
33383340
ast::BiAnd | ast::BiOr => {
33393341
check_expr(fcx, &**rhs);
33403342
return ty::mk_err();
@@ -3347,7 +3349,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
33473349
ast_util::binop_to_string(op),
33483350
actual)
33493351
}, lhs_resolved_t, None)
3350-
})
3352+
}, deref_args)
33513353
}
33523354

33533355
fn check_user_unop<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
@@ -3363,7 +3365,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
33633365
format!("cannot apply unary operator `{}` to type `{}`",
33643366
op_str, actual)
33653367
}, rhs_t, None);
3366-
})
3368+
}, DontDerefArgs)
33673369
}
33683370

33693371
// Check field access expressions

0 commit comments

Comments
 (0)