Implemented better error message for missing do statements.

This fixes #2783 for the case where an empty double pipe
symbol is being used without a do keyword.
This commit is contained in:
Armin Ronacher
2012-07-03 01:30:50 +01:00
committed by Brian Anderson
parent 1bd4e35dd8
commit 5bd9d6e05c

View File

@@ -973,11 +973,25 @@ fn check_expr_with_unifier(fcx: @fn_ctxt,
_ {} _ {}
} }
check_expr(fcx, rhs, none); check_expr(fcx, rhs, none);
tcx.sess.span_err( tcx.sess.span_err(
ex.span, "binary operation " + ast_util::binop_to_str(op) + ex.span, "binary operation " + ast_util::binop_to_str(op) +
" cannot be applied to type `" + " cannot be applied to type `" +
fcx.infcx.ty_to_str(lhs_resolved_t) + fcx.infcx.ty_to_str(lhs_resolved_t) +
"`"); "`");
// If the or operator is used it might be that the user forgot to
// supply the do keyword. Let's be more helpful in that situation.
if op == ast::or {
alt ty::get(lhs_resolved_t).struct {
ty::ty_fn(f) {
tcx.sess.span_note(
ex.span, "did you forget the 'do' keyword for the call?");
}
_ {}
}
}
(lhs_resolved_t, false) (lhs_resolved_t, false)
} }
fn check_user_unop(fcx: @fn_ctxt, op_str: str, mname: str, fn check_user_unop(fcx: @fn_ctxt, op_str: str, mname: str,