From 5bd9d6e05c57d1d3821eb94afcd776b992d1a2d4 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Tue, 3 Jul 2012 01:30:50 +0100 Subject: [PATCH] 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. --- src/rustc/middle/typeck/check.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/rustc/middle/typeck/check.rs b/src/rustc/middle/typeck/check.rs index aac959b4cb456..ef0815927e4f3 100644 --- a/src/rustc/middle/typeck/check.rs +++ b/src/rustc/middle/typeck/check.rs @@ -973,11 +973,25 @@ fn check_expr_with_unifier(fcx: @fn_ctxt, _ {} } check_expr(fcx, rhs, none); + tcx.sess.span_err( ex.span, "binary operation " + ast_util::binop_to_str(op) + " cannot be applied to type `" + 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) } fn check_user_unop(fcx: @fn_ctxt, op_str: str, mname: str,