about summary refs log tree commit diff
path: root/src/comp/middle
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2011-06-10 10:46:59 -0700
committerPatrick Walton <pcwalton@mimiga.net>2011-06-10 10:47:33 -0700
commitdfdd6dbc5464147d984470086ab27c950d60d83e (patch)
tree0cef168e2bebe9ce4aeba5a96f1647216bee3ea4 /src/comp/middle
parent7a066ba547ab900d22fd435652fd9106ba180dfa (diff)
rustc: Remove the bitwise not operator
Diffstat (limited to 'src/comp/middle')
-rw-r--r--src/comp/middle/trans.rs5
-rw-r--r--src/comp/middle/typeck.rs10
2 files changed, 10 insertions, 5 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 4e1c3a01f44..ec51e8e691b 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -3388,11 +3388,6 @@ fn trans_unary(&@block_ctxt cx, ast::unop op,
     auto e_ty = ty::expr_ty(cx.fcx.lcx.ccx.tcx, e);
 
     alt (op) {
-        case (ast::bitnot) {
-            sub = autoderef(sub.bcx, sub.val,
-                            ty::expr_ty(cx.fcx.lcx.ccx.tcx, e));
-            ret res(sub.bcx, sub.bcx.build.Not(sub.val));
-        }
         case (ast::not) {
             sub = autoderef(sub.bcx, sub.val,
                             ty::expr_ty(cx.fcx.lcx.ccx.tcx, e));
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index fe7d793db7f..289691444b0 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -1580,6 +1580,16 @@ fn check_expr(&@fn_ctxt fcx, &@ast::expr expr) {
                         }
                     }
                 }
+                case (ast::not) {
+                    if (!type_is_integral(fcx, oper.span, oper_t) &&
+                            structure_of(fcx, oper.span, oper_t)
+                                != ty::ty_bool) {
+                        fcx.ccx.tcx.sess.span_err(expr.span,
+                            #fmt("mismatched types: expected bool or \
+                            integer but found %s",
+                            ty_to_str(fcx.ccx.tcx, oper_t)));
+                    }
+                }
                 case (_) { oper_t = strip_boxes(fcx, expr.span, oper_t); }
             }