@@ -1088,10 +1088,12 @@ fn check_expr_with_unifier(fcx: @fn_ctxt,
1088
1088
}
1089
1089
1090
1090
// A generic function for checking assignment expressions
1091
- fn check_assignment(fcx: @fn_ctxt, _sp : span, lhs: @ast::expr,
1091
+ fn check_assignment(fcx: @fn_ctxt, sp : span, lhs: @ast::expr,
1092
1092
rhs: @ast::expr, id: ast::node_id) -> bool {
1093
1093
let mut bot = check_expr(fcx, lhs, None);
1094
- bot |= check_expr_with(fcx, rhs, fcx.expr_ty(lhs));
1094
+ let lhs_type = fcx.expr_ty(lhs);
1095
+ let unifier = || demand::assign(fcx, sp, lhs_type, rhs);
1096
+ bot |= check_expr_with_unifier(fcx, rhs, Some(lhs_type), unifier);
1095
1097
fcx.write_ty(id, ty::mk_nil(fcx.ccx.tcx));
1096
1098
return bot;
1097
1099
}
@@ -2247,7 +2249,8 @@ fn require_integral(fcx: @fn_ctxt, sp: span, t: ty::t) {
2247
2249
fn check_decl_initializer( fcx: @fn_ctxt, nid: ast:: node_id,
2248
2250
init: @ast:: expr) -> bool {
2249
2251
let lty = ty:: mk_var( fcx. ccx. tcx, lookup_local( fcx, init. span, nid) ) ;
2250
- return check_expr_with( fcx, init, lty) ;
2252
+ let unifier = || demand:: assign( fcx, init. span, lty, init) ;
2253
+ return check_expr_with_unifier( fcx, init, Some ( lty) , unifier) ;
2251
2254
}
2252
2255
2253
2256
fn check_decl_local( fcx: @fn_ctxt, local: @ast:: local) -> bool {
0 commit comments