about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2012-02-09 11:50:54 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2012-02-09 11:58:08 +0100
commit50fb4c30ed02e72a715e093c8f87b0c179fb3ccb (patch)
treef94ca4759ed236f088971717c3d1cc4182002ac2
parent1dc5e1aa94d1c82d12385dfcb95c75cbaaa318a9 (diff)
downloadrust-50fb4c30ed02e72a715e093c8f87b0c179fb3ccb.tar.gz
rust-50fb4c30ed02e72a715e093c8f87b0c179fb3ccb.zip
Increase precedence of as operator
Closes #1717
-rw-r--r--src/comp/middle/shape.rs2
-rw-r--r--src/comp/middle/trans/base.rs5
-rw-r--r--src/comp/syntax/ast_util.rs6
-rw-r--r--src/comp/syntax/parse/parser.rs6
-rw-r--r--src/libcore/extfmt.rs2
-rw-r--r--src/libcore/str.rs39
-rw-r--r--src/libstd/ebml.rs34
-rw-r--r--src/libstd/fs.rs4
-rw-r--r--src/libstd/io.rs10
-rw-r--r--src/libstd/map.rs2
-rw-r--r--src/libstd/sha1.rs24
-rw-r--r--src/test/bench/msgsend.rs2
-rw-r--r--src/test/bench/shootout-binarytrees.rs2
-rw-r--r--src/test/run-pass/record-pat.rs2
14 files changed, 71 insertions, 69 deletions
diff --git a/src/comp/middle/shape.rs b/src/comp/middle/shape.rs
index 587c5c29ca3..089aa8eeedb 100644
--- a/src/comp/middle/shape.rs
+++ b/src/comp/middle/shape.rs
@@ -308,7 +308,7 @@ fn mk_ctxt(llmod: ModuleRef) -> ctxt {
 fn add_bool(&dest: [u8], val: bool) { dest += [if val { 1u8 } else { 0u8 }]; }
 
 fn add_u16(&dest: [u8], val: u16) {
-    dest += [val & 0xffu16 as u8, val >> 8u16 as u8];
+    dest += [(val & 0xffu16) as u8, (val >> 8u16) as u8];
 }
 
 fn add_substr(&dest: [u8], src: [u8]) {
diff --git a/src/comp/middle/trans/base.rs b/src/comp/middle/trans/base.rs
index f8accd50714..596671be9e7 100644
--- a/src/comp/middle/trans/base.rs
+++ b/src/comp/middle/trans/base.rs
@@ -231,9 +231,8 @@ fn sanitize(s: str) -> str {
 
 fn log_fn_time(ccx: @crate_ctxt, name: str, start: time::timeval,
                end: time::timeval) {
-    let elapsed =
-        1000 * (end.sec - start.sec as int) +
-            ((end.usec as int) - (start.usec as int)) / 1000;
+    let elapsed = 1000 * ((end.sec - start.sec) as int) +
+        ((end.usec as int) - (start.usec as int)) / 1000;
     *ccx.stats.fn_times += [{ident: name, time: elapsed}];
 }
 
diff --git a/src/comp/syntax/ast_util.rs b/src/comp/syntax/ast_util.rs
index d0cfb5ee848..88148b990f8 100644
--- a/src/comp/syntax/ast_util.rs
+++ b/src/comp/syntax/ast_util.rs
@@ -269,9 +269,9 @@ fn eval_const_expr(e: @expr) -> const_val {
               mul { const_uint(a * b) } div { const_uint(a / b) }
               rem { const_uint(a % b) } and | bitand { const_uint(a & b) }
               or | bitor { const_uint(a | b) } bitxor { const_uint(a ^ b) }
-              lsl { const_int(a << b as i64) }
-              lsr { const_int(a >> b as i64) }
-              asr { const_int(a >>> b as i64) }
+              lsl { const_int((a << b) as i64) }
+              lsr { const_int((a >> b) as i64) }
+              asr { const_int((a >>> b) as i64) }
               eq { fromb(a == b) } lt { fromb(a < b) }
               le { fromb(a <= b) } ne { fromb(a != b) }
               ge { fromb(a >= b) } gt { fromb(a > b) }
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs
index d15c333c5fe..a988557b84d 100644
--- a/src/comp/syntax/parse/parser.rs
+++ b/src/comp/syntax/parse/parser.rs
@@ -1123,7 +1123,8 @@ type op_spec = {tok: token::token, op: ast::binop, prec: int};
 
 // FIXME make this a const, don't store it in parser state
 fn prec_table() -> @[op_spec] {
-    ret @[{tok: token::BINOP(token::STAR), op: ast::mul, prec: 11},
+    ret @[// 'as' sits between here with 12
+          {tok: token::BINOP(token::STAR), op: ast::mul, prec: 11},
           {tok: token::BINOP(token::SLASH), op: ast::div, prec: 11},
           {tok: token::BINOP(token::PERCENT), op: ast::rem, prec: 11},
           {tok: token::BINOP(token::PLUS), op: ast::add, prec: 10},
@@ -1134,7 +1135,6 @@ fn prec_table() -> @[op_spec] {
           {tok: token::BINOP(token::AND), op: ast::bitand, prec: 8},
           {tok: token::BINOP(token::CARET), op: ast::bitxor, prec: 7},
           {tok: token::BINOP(token::OR), op: ast::bitor, prec: 6},
-          // 'as' sits between here with 5
           {tok: token::LT, op: ast::lt, prec: 4},
           {tok: token::LE, op: ast::le, prec: 4},
           {tok: token::GE, op: ast::ge, prec: 4},
@@ -1151,7 +1151,7 @@ fn parse_binops(p: parser) -> @ast::expr {
 
 const unop_prec: int = 100;
 
-const as_prec: int = 5;
+const as_prec: int = 12;
 
 fn parse_more_binops(p: parser, plhs: pexpr, min_prec: int) ->
    @ast::expr {
diff --git a/src/libcore/extfmt.rs b/src/libcore/extfmt.rs
index d87ba9a5ca9..0638394e29b 100644
--- a/src/libcore/extfmt.rs
+++ b/src/libcore/extfmt.rs
@@ -119,7 +119,7 @@ mod ct {
         if i >= lim { ret none; }
         let c = s[i];
         if !('0' as u8 <= c && c <= '9' as u8) { ret option::none; }
-        let n = c - ('0' as u8) as uint;
+        let n = (c - ('0' as u8)) as uint;
         ret alt peek_num(s, i + 1u, lim) {
               none { some({num: n, next: i + 1u}) }
               some(next) {
diff --git a/src/libcore/str.rs b/src/libcore/str.rs
index 39f5d121ad1..b98d96bb901 100644
--- a/src/libcore/str.rs
+++ b/src/libcore/str.rs
@@ -142,25 +142,30 @@ fn push_utf8_bytes(&s: str, ch: char) {
         if code < max_one_b {
             [code as u8]
         } else if code < max_two_b {
-            [code >> 6u & 31u | tag_two_b as u8, code & 63u | tag_cont as u8]
+            [(code >> 6u & 31u | tag_two_b) as u8,
+             (code & 63u | tag_cont) as u8]
         } else if code < max_three_b {
-            [code >> 12u & 15u | tag_three_b as u8,
-             code >> 6u & 63u | tag_cont as u8, code & 63u | tag_cont as u8]
+            [(code >> 12u & 15u | tag_three_b) as u8,
+             (code >> 6u & 63u | tag_cont) as u8,
+             (code & 63u | tag_cont) as u8]
         } else if code < max_four_b {
-            [code >> 18u & 7u | tag_four_b as u8,
-             code >> 12u & 63u | tag_cont as u8,
-             code >> 6u & 63u | tag_cont as u8, code & 63u | tag_cont as u8]
+            [(code >> 18u & 7u | tag_four_b) as u8,
+             (code >> 12u & 63u | tag_cont) as u8,
+             (code >> 6u & 63u | tag_cont) as u8,
+             (code & 63u | tag_cont) as u8]
         } else if code < max_five_b {
-            [code >> 24u & 3u | tag_five_b as u8,
-             code >> 18u & 63u | tag_cont as u8,
-             code >> 12u & 63u | tag_cont as u8,
-             code >> 6u & 63u | tag_cont as u8, code & 63u | tag_cont as u8]
+            [(code >> 24u & 3u | tag_five_b) as u8,
+             (code >> 18u & 63u | tag_cont) as u8,
+             (code >> 12u & 63u | tag_cont) as u8,
+             (code >> 6u & 63u | tag_cont) as u8,
+             (code & 63u | tag_cont) as u8]
         } else {
-            [code >> 30u & 1u | tag_six_b as u8,
-             code >> 24u & 63u | tag_cont as u8,
-             code >> 18u & 63u | tag_cont as u8,
-             code >> 12u & 63u | tag_cont as u8,
-             code >> 6u & 63u | tag_cont as u8, code & 63u | tag_cont as u8]
+            [(code >> 30u & 1u | tag_six_b) as u8,
+             (code >> 24u & 63u | tag_cont) as u8,
+             (code >> 18u & 63u | tag_cont) as u8,
+             (code >> 12u & 63u | tag_cont) as u8,
+             (code >> 6u & 63u | tag_cont) as u8,
+             (code & 63u | tag_cont) as u8]
         };
     push_bytes(s, bytes);
 }
@@ -1211,13 +1216,13 @@ fn char_range_at(s: str, i: uint) -> {ch: char, next: uint} {
         let byte = s[i];
         assert (byte & 192u8 == tag_cont_u8);
         val <<= 6u;
-        val += byte & 63u8 as uint;
+        val += (byte & 63u8) as uint;
         i += 1u;
     }
     // Clunky way to get the right bits from the first byte. Uses two shifts,
     // the first to clip off the marker bits at the left of the byte, and then
     // a second (as uint) to get it to the right position.
-    val += (b0 << (w + 1u as u8) as uint) << ((w - 1u) * 6u - w - 1u);
+    val += ((b0 << ((w + 1u) as u8)) as uint) << ((w - 1u) * 6u - w - 1u);
     ret {ch: val as char, next: i};
 }
 
diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs
index 19cf97624ab..e825314e2da 100644
--- a/src/libstd/ebml.rs
+++ b/src/libstd/ebml.rs
@@ -19,22 +19,22 @@ type doc = {data: @[u8], start: uint, end: uint};
 
 fn vint_at(data: [u8], start: uint) -> {val: uint, next: uint} {
     let a = data[start];
-    if a & 0x80u8 != 0u8 { ret {val: a & 0x7fu8 as uint, next: start + 1u}; }
+    if a & 0x80u8 != 0u8 {
+        ret {val: (a & 0x7fu8) as uint, next: start + 1u};
+    }
     if a & 0x40u8 != 0u8 {
-        ret {val: (a & 0x3fu8 as uint) << 8u | (data[start + 1u] as uint),
+        ret {val: ((a & 0x3fu8) as uint) << 8u | (data[start + 1u] as uint),
              next: start + 2u};
     } else if a & 0x20u8 != 0u8 {
-        ret {val:
-                 (a & 0x1fu8 as uint) << 16u |
-                     (data[start + 1u] as uint) << 8u |
-                     (data[start + 2u] as uint),
+        ret {val: ((a & 0x1fu8) as uint) << 16u |
+                 (data[start + 1u] as uint) << 8u |
+                 (data[start + 2u] as uint),
              next: start + 3u};
     } else if a & 0x10u8 != 0u8 {
-        ret {val:
-                 (a & 0x0fu8 as uint) << 24u |
-                     (data[start + 1u] as uint) << 16u |
-                     (data[start + 2u] as uint) << 8u |
-                     (data[start + 3u] as uint),
+        ret {val: ((a & 0x0fu8) as uint) << 24u |
+                 (data[start + 1u] as uint) << 16u |
+                 (data[start + 2u] as uint) << 8u |
+                 (data[start + 3u] as uint),
              next: start + 4u};
     } else { #error("vint too big"); fail; }
 }
@@ -122,16 +122,14 @@ fn write_sized_vint(w: io::writer, n: uint, size: uint) {
     let buf: [u8];
     alt size {
       1u { buf = [0x80u8 | (n as u8)]; }
-      2u { buf = [0x40u8 | (n >> 8u as u8), n & 0xffu as u8]; }
+      2u { buf = [0x40u8 | ((n >> 8u) as u8), (n & 0xffu) as u8]; }
       3u {
-        buf =
-            [0x20u8 | (n >> 16u as u8), n >> 8u & 0xffu as u8,
-             n & 0xffu as u8];
+        buf = [0x20u8 | ((n >> 16u) as u8), (n >> 8u & 0xffu) as u8,
+               (n & 0xffu) as u8];
       }
       4u {
-        buf =
-            [0x10u8 | (n >> 24u as u8), n >> 16u & 0xffu as u8,
-             n >> 8u & 0xffu as u8, n & 0xffu as u8];
+        buf = [0x10u8 | ((n >> 24u) as u8), (n >> 16u & 0xffu) as u8,
+               (n >> 8u & 0xffu) as u8, (n & 0xffu) as u8];
       }
       _ { #error("vint to write too big"); fail; }
     }
diff --git a/src/libstd/fs.rs b/src/libstd/fs.rs
index 239b8768858..2304445b95b 100644
--- a/src/libstd/fs.rs
+++ b/src/libstd/fs.rs
@@ -70,8 +70,8 @@ fn basename(p: path) -> path unsafe {
         if i == -1 { ret p; }
     }
     let len = str::byte_len(p);
-    if i + 1 as uint >= len { ret p; }
-    ret str::unsafe::slice_bytes(p, i + 1 as uint, len);
+    if (i + 1) as uint >= len { ret p; }
+    ret str::unsafe::slice_bytes(p, (i + 1) as uint, len);
 }
 
 
diff --git a/src/libstd/io.rs b/src/libstd/io.rs
index 8f77a804892..95f275a9be0 100644
--- a/src/libstd/io.rs
+++ b/src/libstd/io.rs
@@ -59,10 +59,10 @@ impl reader_util for reader {
                     assert (next > -1);
                     assert (next & 192 == 128);
                     val <<= 6u;
-                    val += next & 63 as uint;
+                    val += (next & 63) as uint;
                 }
                 // See str::char_at
-                val += (b0 << (w + 1u as u8) as uint)
+                val += ((b0 << ((w + 1u) as u8)) as uint)
                     << (w - 1u) * 6u - w - 1u;
                 chars += [ val as char ];
             }
@@ -368,14 +368,14 @@ fn mk_file_writer(path: str, flags: [fileflag])
 
 fn uint_to_le_bytes(n: uint, size: uint) -> [u8] {
     let bytes: [u8] = [], i = size, n = n;
-    while i > 0u { bytes += [n & 255u as u8]; n >>= 8u; i -= 1u; }
+    while i > 0u { bytes += [(n & 255u) as u8]; n >>= 8u; i -= 1u; }
     ret bytes;
 }
 
 fn uint_to_be_bytes(n: uint, size: uint) -> [u8] {
     let bytes: [u8] = [];
-    let i = size - 1u as int;
-    while i >= 0 { bytes += [n >> (i * 8 as uint) & 255u as u8]; i -= 1; }
+    let i = (size - 1u) as int;
+    while i >= 0 { bytes += [(n >> ((i * 8) as uint) & 255u) as u8]; i -= 1; }
     ret bytes;
 }
 
diff --git a/src/libstd/map.rs b/src/libstd/map.rs
index 8da3d78552d..8d3bbac1ce4 100644
--- a/src/libstd/map.rs
+++ b/src/libstd/map.rs
@@ -296,7 +296,7 @@ mod chained {
 
         fn insert(k: K, v: V) -> bool {
             let nchains = vec::len(self.chains);
-            let load = {num: self.size + 1u as int, den: nchains as int};
+            let load = {num: (self.size + 1u) as int, den: nchains as int};
             // Structural consts would be nice. This is a const 3/4
             // load factor that we compare against.
             if !util::rational_leq(load, {num:3, den:4}) { rehash(self); }
diff --git a/src/libstd/sha1.rs b/src/libstd/sha1.rs
index a9911d01f03..242bf61db13 100644
--- a/src/libstd/sha1.rs
+++ b/src/libstd/sha1.rs
@@ -193,10 +193,10 @@ fn mk_sha1() -> sha1 {
         if !st.computed { pad_msg(st); st.computed = true; }
         let rs: [u8] = [];
         for hpart: u32 in st.h {
-            let a = hpart >> 24u32 & 0xFFu32 as u8;
-            let b = hpart >> 16u32 & 0xFFu32 as u8;
-            let c = hpart >> 8u32 & 0xFFu32 as u8;
-            let d = hpart & 0xFFu32 as u8;
+            let a = (hpart >> 24u32 & 0xFFu32) as u8;
+            let b = (hpart >> 16u32 & 0xFFu32) as u8;
+            let c = (hpart >> 8u32 & 0xFFu32) as u8;
+            let d = (hpart & 0xFFu32) as u8;
             rs += [a, b, c, d];
         }
         ret rs;
@@ -238,14 +238,14 @@ fn mk_sha1() -> sha1 {
         }
 
         // Store the message length as the last 8 octets
-        st.msg_block[56] = st.len_high >> 24u32 & 0xFFu32 as u8;
-        st.msg_block[57] = st.len_high >> 16u32 & 0xFFu32 as u8;
-        st.msg_block[58] = st.len_high >> 8u32 & 0xFFu32 as u8;
-        st.msg_block[59] = st.len_high & 0xFFu32 as u8;
-        st.msg_block[60] = st.len_low >> 24u32 & 0xFFu32 as u8;
-        st.msg_block[61] = st.len_low >> 16u32 & 0xFFu32 as u8;
-        st.msg_block[62] = st.len_low >> 8u32 & 0xFFu32 as u8;
-        st.msg_block[63] = st.len_low & 0xFFu32 as u8;
+        st.msg_block[56] = (st.len_high >> 24u32 & 0xFFu32) as u8;
+        st.msg_block[57] = (st.len_high >> 16u32 & 0xFFu32) as u8;
+        st.msg_block[58] = (st.len_high >> 8u32 & 0xFFu32) as u8;
+        st.msg_block[59] = (st.len_high & 0xFFu32) as u8;
+        st.msg_block[60] = (st.len_low >> 24u32 & 0xFFu32) as u8;
+        st.msg_block[61] = (st.len_low >> 16u32 & 0xFFu32) as u8;
+        st.msg_block[62] = (st.len_low >> 8u32 & 0xFFu32) as u8;
+        st.msg_block[63] = (st.len_low & 0xFFu32) as u8;
         process_msg_block(st);
     }
 
diff --git a/src/test/bench/msgsend.rs b/src/test/bench/msgsend.rs
index bae12896a78..250a942fa68 100644
--- a/src/test/bench/msgsend.rs
+++ b/src/test/bench/msgsend.rs
@@ -48,7 +48,7 @@ fn run(args: [str]) {
     let elapsed = end - start;
     std::io::stdout().write_str(#fmt("Count is %?\n", result));
     std::io::stdout().write_str(#fmt("Test took %? seconds\n", elapsed));
-    let thruput = (size / workers * workers as float) / (elapsed as float);
+    let thruput = ((size / workers * workers) as float) / (elapsed as float);
     std::io::stdout().write_str(#fmt("Throughput=%f per sec\n", thruput));
 }
 
diff --git a/src/test/bench/shootout-binarytrees.rs b/src/test/bench/shootout-binarytrees.rs
index 4158238d19f..3f1d47d3be2 100644
--- a/src/test/bench/shootout-binarytrees.rs
+++ b/src/test/bench/shootout-binarytrees.rs
@@ -38,7 +38,7 @@ fn main(args: [str]) {
     let long_lived_tree = bottom_up_tree(0, max_depth);
     let depth = min_depth;
     while depth <= max_depth {
-        let iterations = int::pow(2, max_depth - depth + min_depth as uint);
+        let iterations = int::pow(2, (max_depth - depth + min_depth) as uint);
         let chk = 0;
         let i = 1;
         while i <= iterations {
diff --git a/src/test/run-pass/record-pat.rs b/src/test/run-pass/record-pat.rs
index d114c9e995d..f4d52646e76 100644
--- a/src/test/run-pass/record-pat.rs
+++ b/src/test/run-pass/record-pat.rs
@@ -5,7 +5,7 @@ enum t3 { c(t2, uint), }
 fn m(in: t3) -> int {
     alt in {
       c({x: a(m), _}, _) { ret m; }
-      c({x: b(m), y: y}, z) { ret (m + z as int) + y; }
+      c({x: b(m), y: y}, z) { ret ((m + z) as int) + y; }
     }
 }