Skip to content

Commit ea92d64

Browse files
committed
---
yaml --- r: 3588 b: refs/heads/master c: a9d84ab h: refs/heads/master v: v3
1 parent c4a0007 commit ea92d64

File tree

2 files changed

+25
-17
lines changed

2 files changed

+25
-17
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 291df4d73287b80764a5d42e71ab7fec31e3f3c3
2+
refs/heads/master: a9d84ab28a3e234d69c5bb7068d60d3f16c126fd

trunk/src/comp/middle/typeck.rs

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -942,29 +942,36 @@ mod demand {
942942
ty_param_subst_var_ids += [ty::ty_var_id(fcx.ccx.tcx, t_0)];
943943
simple(fcx, sp, ty_param_subst, t_0);
944944
}
945+
946+
fn mk_result(&@fn_ctxt fcx, &ty::t result_ty,
947+
&vec[int] ty_param_subst_var_ids,
948+
uint implicit_boxes) -> ty_param_substs_and_ty {
949+
let vec[ty::t] result_ty_param_substs = [];
950+
for (int var_id in ty_param_subst_var_ids) {
951+
auto tp_subst = ty::mk_var(fcx.ccx.tcx, var_id);
952+
result_ty_param_substs += [tp_subst];
953+
}
954+
ret tup(result_ty_param_substs,
955+
add_boxes(fcx.ccx, implicit_boxes, result_ty));
956+
}
957+
945958
alt (unify::simple(fcx, expected_1, actual_1)) {
946959
case (ures_ok(?t)) {
947-
let vec[ty::t] result_ty_param_substs = [];
948-
for (int var_id in ty_param_subst_var_ids) {
949-
auto tp_subst = ty::mk_var(fcx.ccx.tcx, var_id);
950-
result_ty_param_substs += [tp_subst];
951-
}
952-
ret tup(result_ty_param_substs,
953-
add_boxes(fcx.ccx, implicit_boxes, t));
960+
ret mk_result(fcx, t, ty_param_subst_var_ids,
961+
implicit_boxes);
954962
}
955963
case (ures_err(?err)) {
956964
auto e_err = resolve_type_vars_if_possible(fcx, expected_1);
957965
auto a_err = resolve_type_vars_if_possible(fcx, actual_1);
958-
fcx.ccx.tcx.sess.span_fatal(sp,
966+
fcx.ccx.tcx.sess.span_err(sp,
959967
"mismatched types: expected " +
960-
ty_to_str(fcx.ccx.tcx, e_err) +
961-
" but found " +
962-
ty_to_str(fcx.ccx.tcx, a_err) +
963-
" (" + ty::type_err_to_str(err)
964-
+ ")");
965-
// TODO: In the future, try returning "expected", reporting
966-
// the error, and continue.
967-
968+
ty_to_str(fcx.ccx.tcx, e_err) +
969+
" but found " +
970+
ty_to_str(fcx.ccx.tcx, a_err) +
971+
" (" + ty::type_err_to_str(err)
972+
+ ")");
973+
ret mk_result(fcx, expected_1,
974+
ty_param_subst_var_ids, implicit_boxes);
968975
}
969976
}
970977
}
@@ -2502,6 +2509,7 @@ fn check_crate(&ty::ctxt tcx, &@ast::crate crate) {
25022509
rec(visit_item_pre=bind check_item(ccx, _)
25032510
with walk::default_visitor());
25042511
walk::walk_crate(visit, *crate);
2512+
tcx.sess.abort_if_errors();
25052513
}
25062514
//
25072515
// Local Variables:

0 commit comments

Comments
 (0)