about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/rustc/middle/typeck/check.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/rustc/middle/typeck/check.rs b/src/rustc/middle/typeck/check.rs
index aac959b4cb4..ef0815927e4 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,