about summary refs log tree commit diff
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
parent7a066ba547ab900d22fd435652fd9106ba180dfa (diff)
rustc: Remove the bitwise not operator
-rw-r--r--src/comp/front/ast.rs2
-rw-r--r--src/comp/front/parser.rs7
-rw-r--r--src/comp/middle/trans.rs5
-rw-r--r--src/comp/middle/typeck.rs10
-rw-r--r--src/lib/bitv.rs10
-rw-r--r--src/lib/sha1.rs2
6 files changed, 14 insertions, 22 deletions
diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs
index 37d26a6889a..a61562b9c16 100644
--- a/src/comp/front/ast.rs
+++ b/src/comp/front/ast.rs
@@ -183,7 +183,6 @@ fn binop_to_str(binop op) -> str {
 tag unop {
     box(mutability);
     deref;
-    bitnot;
     not;
     neg;
 }
@@ -195,7 +194,6 @@ fn unop_to_str(unop op) -> str {
             ret "@";
         }
         case (deref) {ret "*";}
-        case (bitnot) {ret "~";}
         case (not) {ret "!";}
         case (neg) {ret "-";}
     }
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs
index 980daa40135..7aa4d7b8ee6 100644
--- a/src/comp/front/parser.rs
+++ b/src/comp/front/parser.rs
@@ -1172,13 +1172,6 @@ fn parse_prefix_expr(&parser p) -> @ast::expr {
             ex = ast::expr_unary(ast::not, e, p.get_ann());
         }
 
-        case (token::TILDE) {
-            p.bump();
-            auto e = parse_prefix_expr(p);
-            hi = e.span.hi;
-            ex = ast::expr_unary(ast::bitnot, e, p.get_ann());
-        }
-
         case (token::BINOP(?b)) {
             alt (b) {
                 case (token::MINUS) {
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); }
             }
 
diff --git a/src/lib/bitv.rs b/src/lib/bitv.rs
index 7e8323f9ef5..689f3501b52 100644
--- a/src/lib/bitv.rs
+++ b/src/lib/bitv.rs
@@ -32,11 +32,7 @@ fn uint_bits() -> uint {
 }
 
 fn create(uint nbits, bool init) -> t {
-    auto elt = if (init) {
-        ~0u
-    } else {
-        0u
-    };
+    auto elt = if (init) { !0u } else { 0u };
 
     auto storage = vec::init_elt_mut[uint](elt, nbits / uint_bits() + 1u);
     ret rec(storage = storage, nbits = nbits);
@@ -139,7 +135,7 @@ fn set_all(&t v) {
 
 fn invert(&t v) {
     for each (uint i in uint::range(0u, vec::len(v.storage))) {
-        v.storage.(i) = ~v.storage.(i);
+        v.storage.(i) = !v.storage.(i);
     }
 }
 
@@ -163,7 +159,7 @@ fn set(&t v, uint i, bool x) {
     v.storage.(w) = if (x) {
         v.storage.(w) | flag
     } else {
-        v.storage.(w) & ~flag
+        v.storage.(w) & !flag
     };
 }
 
diff --git a/src/lib/sha1.rs b/src/lib/sha1.rs
index afec96e38b3..215671c545e 100644
--- a/src/lib/sha1.rs
+++ b/src/lib/sha1.rs
@@ -110,7 +110,7 @@ fn mk_sha1() -> sha1 {
         t = 0;
         while (t < 20) {
             temp = circular_shift(5u32, a)
-                + ((b & c) | ((~b) & d)) + e + w.(t) + k0;
+                + ((b & c) | ((!b) & d)) + e + w.(t) + k0;
             e = d;
             d = c;
             c = circular_shift(30u32, b);