about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2013-08-01 18:35:46 -0400
committerDaniel Micay <danielmicay@gmail.com>2013-08-02 00:51:14 -0400
commit234acad404535868ecd7f5b48c3e120c4ea559c9 (patch)
tree30aa039dafab71ca92ba8ecd0d52dc1cc559c85e
parent5890fcf87295d5b7a8f4ffa8d9918f755f72baf8 (diff)
downloadrust-234acad404535868ecd7f5b48c3e120c4ea559c9.tar.gz
rust-234acad404535868ecd7f5b48c3e120c4ea559c9.zip
replace `range` with an external iterator
-rw-r--r--doc/rust.md3
-rw-r--r--doc/tutorial-tasks.md12
-rw-r--r--src/compiletest/runtest.rs3
-rw-r--r--src/libextra/arc.rs5
-rw-r--r--src/libextra/arena.rs4
-rw-r--r--src/libextra/bitv.rs17
-rw-r--r--src/libextra/container.rs11
-rw-r--r--src/libextra/crypto/sha2.rs15
-rw-r--r--src/libextra/dlist.rs3
-rw-r--r--src/libextra/fileinput.rs2
-rw-r--r--src/libextra/flatpipes.rs21
-rw-r--r--src/libextra/num/bigint.rs2
-rw-r--r--src/libextra/ringbuf.rs28
-rw-r--r--src/libextra/serialize.rs17
-rw-r--r--src/libextra/smallintmap.rs10
-rw-r--r--src/libextra/sort.rs14
-rw-r--r--src/libextra/tempfile.rs3
-rw-r--r--src/libextra/terminfo/parser/compiled.rs8
-rw-r--r--src/libextra/test.rs3
-rw-r--r--src/libextra/treemap.rs5
-rw-r--r--src/librustc/back/rpath.rs3
-rw-r--r--src/librustc/metadata/encoder.rs2
-rw-r--r--src/librustc/middle/astencode.rs3
-rw-r--r--src/librustc/middle/borrowck/check_loans.rs5
-rw-r--r--src/librustc/middle/check_match.rs4
-rw-r--r--src/librustc/middle/dataflow.rs8
-rw-r--r--src/librustc/middle/graph.rs10
-rw-r--r--src/librustc/middle/liveness.rs8
-rw-r--r--src/librustc/middle/mem_categorization.rs3
-rw-r--r--src/librustc/middle/trans/base.rs4
-rw-r--r--src/librustc/middle/trans/cabi_x86_64.rs3
-rw-r--r--src/librustc/middle/trans/foreign.rs5
-rw-r--r--src/librustc/middle/trans/type_use.rs13
-rw-r--r--src/librustc/middle/ty.rs3
-rw-r--r--src/librustc/middle/typeck/check/method.rs3
-rw-r--r--src/librustc/middle/typeck/check/regionck.rs7
-rw-r--r--src/librustc/middle/typeck/coherence.rs3
-rw-r--r--src/librustc/middle/typeck/infer/region_inference/mod.rs6
-rw-r--r--src/libstd/at_vec.rs9
-rw-r--r--src/libstd/hashmap.rs13
-rw-r--r--src/libstd/iterator.rs36
-rw-r--r--src/libstd/num/int_macros.rs15
-rw-r--r--src/libstd/num/uint_macros.rs15
-rw-r--r--src/libstd/os.rs7
-rw-r--r--src/libstd/prelude.rs3
-rw-r--r--src/libstd/rand.rs3
-rw-r--r--src/libstd/rt/args.rs7
-rw-r--r--src/libstd/rt/io/net/tcp.rs10
-rw-r--r--src/libstd/rt/sched.rs7
-rw-r--r--src/libstd/rt/select.rs4
-rw-r--r--src/libstd/rt/test.rs4
-rw-r--r--src/libstd/rt/tube.rs4
-rw-r--r--src/libstd/rt/uv/uvio.rs12
-rw-r--r--src/libstd/run.rs5
-rw-r--r--src/libstd/trie.rs6
-rw-r--r--src/libstd/unstable/sync.rs6
-rw-r--r--src/libstd/vec.rs8
-rw-r--r--src/libsyntax/codemap.rs3
-rw-r--r--src/libsyntax/diagnostic.rs3
-rw-r--r--src/libsyntax/ext/deriving/decodable.rs5
-rw-r--r--src/libsyntax/ext/deriving/generic.rs7
-rw-r--r--src/libsyntax/ext/tt/macro_parser.rs5
-rw-r--r--src/libsyntax/print/pprust.rs3
-rw-r--r--src/test/auxiliary/cci_class_5.rs2
-rw-r--r--src/test/bench/core-map.rs12
-rw-r--r--src/test/bench/core-set.rs16
-rw-r--r--src/test/bench/core-std.rs8
-rw-r--r--src/test/bench/core-uint-to-str.rs2
-rw-r--r--src/test/bench/msgsend-pipes-shared.rs4
-rw-r--r--src/test/bench/msgsend-pipes.rs4
-rw-r--r--src/test/bench/msgsend-ring-mutex-arcs.rs4
-rw-r--r--src/test/bench/msgsend-ring-rw-arcs.rs4
-rw-r--r--src/test/bench/noise.rs12
-rw-r--r--src/test/bench/shootout-fannkuch-redux.rs3
-rw-r--r--src/test/bench/shootout-fasta-redux.rs6
-rw-r--r--src/test/bench/shootout-fasta.rs4
-rw-r--r--src/test/bench/shootout-k-nucleotide.rs2
-rw-r--r--src/test/bench/shootout-mandelbrot.rs7
-rw-r--r--src/test/bench/shootout-nbody.rs17
-rw-r--r--src/test/bench/shootout-pfib.rs7
-rw-r--r--src/test/bench/std-smallintmap.rs6
-rw-r--r--src/test/bench/sudoku.rs20
-rw-r--r--src/test/compile-fail/issue-2817-2.rs29
-rw-r--r--src/test/compile-fail/issue-2817.rs4
-rw-r--r--src/test/compile-fail/moves-based-on-type-move-out-of-closure-env-issue-1965.rs4
-rw-r--r--src/test/compile-fail/private-method.rs4
-rw-r--r--src/test/compile-fail/regions-addr-of-upvar-self.rs4
-rw-r--r--src/test/run-fail/for-each-loop-fail.rs4
-rw-r--r--src/test/run-fail/unwind-misc-1.rs2
-rw-r--r--src/test/run-pass/borrowck-mut-uniq.rs2
-rw-r--r--src/test/run-pass/class-cast-to-trait-multiple-types.rs2
-rw-r--r--src/test/run-pass/class-impl-parameterized-trait.rs2
-rw-r--r--src/test/run-pass/class-impl-very-parameterized-trait.rs4
-rw-r--r--src/test/run-pass/class-implement-trait-cross-crate.rs2
-rw-r--r--src/test/run-pass/class-implement-traits.rs16
-rw-r--r--src/test/run-pass/class-implements-multiple-traits.rs2
-rw-r--r--src/test/run-pass/classes-cross-crate.rs2
-rw-r--r--src/test/run-pass/classes.rs4
-rw-r--r--src/test/run-pass/issue-2989.rs3
-rw-r--r--src/test/run-pass/issue-3563-3.rs4
-rw-r--r--src/test/run-pass/issue-3609.rs6
-rw-r--r--src/test/run-pass/iter-range.rs4
-rw-r--r--src/test/run-pass/lots-a-fail.rs3
-rw-r--r--src/test/run-pass/move-3-unique.rs4
-rw-r--r--src/test/run-pass/move-3.rs4
-rw-r--r--src/test/run-pass/num-range-rev.rs4
-rw-r--r--src/test/run-pass/num-range.rs4
-rw-r--r--src/test/run-pass/owned-trait-objects.rs4
-rw-r--r--src/test/run-pass/packed-struct-vec.rs3
-rw-r--r--src/test/run-pass/pattern-bound-var-in-for-each.rs4
-rw-r--r--src/test/run-pass/private-method.rs4
-rw-r--r--src/test/run-pass/regions-infer-borrow-scope-addr-of.rs3
-rw-r--r--src/test/run-pass/send-iloop.rs3
-rw-r--r--src/test/run-pass/stat.rs2
-rw-r--r--src/test/run-pass/trait-generic.rs4
-rw-r--r--src/test/run-pass/type-params-in-for-each.rs4
-rw-r--r--src/test/run-pass/unique-send-2.rs5
117 files changed, 336 insertions, 442 deletions
diff --git a/doc/rust.md b/doc/rust.md
index 51b2786746a..ea4d7ec3fe9 100644
--- a/doc/rust.md
+++ b/doc/rust.md
@@ -2386,9 +2386,8 @@ foreach e in v.iter() {
 An example of a for loop over a series of integers:
 
 ~~~~
-# use std::uint;
 # fn bar(b:uint) { }
-for uint::range(0, 256) |i| {
+foreach i in range(0u, 256) {
     bar(i);
 }
 ~~~~
diff --git a/doc/tutorial-tasks.md b/doc/tutorial-tasks.md
index 08989be871b..4528f3f9e15 100644
--- a/doc/tutorial-tasks.md
+++ b/doc/tutorial-tasks.md
@@ -120,9 +120,8 @@ should interleave the output in vaguely random order.
 ~~~
 # use std::io::print;
 # use std::task::spawn;
-# use std::int;
 
-for int::range(0, 20) |child_task_number| {
+foreach child_task_number in range(0, 20) {
     do spawn {
        print(fmt!("I am child number %d\n", child_task_number));
     }
@@ -237,12 +236,11 @@ Instead we can use a `SharedChan`, a type that allows a single
 ~~~
 # use std::task::spawn;
 # use std::comm::{stream, SharedChan};
-# use std::uint;
 
 let (port, chan) = stream();
 let chan = SharedChan::new(chan);
 
-for uint::range(0, 3) |init_val| {
+foreach init_val in range(0u, 3) {
     // Create a new channel handle to distribute to the child task
     let child_chan = chan.clone();
     do spawn {
@@ -314,10 +312,9 @@ Here is another example showing how futures allow you to background computations
 be distributed on the available cores.
 ~~~
 # use std::vec;
-# use std::uint;
 fn partial_sum(start: uint) -> f64 {
     let mut local_sum = 0f64;
-    for uint::range(start*100000, (start+1)*100000) |num| {
+    foreach num in range(start*100000, (start+1)*100000) {
         local_sum += (num as f64 + 1.0).pow(&-2.0);
     }
     local_sum
@@ -349,7 +346,6 @@ Here is a small example showing how to use Arcs. We wish to run concurrently sev
 a single large vector of floats. Each task needs the full vector to perform its duty.
 ~~~
 # use std::vec;
-# use std::uint;
 # use std::rand;
 use extra::arc::Arc;
 
@@ -363,7 +359,7 @@ fn main() {
 
     let numbers_arc = Arc::new(numbers);
 
-    for uint::range(1,10) |num| {
+    foreach num in range(1u, 10) {
         let (port, chan)  = stream();
         chan.send(numbers_arc.clone());
 
diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs
index f984473a4c7..970178f05fe 100644
--- a/src/compiletest/runtest.rs
+++ b/src/compiletest/runtest.rs
@@ -23,7 +23,6 @@ use util::logv;
 use std::io;
 use std::os;
 use std::str;
-use std::uint;
 use std::vec;
 
 use extra::test::MetricMap;
@@ -414,7 +413,7 @@ fn check_expected_errors(expected_errors: ~[errors::ExpectedError],
         }
     }
 
-    for uint::range(0u, found_flags.len()) |i| {
+    foreach i in range(0u, found_flags.len()) {
         if !found_flags[i] {
             let ee = &expected_errors[i];
             fatal_ProcRes(fmt!("expected %s on line %u not found: %s",
diff --git a/src/libextra/arc.rs b/src/libextra/arc.rs
index f235a3d2db3..3aa77577fb2 100644
--- a/src/libextra/arc.rs
+++ b/src/libextra/arc.rs
@@ -566,7 +566,6 @@ mod tests {
     use std::cell::Cell;
     use std::comm;
     use std::task;
-    use std::uint;
 
     #[test]
     fn manually_share_arc() {
@@ -851,7 +850,7 @@ mod tests {
                 *state = 31337;
                 // FIXME: #7372: hits type inference bug with iterators
                 // send to other readers
-                for uint::range(0, reader_convos.len()) |i| {
+                foreach i in range(0u, reader_convos.len()) {
                     match reader_convos[i] {
                         (ref rc, _) => rc.send(()),
                     }
@@ -861,7 +860,7 @@ mod tests {
             do (&read_mode).read |state| {
                 // FIXME: #7372: hits type inference bug with iterators
                 // complete handshake with other readers
-                for uint::range(0, reader_convos.len()) |i| {
+                foreach i in range(0u, reader_convos.len()) {
                     match reader_convos[i] {
                         (_, ref rp) => rp.recv(),
                     }
diff --git a/src/libextra/arena.rs b/src/libextra/arena.rs
index 31acb5bd498..0f54a9effa2 100644
--- a/src/libextra/arena.rs
+++ b/src/libextra/arena.rs
@@ -277,7 +277,7 @@ impl Arena {
 #[test]
 fn test_arena_destructors() {
     let arena = Arena();
-    for uint::range(0, 10) |i| {
+    foreach i in range(0u, 10) {
         // Arena allocate something with drop glue to make sure it
         // doesn't leak.
         do arena.alloc { @i };
@@ -293,7 +293,7 @@ fn test_arena_destructors() {
 fn test_arena_destructors_fail() {
     let arena = Arena();
     // Put some stuff in the arena.
-    for uint::range(0, 10) |i| {
+    foreach i in range(0u, 10) {
         // Arena allocate something with drop glue to make sure it
         // doesn't leak.
         do arena.alloc { @i };
diff --git a/src/libextra/bitv.rs b/src/libextra/bitv.rs
index 570186b65a6..834faf96eb6 100644
--- a/src/libextra/bitv.rs
+++ b/src/libextra/bitv.rs
@@ -19,7 +19,6 @@ use std::ops;
 use std::uint;
 use std::vec;
 
-
 #[deriving(Clone)]
 struct SmallBitv {
     /// only the lowest nbits of this value are used. the rest is undefined.
@@ -146,7 +145,7 @@ impl BigBitv {
         let len = b.storage.len();
         assert_eq!(self.storage.len(), len);
         let mut changed = false;
-        for uint::range(0, len) |i| {
+        foreach i in range(0, len) {
             let mask = big_mask(nbits, i);
             let w0 = self.storage[i] & mask;
             let w1 = b.storage[i] & mask;
@@ -161,7 +160,7 @@ impl BigBitv {
 
     #[inline]
     pub fn each_storage(&mut self, op: &fn(v: &mut uint) -> bool) -> bool {
-        uint::range(0, self.storage.len(), |i| op(&mut self.storage[i]))
+        range(0u, self.storage.len()).advance(|i| op(&mut self.storage[i]))
     }
 
     #[inline]
@@ -511,7 +510,7 @@ impl Bitv {
     }
 
     pub fn ones(&self, f: &fn(uint) -> bool) -> bool {
-        uint::range(0, self.nbits, |i| !self.get(i) || f(i))
+        range(0u, self.nbits).advance(|i| !self.get(i) || f(i))
     }
 
 }
@@ -542,7 +541,7 @@ pub fn from_bools(bools: &[bool]) -> Bitv {
  */
 pub fn from_fn(len: uint, f: &fn(index: uint) -> bool) -> Bitv {
     let mut bitv = Bitv::new(len, false);
-    for uint::range(0, len) |i| {
+    foreach i in range(0u, len) {
         bitv.set(i, f(i));
     }
     bitv
@@ -559,7 +558,7 @@ fn iterate_bits(base: uint, bits: uint, f: &fn(uint) -> bool) -> bool {
     if bits == 0 {
         return true;
     }
-    for uint::range(0, uint::bits) |i| {
+    foreach i in range(0u, uint::bits) {
         if bits & (1 << i) != 0 {
             if !f(base + i) {
                 return false;
@@ -674,7 +673,7 @@ impl BitvSet {
     fn other_op(&mut self, other: &BitvSet, f: &fn(uint, uint) -> uint) {
         fn nbits(mut w: uint) -> uint {
             let mut bits = 0;
-            for uint::range(0, uint::bits) |_| {
+            foreach _ in range(0u, uint::bits) {
                 if w == 0 {
                     break;
                 }
@@ -1283,12 +1282,12 @@ mod tests {
     #[test]
     fn test_equal_sneaky_big() {
         let mut a = bitv::Bitv::new(100, false);
-        for uint::range(0, 100) |i| {
+        foreach i in range(0u, 100) {
             a.set(i, true);
         }
 
         let mut b = bitv::Bitv::new(100, true);
-        for uint::range(0, 100) |i| {
+        foreach i in range(0u, 100) {
             b.set(i, true);
         }
 
diff --git a/src/libextra/container.rs b/src/libextra/container.rs
index 0ca992fdacd..5b2de22ff07 100644
--- a/src/libextra/container.rs
+++ b/src/libextra/container.rs
@@ -41,9 +41,8 @@ pub trait Deque<T> : Mutable {
 
 #[cfg(test)]
 mod bench {
-
     use std::container::MutableMap;
-    use std::{vec,rand,uint};
+    use std::{vec, rand};
     use std::rand::RngUtil;
     use test::BenchHarness;
 
@@ -54,7 +53,7 @@ mod bench {
         let mut rng = rand::XorShiftRng::new();
 
         map.clear();
-        for uint::range(0,n) |_i| {
+        foreach _ in range(0, n) {
             map.insert(rng.gen::<uint>() % n, 1);
         }
 
@@ -71,7 +70,7 @@ mod bench {
                                                  bh: &mut BenchHarness) {
         // setup
         map.clear();
-        for uint::range(0, n) |i| {
+        foreach i in range(0u, n) {
             map.insert(i*2, 1);
         }
 
@@ -109,7 +108,7 @@ mod bench {
                                                map: &mut M,
                                                bh: &mut BenchHarness) {
         // setup
-        for uint::range(0, n) |i| {
+        foreach i in range(0u, n) {
             map.insert(i, 1);
         }
 
@@ -120,4 +119,4 @@ mod bench {
             i = (i + 1) % n;
         }
      }
-}
\ No newline at end of file
+}
diff --git a/src/libextra/crypto/sha2.rs b/src/libextra/crypto/sha2.rs
index 27612b00f61..d713e192972 100644
--- a/src/libextra/crypto/sha2.rs
+++ b/src/libextra/crypto/sha2.rs
@@ -8,9 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-
-use std::uint;
-
 use digest::Digest;
 
 // BitCounter is a specialized structure intended simply for counting the
@@ -169,7 +166,7 @@ impl Engine512 {
             ((x << 45) | (x >> 19)) ^ ((x << 3) | (x >> 61)) ^ (x >> 6)
         }
 
-        for uint::range(16, 80) |t| {
+        foreach t in range(16u, 80) {
             self.W[t] = sigma1(self.W[t - 2]) + self.W[t - 7] + sigma0(self.W[t - 15]) +
                 self.W[t - 16];
         }
@@ -184,7 +181,7 @@ impl Engine512 {
         let mut h = self.H7;
 
         let mut t = 0;
-        for uint::range(0, 10) |_| {
+        foreach _ in range(0u, 10) {
             h += sum1(e) + ch(e, f, g) + K64[t] + self.W[t];
             d += h;
             h += sum0(a) + maj(a, b, c);
@@ -254,7 +251,7 @@ impl Engine512 {
 
         // add length
         if (self.W_idx > 14) {
-            for uint::range(self.W_idx, 16) |_| {
+            foreach _ in range(self.W_idx, 16) {
                 self.process_word(0);
             }
         }
@@ -452,7 +449,7 @@ impl Engine256 {
             ((x >> 17) | (x << 15)) ^ ((x >> 19) | (x << 13)) ^ (x >> 10)
         }
 
-        for uint::range(16, 64) |t| {
+        foreach t in range(16u, 64) {
             self.W[t] = sigma1(self.W[t - 2]) + self.W[t - 7] + sigma0(self.W[t - 15]) +
                 self.W[t - 16];
         }
@@ -467,7 +464,7 @@ impl Engine256 {
         let mut h = self.H7;
 
         let mut t = 0;
-        for uint::range(0, 8) |_| {
+        foreach _ in range(0u, 8) {
             h += sum1(e) + ch(e, f, g) + K32[t] + self.W[t];
             d += h;
             h += sum0(a) + maj(a, b, c);
@@ -536,7 +533,7 @@ impl Engine256 {
 
         // add length
         if (self.W_idx > 14) {
-            for uint::range(self.W_idx, 16) |_| {
+            foreach _ in range(self.W_idx, 16) {
                 self.process_word(0);
             }
         }
diff --git a/src/libextra/dlist.rs b/src/libextra/dlist.rs
index b2b39d34ce2..392eaf28157 100644
--- a/src/libextra/dlist.rs
+++ b/src/libextra/dlist.rs
@@ -607,7 +607,6 @@ pub fn check_links<T>(list: &DList<T>) {
 mod tests {
     use super::*;
     use std::rand;
-    use std::int;
     use extra::test;
 
     #[test]
@@ -944,7 +943,7 @@ mod tests {
     fn fuzz_test(sz: int) {
         let mut m = DList::new::<int>();
         let mut v = ~[];
-        for int::range(0i, sz) |i| {
+        foreach i in range(0, sz) {
             check_links(&m);
             let r: u8 = rand::random();
             match r % 6 {
diff --git a/src/libextra/fileinput.rs b/src/libextra/fileinput.rs
index 04bddeccf12..0de8c239d56 100644
--- a/src/libextra/fileinput.rs
+++ b/src/libextra/fileinput.rs
@@ -596,7 +596,7 @@ mod test {
         input.next_file(); // skip the rest of 1
 
         // read all lines from 1 (but don't read any from 2),
-        for uint::range(1, 4) |i| {
+        foreach i in range(1u, 4) {
             assert_eq!(input.read_line(), fmt!("1 %u", i));
         }
         // 1 is finished, but 2 hasn't been started yet, so this will
diff --git a/src/libextra/flatpipes.rs b/src/libextra/flatpipes.rs
index 7840345e276..9e7294df4b7 100644
--- a/src/libextra/flatpipes.rs
+++ b/src/libextra/flatpipes.rs
@@ -29,12 +29,12 @@ This example sends boxed integers across tasks using serialization.
 let (port, chan) = serial::pipe_stream();
 
 do task::spawn || {
-    for int::range(0, 10) |i| {
+    foreach i in range(0, 10) {
         chan.send(@i)
     }
 }
 
-for int::range(0, 10) |i| {
+foreach i in range(0, 10) {
     assert @i == port.recv()
 }
 ~~~
@@ -641,7 +641,6 @@ mod test {
     use flatpipes::{BytePort, FlatChan, FlatPort};
 
     use std::comm;
-    use std::int;
     use std::io::BytesWriter;
     use std::result;
     use std::task;
@@ -669,12 +668,12 @@ mod test {
         let (port, chan) = serial::pipe_stream();
 
         do task::spawn || {
-            for int::range(0, 10) |i| {
+            foreach i in range(0, 10) {
                 chan.send(i)
             }
         }
 
-        for int::range(0, 10) |i| {
+        foreach i in range(0, 10) {
             assert!(i == port.recv())
         }
     }
@@ -685,12 +684,12 @@ mod test {
         let (port, chan) = serial::pipe_stream();
 
         do task::spawn || {
-            for int::range(0, 10) |i| {
+            foreach i in range(0, 10) {
                 chan.send(@i)
             }
         }
 
-        for int::range(0, 10) |i| {
+        foreach i in range(0, 10) {
             assert!(@i == port.recv())
         }
     }
@@ -716,12 +715,12 @@ mod test {
         let (port, chan) = pod::pipe_stream();
 
         do task::spawn || {
-            for int::range(0, 10) |i| {
+            foreach i in range(0, 10) {
                 chan.send(i)
             }
         }
 
-        for int::range(0, 10) |i| {
+        foreach i in range(0, 10) {
             assert!(i == port.recv())
         }
     }
@@ -827,7 +826,7 @@ mod test {
             // TcpSocketBuf is a Writer!
             let chan = writer_chan(socket_buf);
 
-            for int::range(0, 10) |i| {
+            foreach i in range(0, 10) {
                 debug!("sending %?", i);
                 chan.send(i)
             }
@@ -850,7 +849,7 @@ mod test {
             // TcpSocketBuf is a Reader!
             let port = reader_port(socket_buf);
 
-            for int::range(0, 10) |i| {
+            foreach i in range(0, 10) {
                 let j = port.recv();
                 debug!("received %?", j);
                 assert_eq!(i, j);
diff --git a/src/libextra/num/bigint.rs b/src/libextra/num/bigint.rs
index 453ad857a05..6f575926cc6 100644
--- a/src/libextra/num/bigint.rs
+++ b/src/libextra/num/bigint.rs
@@ -1608,7 +1608,7 @@ mod biguint_tests {
     fn test_factor() {
         fn factor(n: uint) -> BigUint {
             let mut f= One::one::<BigUint>();
-            for uint::range(2, n + 1) |i| {
+            foreach i in range(2, n + 1) {
                 // FIXME(#6102): Assignment operator for BigInt causes ICE
                 // f *= BigUint::from_uint(i);
                 f = f * BigUint::from_uint(i);
diff --git a/src/libextra/ringbuf.rs b/src/libextra/ringbuf.rs
index 9cb45a2ec7a..f3f34a3becc 100644
--- a/src/libextra/ringbuf.rs
+++ b/src/libextra/ringbuf.rs
@@ -14,7 +14,6 @@
 //! extra::container::Deque`.
 
 use std::num;
-use std::uint;
 use std::vec;
 use std::iterator::{FromIterator, Invert, RandomAccessIterator, Extendable};
 
@@ -278,7 +277,7 @@ fn grow<T>(nelts: uint, loptr: &mut uint, elts: &mut ~[Option<T>]) {
     elts.reserve(newlen);
 
     /* fill with None */
-    for uint::range(elts.len(), elts.capacity()) |_| {
+    foreach _ in range(elts.len(), elts.capacity()) {
         elts.push(None);
     }
 
@@ -293,11 +292,11 @@ fn grow<T>(nelts: uint, loptr: &mut uint, elts: &mut ~[Option<T>]) {
 
     assert!(newlen - nelts/2 >= nelts);
     if lo <= (nelts - lo) { // A
-        for uint::range(0, lo) |i| {
+        foreach i in range(0u, lo) {
             elts.swap(i, nelts + i);
         }
     } else {                // B
-        for uint::range(lo, nelts) |i| {
+        foreach i in range(lo, nelts) {
             elts.swap(i, newlen - nelts + i);
         }
         *loptr += newlen - nelts;
@@ -345,7 +344,6 @@ mod tests {
     use super::*;
     use std::clone::Clone;
     use std::cmp::Eq;
-    use std::{int, uint};
     use extra::test;
 
     #[test]
@@ -463,21 +461,21 @@ mod tests {
     #[test]
     fn test_push_front_grow() {
         let mut deq = RingBuf::new();
-        for uint::range(0, 66) |i| {
+        foreach i in range(0u, 66) {
             deq.push_front(i);
         }
         assert_eq!(deq.len(), 66);
 
-        for uint::range(0, 66) |i| {
+        foreach i in range(0u, 66) {
             assert_eq!(*deq.get(i), 65 - i);
         }
 
         let mut deq = RingBuf::new();
-        for uint::range(0, 66) |i| {
+        foreach i in range(0u, 66) {
             deq.push_back(i);
         }
 
-        for uint::range(0, 66) |i| {
+        foreach i in range(0u, 66) {
             assert_eq!(*deq.get(i), i);
         }
     }
@@ -608,12 +606,12 @@ mod tests {
         assert_eq!(d.iter().next(), None);
         assert_eq!(d.iter().size_hint(), (0, Some(0)));
 
-        for int::range(0,5) |i| {
+        foreach i in range(0, 5) {
             d.push_back(i);
         }
         assert_eq!(d.iter().collect::<~[&int]>(), ~[&0,&1,&2,&3,&4]);
 
-        for int::range(6,9) |i| {
+        foreach i in range(6, 9) {
             d.push_front(i);
         }
         assert_eq!(d.iter().collect::<~[&int]>(), ~[&8,&7,&6,&0,&1,&2,&3,&4]);
@@ -633,12 +631,12 @@ mod tests {
         let mut d = RingBuf::new();
         assert_eq!(d.rev_iter().next(), None);
 
-        for int::range(0,5) |i| {
+        foreach i in range(0, 5) {
             d.push_back(i);
         }
         assert_eq!(d.rev_iter().collect::<~[&int]>(), ~[&4,&3,&2,&1,&0]);
 
-        for int::range(6,9) |i| {
+        foreach i in range(6, 9) {
             d.push_front(i);
         }
         assert_eq!(d.rev_iter().collect::<~[&int]>(), ~[&4,&3,&2,&1,&0,&6,&7,&8]);
@@ -649,7 +647,7 @@ mod tests {
         let mut d = RingBuf::new();
         assert!(d.mut_iter().next().is_none());
 
-        for uint::range(0,3) |i| {
+        foreach i in range(0u, 3) {
             d.push_front(i);
         }
 
@@ -672,7 +670,7 @@ mod tests {
         let mut d = RingBuf::new();
         assert!(d.mut_rev_iter().next().is_none());
 
-        for uint::range(0,3) |i| {
+        foreach i in range(0u, 3) {
             d.push_front(i);
         }
 
diff --git a/src/libextra/serialize.rs b/src/libextra/serialize.rs
index 95f3af006e8..ad8f9297bfb 100644
--- a/src/libextra/serialize.rs
+++ b/src/libextra/serialize.rs
@@ -21,7 +21,6 @@ Core encoding and decoding interfaces.
 use std::at_vec;
 use std::hashmap::{HashMap, HashSet};
 use std::trie::{TrieMap, TrieSet};
-use std::uint;
 use std::vec;
 use ringbuf::RingBuf;
 use container::Deque;
@@ -679,7 +678,7 @@ impl<D:Decoder,T:Decodable<D>> Decodable<D> for DList<T> {
     fn decode(d: &mut D) -> DList<T> {
         let mut list = DList::new();
         do d.read_seq |d, len| {
-            for uint::range(0, len) |i| {
+            foreach i in range(0u, len) {
                 list.push_back(d.read_seq_elt(i, |d| Decodable::decode(d)));
             }
         }
@@ -704,7 +703,7 @@ impl<D:Decoder,T:Decodable<D>> Decodable<D> for RingBuf<T> {
     fn decode(d: &mut D) -> RingBuf<T> {
         let mut deque = RingBuf::new();
         do d.read_seq |d, len| {
-            for uint::range(0, len) |i| {
+            foreach i in range(0u, len) {
                 deque.push_back(d.read_seq_elt(i, |d| Decodable::decode(d)));
             }
         }
@@ -737,7 +736,7 @@ impl<
     fn decode(d: &mut D) -> HashMap<K, V> {
         do d.read_map |d, len| {
             let mut map = HashMap::with_capacity(len);
-            for uint::range(0, len) |i| {
+            foreach i in range(0u, len) {
                 let key = d.read_map_elt_key(i, |d| Decodable::decode(d));
                 let val = d.read_map_elt_val(i, |d| Decodable::decode(d));
                 map.insert(key, val);
@@ -769,7 +768,7 @@ impl<
     fn decode(d: &mut D) -> HashSet<T> {
         do d.read_seq |d, len| {
             let mut set = HashSet::with_capacity(len);
-            for uint::range(0, len) |i| {
+            foreach i in range(0u, len) {
                 set.insert(d.read_seq_elt(i, |d| Decodable::decode(d)));
             }
             set
@@ -801,7 +800,7 @@ impl<
     fn decode(d: &mut D) -> TrieMap<V> {
         do d.read_map |d, len| {
             let mut map = TrieMap::new();
-            for uint::range(0, len) |i| {
+            foreach i in range(0u, len) {
                 let key = d.read_map_elt_key(i, |d| Decodable::decode(d));
                 let val = d.read_map_elt_val(i, |d| Decodable::decode(d));
                 map.insert(key, val);
@@ -828,7 +827,7 @@ impl<D: Decoder> Decodable<D> for TrieSet {
     fn decode(d: &mut D) -> TrieSet {
         do d.read_seq |d, len| {
             let mut set = TrieSet::new();
-            for uint::range(0, len) |i| {
+            foreach i in range(0u, len) {
                 set.insert(d.read_seq_elt(i, |d| Decodable::decode(d)));
             }
             set
@@ -861,7 +860,7 @@ impl<
     fn decode(d: &mut D) -> TreeMap<K, V> {
         do d.read_map |d, len| {
             let mut map = TreeMap::new();
-            for uint::range(0, len) |i| {
+            foreach i in range(0u, len) {
                 let key = d.read_map_elt_key(i, |d| Decodable::decode(d));
                 let val = d.read_map_elt_val(i, |d| Decodable::decode(d));
                 map.insert(key, val);
@@ -893,7 +892,7 @@ impl<
     fn decode(d: &mut D) -> TreeSet<T> {
         do d.read_seq |d, len| {
             let mut set = TreeSet::new();
-            for uint::range(0, len) |i| {
+            foreach i in range(0u, len) {
                 set.insert(d.read_seq_elt(i, |d| Decodable::decode(d)));
             }
             set
diff --git a/src/libextra/smallintmap.rs b/src/libextra/smallintmap.rs
index eba9e1a4ed1..e939f42ac90 100644
--- a/src/libextra/smallintmap.rs
+++ b/src/libextra/smallintmap.rs
@@ -30,7 +30,7 @@ impl<V> Container for SmallIntMap<V> {
     /// Return the number of elements in the map
     fn len(&self) -> uint {
         let mut sz = 0;
-        for uint::range(0, self.v.len()) |i| {
+        foreach i in range(0u, self.v.len()) {
             match self.v[i] {
                 Some(_) => sz += 1,
                 None => {}
@@ -123,13 +123,13 @@ impl<V> SmallIntMap<V> {
 
     /// Visit all key-value pairs in order
     pub fn each<'a>(&'a self, it: &fn(&uint, &'a V) -> bool) -> bool {
-        for uint::range(0, self.v.len()) |i| {
+        foreach i in range(0u, self.v.len()) {
             match self.v[i] {
               Some(ref elt) => if !it(&i, elt) { return false; },
               None => ()
             }
         }
-        return true;
+        true
     }
 
     /// Visit all keys in order
@@ -144,13 +144,13 @@ impl<V> SmallIntMap<V> {
 
     /// Iterate over the map and mutate the contained values
     pub fn mutate_values(&mut self, it: &fn(&uint, &mut V) -> bool) -> bool {
-        for uint::range(0, self.v.len()) |i| {
+        foreach i in range(0, self.v.len()) {
             match self.v[i] {
               Some(ref mut elt) => if !it(&i, elt) { return false; },
               None => ()
             }
         }
-        return true;
+        true
     }
 
     /// Visit all key-value pairs in reverse order
diff --git a/src/libextra/sort.rs b/src/libextra/sort.rs
index 9832ff7396b..ffcfc500b5e 100644
--- a/src/libextra/sort.rs
+++ b/src/libextra/sort.rs
@@ -12,7 +12,6 @@
 
 
 use std::cmp::{Eq, Ord};
-use std::uint;
 use std::util::swap;
 use std::vec;
 
@@ -471,7 +470,7 @@ impl<T:Clone + Ord> MergeState<T> {
         assert!(len1 != 0 && len2 != 0 && base1+len1 == base2);
 
         let mut tmp = ~[];
-        for uint::range(base1, base1+len1) |i| {
+        foreach i in range(base1, base1+len1) {
             tmp.push(array[i].clone());
         }
 
@@ -581,7 +580,7 @@ impl<T:Clone + Ord> MergeState<T> {
         assert!(len1 != 1 && len2 != 0 && base1 + len1 == base2);
 
         let mut tmp = ~[];
-        for uint::range(base2, base2+len2) |i| {
+        foreach i in range(base2, base2+len2) {
             tmp.push(array[i].clone());
         }
 
@@ -1022,7 +1021,6 @@ mod big_tests {
 
     use std::rand::RngUtil;
     use std::rand;
-    use std::uint;
     use std::vec;
 
     #[test]
@@ -1056,7 +1054,7 @@ mod big_tests {
 
     fn tabulate_unique(lo: uint, hi: uint) {
         fn isSorted<T:Ord>(arr: &[T]) {
-            for uint::range(0, arr.len()-1) |i| {
+            foreach i in range(0u, arr.len() - 1) {
                 if arr[i] > arr[i+1] {
                     fail!("Array not sorted");
                 }
@@ -1065,7 +1063,7 @@ mod big_tests {
 
         let mut rng = rand::rng();
 
-        for uint::range(lo, hi) |i| {
+        foreach i in range(lo, hi) {
             let n = 1 << i;
             let mut arr: ~[float] = do vec::from_fn(n) |_i| {
                 rng.gen()
@@ -1127,7 +1125,7 @@ mod big_tests {
 
     fn tabulate_managed(lo: uint, hi: uint) {
         fn isSorted<T:Ord>(arr: &[@T]) {
-            for uint::range(0, arr.len()-1) |i| {
+            foreach i in range(0u, arr.len() - 1) {
                 if arr[i] > arr[i+1] {
                     fail!("Array not sorted");
                 }
@@ -1136,7 +1134,7 @@ mod big_tests {
 
         let mut rng = rand::rng();
 
-        for uint::range(lo, hi) |i| {
+        foreach i in range(lo, hi) {
             let n = 1 << i;
             let arr: ~[@float] = do vec::from_fn(n) |_i| {
                 @rng.gen()
diff --git a/src/libextra/tempfile.rs b/src/libextra/tempfile.rs
index 0a2f32375f8..79b26003696 100644
--- a/src/libextra/tempfile.rs
+++ b/src/libextra/tempfile.rs
@@ -14,13 +14,12 @@
 use std::os;
 use std::rand::RngUtil;
 use std::rand;
-use std::uint;
 
 /// Attempts to make a temporary directory inside of `tmpdir` whose name will
 /// have the suffix `suffix`. If no directory can be created, None is returned.
 pub fn mkdtemp(tmpdir: &Path, suffix: &str) -> Option<Path> {
     let mut r = rand::rng();
-    for uint::range(0, 1000) |_| {
+    foreach _ in range(0u, 1000) {
         let p = tmpdir.push(r.gen_str(16) + suffix);
         if os::make_dir(&p, 0x1c0) { // 700
             return Some(p);
diff --git a/src/libextra/terminfo/parser/compiled.rs b/src/libextra/terminfo/parser/compiled.rs
index a6ed88fa559..869f7d9df2b 100644
--- a/src/libextra/terminfo/parser/compiled.rs
+++ b/src/libextra/terminfo/parser/compiled.rs
@@ -13,7 +13,7 @@
 /// ncurses-compatible compiled terminfo format parsing (term(5))
 
 
-use std::{vec, int, str};
+use std::{vec, str};
 use std::io::Reader;
 use std::hashmap::HashMap;
 use super::super::TermInfo;
@@ -222,7 +222,7 @@ pub fn parse(file: @Reader, longnames: bool) -> Result<~TermInfo, ~str> {
 
     let mut bools_map = HashMap::new();
     if bools_bytes != 0 {
-        for int::range(0, bools_bytes) |i| {
+        foreach i in range(0, bools_bytes) {
             let b = file.read_byte();
             if b < 0 {
                 error!("EOF reading bools after %? entries", i);
@@ -243,7 +243,7 @@ pub fn parse(file: @Reader, longnames: bool) -> Result<~TermInfo, ~str> {
 
     let mut numbers_map = HashMap::new();
     if numbers_count != 0 {
-        for int::range(0, numbers_count) |i| {
+        foreach i in range(0, numbers_count) {
             let n = file.read_le_u16();
             if n != 0xFFFF {
                 debug!("%s#%?", nnames[i], n);
@@ -258,7 +258,7 @@ pub fn parse(file: @Reader, longnames: bool) -> Result<~TermInfo, ~str> {
 
     if string_offsets_count != 0 {
         let mut string_offsets = vec::with_capacity(10);
-        for int::range(0, string_offsets_count) |_i| {
+        foreach _ in range(0, string_offsets_count) {
             string_offsets.push(file.read_le_u16());
         }
 
diff --git a/src/libextra/test.rs b/src/libextra/test.rs
index 37d833cc824..fd5d3fb21b1 100644
--- a/src/libextra/test.rs
+++ b/src/libextra/test.rs
@@ -36,7 +36,6 @@ use std::io;
 use std::result;
 use std::task;
 use std::to_str::ToStr;
-use std::u64;
 use std::f64;
 use std::os;
 
@@ -991,7 +990,7 @@ impl BenchHarness {
     pub fn iter(&mut self, inner:&fn()) {
         self.ns_start = precise_time_ns();
         let k = self.iterations;
-        for u64::range(0, k) |_| {
+        foreach _ in range(0u64, k) {
             inner();
         }
         self.ns_end = precise_time_ns();
diff --git a/src/libextra/treemap.rs b/src/libextra/treemap.rs
index 9493a6fb0e0..82c7bf6caf1 100644
--- a/src/libextra/treemap.rs
+++ b/src/libextra/treemap.rs
@@ -16,7 +16,6 @@
 use std::num;
 use std::util::{swap, replace};
 use std::iterator::{FromIterator, Extendable};
-use std::uint;
 
 // This is implemented as an AA tree, which is a simplified variation of
 // a red-black tree where red (horizontal) nodes can only be added
@@ -48,7 +47,7 @@ impl<K: Eq + TotalOrd, V: Eq> Eq for TreeMap<K, V> {
         } else {
             let mut x = self.iter();
             let mut y = other.iter();
-            for uint::range(0, self.len()) |_| {
+            foreach _ in range(0u, self.len()) {
                 if x.next().unwrap() != y.next().unwrap() {
                     return false
                 }
@@ -66,7 +65,7 @@ fn lt<K: Ord + TotalOrd, V: Ord>(a: &TreeMap<K, V>,
     let mut y = b.iter();
 
     let (a_len, b_len) = (a.len(), b.len());
-    for uint::range(0, num::min(a_len, b_len)) |_| {
+    foreach _ in range(0u, num::min(a_len, b_len)) {
         let (key_a, value_a) = x.next().unwrap();
         let (key_b, value_b) = y.next().unwrap();
         if *key_a < *key_b { return true; }
diff --git a/src/librustc/back/rpath.rs b/src/librustc/back/rpath.rs
index 0bfbe1a80c5..22ef2e2278c 100644
--- a/src/librustc/back/rpath.rs
+++ b/src/librustc/back/rpath.rs
@@ -16,7 +16,6 @@ use metadata::filesearch;
 use std::hashmap::HashSet;
 use std::num;
 use std::os;
-use std::uint;
 use std::util;
 use std::vec;
 
@@ -150,7 +149,7 @@ pub fn get_relative_to(abs1: &Path, abs2: &Path) -> Path {
     }
 
     let mut path = ~[];
-    for uint::range(start_idx, len1 - 1) |_i| { path.push(~".."); };
+    foreach _ in range(start_idx, len1 - 1) { path.push(~".."); };
 
     path.push_all(split2.slice(start_idx, len2 - 1));
 
diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs
index 9f67d922c11..bebfc889a7d 100644
--- a/src/librustc/metadata/encoder.rs
+++ b/src/librustc/metadata/encoder.rs
@@ -1256,7 +1256,7 @@ fn create_index<T:Clone + Hash + IterBytes + 'static>(
                 index: ~[entry<T>])
                 -> ~[@~[entry<T>]] {
     let mut buckets: ~[@mut ~[entry<T>]] = ~[];
-    for uint::range(0u, 256u) |_i| { buckets.push(@mut ~[]); };
+    foreach _ in range(0u, 256u) { buckets.push(@mut ~[]); };
     foreach elt in index.iter() {
         let h = elt.val.hash() as uint;
         buckets[h % 256].push((*elt).clone());
diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs
index 74ef9612500..310d8ffe0d6 100644
--- a/src/librustc/middle/astencode.rs
+++ b/src/librustc/middle/astencode.rs
@@ -24,7 +24,6 @@ use middle;
 use util::ppaux::ty_to_str;
 
 use std::at_vec;
-use std::uint;
 use extra::ebml::reader;
 use extra::ebml;
 use extra::serialize;
@@ -1055,7 +1054,7 @@ impl ebml_decoder_decoder_helpers for reader::Decoder {
 
         fn type_string(doc: ebml::Doc) -> ~str {
             let mut str = ~"";
-            for uint::range(doc.start, doc.end) |i| {
+            foreach i in range(doc.start, doc.end) {
                 str.push_char(doc.data[i] as char);
             }
             str
diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs
index b9f9d7c45f5..4291ae2e7de 100644
--- a/src/librustc/middle/borrowck/check_loans.rs
+++ b/src/librustc/middle/borrowck/check_loans.rs
@@ -19,7 +19,6 @@
 
 
 use std::hashmap::HashSet;
-use std::uint;
 use mc = middle::mem_categorization;
 use middle::borrowck::*;
 use middle::moves;
@@ -158,9 +157,9 @@ impl<'self> CheckLoanCtxt<'self> {
             }
         }
 
-        for uint::range(0, new_loan_indices.len()) |i| {
+        foreach i in range(0u, new_loan_indices.len()) {
             let old_loan = &self.all_loans[new_loan_indices[i]];
-            for uint::range(i+1, new_loan_indices.len()) |j| {
+            foreach j in range(i+1, new_loan_indices.len()) {
                 let new_loan = &self.all_loans[new_loan_indices[j]];
                 self.report_error_if_loans_conflict(old_loan, new_loan);
             }
diff --git a/src/librustc/middle/check_match.rs b/src/librustc/middle/check_match.rs
index e52c0b949dc..df59461bda5 100644
--- a/src/librustc/middle/check_match.rs
+++ b/src/librustc/middle/check_match.rs
@@ -18,8 +18,8 @@ use middle::typeck::method_map;
 use middle::moves;
 use util::ppaux::ty_to_str;
 
+use std::iterator;
 use std::num;
-use std::uint;
 use std::vec;
 use extra::sort;
 use syntax::ast::*;
@@ -261,7 +261,7 @@ pub fn is_useful(cx: &MatchCheckCtxt, m: &matrix, v: &[@pat]) -> useful {
                     _ => max_len
                   }
                 };
-                for uint::range(0, max_len + 1) |n| {
+                foreach n in iterator::range(0u, max_len + 1) {
                   match is_useful_specialized(cx, m, v, vec(n), n, left_ty) {
                     not_useful => (),
                     ref u => return *u,
diff --git a/src/librustc/middle/dataflow.rs b/src/librustc/middle/dataflow.rs
index e98a759d8a8..6c291ae2241 100644
--- a/src/librustc/middle/dataflow.rs
+++ b/src/librustc/middle/dataflow.rs
@@ -269,7 +269,7 @@ impl<O:DataFlowOperator> DataFlowContext<O> {
         foreach (word_index, &word) in words.iter().enumerate() {
             if word != 0 {
                 let base_index = word_index * uint::bits;
-                for uint::range(0, uint::bits) |offset| {
+                foreach offset in range(0u, uint::bits) {
                     let bit = 1 << offset;
                     if (word & bit) != 0 {
                         // NB: we round up the total number of bits
@@ -998,7 +998,7 @@ fn bits_to_str(words: &[uint]) -> ~str {
 
     foreach &word in words.iter() {
         let mut v = word;
-        for uint::range(0, uint::bytes) |_| {
+        foreach _ in range(0u, uint::bytes) {
             result.push_char(sep);
             result.push_str(fmt!("%02x", v & 0xFF));
             v >>= 8;
@@ -1025,13 +1025,13 @@ fn bitwise(out_vec: &mut [uint],
            op: &fn(uint, uint) -> uint) -> bool {
     assert_eq!(out_vec.len(), in_vec.len());
     let mut changed = false;
-    for uint::range(0, out_vec.len()) |i| {
+    foreach i in range(0u, out_vec.len()) {
         let old_val = out_vec[i];
         let new_val = op(old_val, in_vec[i]);
         out_vec[i] = new_val;
         changed |= (old_val != new_val);
     }
-    return changed;
+    changed
 }
 
 fn set_bit(words: &mut [uint], bit: uint) -> bool {
diff --git a/src/librustc/middle/graph.rs b/src/librustc/middle/graph.rs
index afb0254ac1b..cf028512e61 100644
--- a/src/librustc/middle/graph.rs
+++ b/src/librustc/middle/graph.rs
@@ -187,16 +187,12 @@ impl<N,E> Graph<N,E> {
 
     pub fn each_node(&self, f: &fn(NodeIndex, &Node<N>) -> bool) -> bool {
         //! Iterates over all edges defined in the graph.
-
-        uint::range(0, self.nodes.len(),
-                    |i| f(NodeIndex(i), &self.nodes[i]))
+        range(0u, self.nodes.len()).advance(|i| f(NodeIndex(i), &self.nodes[i]))
     }
 
     pub fn each_edge(&self, f: &fn(EdgeIndex, &Edge<E>) -> bool) -> bool {
         //! Iterates over all edges defined in the graph.
-
-        uint::range(0, self.nodes.len(),
-                    |i| f(EdgeIndex(i), &self.edges[i]))
+        range(0u, self.nodes.len()).advance(|i| f(EdgeIndex(i), &self.edges[i]))
     }
 
     pub fn each_outgoing_edge(&self,
@@ -407,4 +403,4 @@ mod test {
                             [("BD", "B")],
                             [("DE", "E")]);
     }
-}
\ No newline at end of file
+}
diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs
index a5335d209fa..3e1d4b3ba8c 100644
--- a/src/librustc/middle/liveness.rs
+++ b/src/librustc/middle/liveness.rs
@@ -710,7 +710,7 @@ impl Liveness {
 
     pub fn indices(&self, ln: LiveNode, op: &fn(uint)) {
         let node_base_idx = self.idx(ln, Variable(0));
-        for uint::range(0, self.ir.num_vars) |var_idx| {
+        foreach var_idx in range(0u, self.ir.num_vars) {
             op(node_base_idx + var_idx)
         }
     }
@@ -721,7 +721,7 @@ impl Liveness {
                     op: &fn(uint, uint)) {
         let node_base_idx = self.idx(ln, Variable(0u));
         let succ_base_idx = self.idx(succ_ln, Variable(0u));
-        for uint::range(0u, self.ir.num_vars) |var_idx| {
+        foreach var_idx in range(0u, self.ir.num_vars) {
             op(node_base_idx + var_idx, succ_base_idx + var_idx);
         }
     }
@@ -731,7 +731,7 @@ impl Liveness {
                       ln: LiveNode,
                       test: &fn(uint) -> LiveNode) {
         let node_base_idx = self.idx(ln, Variable(0));
-        for uint::range(0, self.ir.num_vars) |var_idx| {
+        foreach var_idx in range(0u, self.ir.num_vars) {
             let idx = node_base_idx + var_idx;
             if test(idx).is_valid() {
                 wr.write_str(" ");
@@ -900,7 +900,7 @@ impl Liveness {
         // hack to skip the loop unless debug! is enabled:
         debug!("^^ liveness computation results for body %d (entry=%s)",
                {
-                   for uint::range(0u, self.ir.num_live_nodes) |ln_idx| {
+                   foreach ln_idx in range(0u, self.ir.num_live_nodes) {
                        debug!("%s", self.ln_str(LiveNode(ln_idx)));
                    }
                    body.id
diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs
index 059f3a05d9c..010ac66b30d 100644
--- a/src/librustc/middle/mem_categorization.rs
+++ b/src/librustc/middle/mem_categorization.rs
@@ -52,7 +52,6 @@ use middle::typeck;
 use util::ppaux::{ty_to_str, region_ptr_to_str, Repr};
 use util::common::indenter;
 
-use std::uint;
 use syntax::ast::{m_imm, m_const, m_mutbl};
 use syntax::ast;
 use syntax::codemap::span;
@@ -376,7 +375,7 @@ impl mem_categorization_ctxt {
     pub fn cat_expr_autoderefd(&self, expr: @ast::expr, autoderefs: uint)
                                -> cmt {
         let mut cmt = self.cat_expr_unadjusted(expr);
-        for uint::range(1, autoderefs+1) |deref| {
+        foreach deref in range(1u, autoderefs + 1) {
             cmt = self.cat_deref(expr, cmt, deref);
         }
         return cmt;
diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs
index b683014cccf..3a6864ffbf7 100644
--- a/src/librustc/middle/trans/base.rs
+++ b/src/librustc/middle/trans/base.rs
@@ -1769,7 +1769,7 @@ pub fn copy_args_to_allocas(fcx: @mut FunctionContext,
         _ => {}
     }
 
-    for uint::range(0, arg_tys.len()) |arg_n| {
+    foreach arg_n in range(0u, arg_tys.len()) {
         let arg_ty = arg_tys[arg_n];
         let raw_llarg = raw_llargs[arg_n];
 
@@ -1965,7 +1965,7 @@ fn insert_synthetic_type_entries(bcx: @mut Block,
      */
 
     let tcx = bcx.tcx();
-    for uint::range(0, fn_args.len()) |i| {
+    foreach i in range(0u, fn_args.len()) {
         debug!("setting type of argument %u (pat node %d) to %s",
                i, fn_args[i].pat.id, bcx.ty_to_str(arg_tys[i]));
 
diff --git a/src/librustc/middle/trans/cabi_x86_64.rs b/src/librustc/middle/trans/cabi_x86_64.rs
index 7796f05249d..7004de57da6 100644
--- a/src/librustc/middle/trans/cabi_x86_64.rs
+++ b/src/librustc/middle/trans/cabi_x86_64.rs
@@ -21,7 +21,6 @@ use middle::trans::type_::Type;
 use std::num;
 use std::option;
 use std::option::Option;
-use std::uint;
 use std::vec;
 
 #[deriving(Clone, Eq)]
@@ -146,7 +145,7 @@ fn classify_ty(ty: Type) -> ~[RegClass] {
     }
 
     fn all_mem(cls: &mut [RegClass]) {
-        for uint::range(0, cls.len()) |i| {
+        foreach i in range(0u, cls.len()) {
             cls[i] = Memory;
         }
     }
diff --git a/src/librustc/middle/trans/foreign.rs b/src/librustc/middle/trans/foreign.rs
index 066979b0b20..5c2b606ba16 100644
--- a/src/librustc/middle/trans/foreign.rs
+++ b/src/librustc/middle/trans/foreign.rs
@@ -33,7 +33,6 @@ use middle::ty::FnSig;
 use util::ppaux::ty_to_str;
 
 use std::cell::Cell;
-use std::uint;
 use std::vec;
 use syntax::codemap::span;
 use syntax::{ast, ast_util};
@@ -499,7 +498,7 @@ pub fn trans_foreign_mod(ccx: @mut CrateContext,
             let _icx = push_ctxt("foreign::wrap::build_args");
             let ccx = bcx.ccx();
             let n = tys.llsig.llarg_tys.len();
-            for uint::range(0, n) |i| {
+            foreach i in range(0u, n) {
                 let arg_i = bcx.fcx.arg_pos(i);
                 let mut llargval = get_param(llwrapfn, arg_i);
 
@@ -544,7 +543,7 @@ pub fn trans_intrinsic(ccx: @mut CrateContext,
         assert!(num_args <= 4);
         let mut args = [0 as ValueRef, ..4];
         let first_real_arg = bcx.fcx.arg_pos(0u);
-        for uint::range(0, num_args) |i| {
+        foreach i in range(0u, num_args) {
             args[i] = get_param(bcx.fcx.llfn, first_real_arg + i);
         }
         let llfn = bcx.ccx().intrinsics.get_copy(&name);
diff --git a/src/librustc/middle/trans/type_use.rs b/src/librustc/middle/trans/type_use.rs
index 52db07f2428..799cf7ece80 100644
--- a/src/librustc/middle/trans/type_use.rs
+++ b/src/librustc/middle/trans/type_use.rs
@@ -34,7 +34,6 @@ use middle::ty;
 use middle::typeck;
 
 use std::option::{Some, None};
-use std::uint;
 use std::vec;
 use extra::list::{List, Cons, Nil};
 use extra::list;
@@ -94,7 +93,7 @@ pub fn type_uses_for(ccx: @mut CrateContext, fn_id: def_id, n_tps: uint)
     // We also mark all of the params as used if it is an extern thing
     // that we haven't been able to inline yet.
     if is_default || fn_id_loc.crate != LOCAL_CRATE {
-        for uint::range(0u, n_tps) |n| { cx.uses[n] |= use_all; }
+        foreach n in range(0u, n_tps) { cx.uses[n] |= use_all; }
         return store_type_uses(cx, fn_id);
     }
 
@@ -118,13 +117,13 @@ pub fn type_uses_for(ccx: @mut CrateContext, fn_id: def_id, n_tps: uint)
         // This will be a static trait method. For now, we just assume
         // it fully depends on all of the type information. (Doing
         // otherwise would require finding the actual implementation).
-        for uint::range(0u, n_tps) |n| { cx.uses[n] |= use_all;}
+        foreach n in range(0u, n_tps) { cx.uses[n] |= use_all;}
         // We need to return early, before the arguments are processed,
         // because of difficulties in the handling of Self.
         return store_type_uses(cx, fn_id);
       }
       ast_map::node_variant(_, _, _) => {
-        for uint::range(0u, n_tps) |n| { cx.uses[n] |= use_repr;}
+        foreach n in range(0u, n_tps) { cx.uses[n] |= use_repr;}
       }
       ast_map::node_foreign_item(i@@foreign_item {
             node: foreign_item_fn(*),
@@ -173,13 +172,13 @@ pub fn type_uses_for(ccx: @mut CrateContext, fn_id: def_id, n_tps: uint)
                     _ => fail!("unknown intrinsic in type_use")
                 }
             };
-            for uint::range(0u, n_tps) |n| { cx.uses[n] |= flags;}
+            foreach n in range(0u, n_tps) { cx.uses[n] |= flags;}
         }
       }
       ast_map::node_struct_ctor(*) => {
         // Similarly to node_variant, this monomorphized function just
         // uses the representations of all of its type parameters.
-        for uint::range(0, n_tps) |n| { cx.uses[n] |= use_repr; }
+        foreach n in range(0u, n_tps) { cx.uses[n] |= use_repr; }
       }
       _ => {
         ccx.tcx.sess.bug(fmt!("unknown node type in type_use: %s",
@@ -210,7 +209,7 @@ pub fn type_needs(cx: &Context, use_: uint, ty: ty::t) {
         let uses = &*cx.uses;
         uses.len()
     };
-    for uint::range(0, len) |i| {
+    foreach i in range(0u, len) {
         if cx.uses[i] & use_ != use_ {
             type_needs_inner(cx, use_, ty, @Nil);
             return;
diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs
index 1215097025f..2f6dff62866 100644
--- a/src/librustc/middle/ty.rs
+++ b/src/librustc/middle/ty.rs
@@ -34,7 +34,6 @@ use std::ops;
 use std::ptr::to_unsafe_ptr;
 use std::to_bytes;
 use std::u32;
-use std::uint;
 use std::vec;
 use syntax::ast::*;
 use syntax::ast_util::is_local;
@@ -2962,7 +2961,7 @@ pub fn adjust_ty(cx: ctxt,
             let mut adjusted_ty = unadjusted_ty;
 
             if (!ty::type_is_error(adjusted_ty)) {
-                for uint::range(0, adj.autoderefs) |i| {
+                foreach i in range(0, adj.autoderefs) {
                     match ty::deref(cx, adjusted_ty, true) {
                         Some(mt) => { adjusted_ty = mt.ty; }
                         None => {
diff --git a/src/librustc/middle/typeck/check/method.rs b/src/librustc/middle/typeck/check/method.rs
index 51d454e45a0..ed0503763e8 100644
--- a/src/librustc/middle/typeck/check/method.rs
+++ b/src/librustc/middle/typeck/check/method.rs
@@ -97,7 +97,6 @@ use util::common::indenter;
 
 use std::hashmap::HashSet;
 use std::result;
-use std::uint;
 use std::vec;
 use extra::list::Nil;
 use syntax::ast::{def_id, sty_value, sty_region, sty_box};
@@ -775,7 +774,7 @@ impl<'self> LookupContext<'self> {
             self.tcx().sess.span_err(
                 self.expr.span,
                 "multiple applicable methods in scope");
-            for uint::range(0, relevant_candidates.len()) |idx| {
+            foreach idx in range(0u, relevant_candidates.len()) {
                 self.report_candidate(idx, &relevant_candidates[idx].origin);
             }
         }
diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs
index d09ca1c25e4..8730e22447c 100644
--- a/src/librustc/middle/typeck/check/regionck.rs
+++ b/src/librustc/middle/typeck/check/regionck.rs
@@ -39,7 +39,6 @@ use middle::typeck::infer;
 use util::ppaux::{ty_to_str, region_to_str};
 use middle::pat_util;
 
-use std::uint;
 use syntax::ast::{ManagedSigil, OwnedSigil, BorrowedSigil};
 use syntax::ast::{def_arg, def_binding, def_local, def_self, def_upvar};
 use syntax::ast;
@@ -600,7 +599,7 @@ fn constrain_derefs(rcx: @mut Rcx,
      */
     let tcx = rcx.fcx.tcx();
     let r_deref_expr = ty::re_scope(deref_expr.id);
-    for uint::range(0, derefs) |i| {
+    foreach i in range(0u, derefs) {
         debug!("constrain_derefs(deref_expr=?, derefd_ty=%s, derefs=%?/%?",
                rcx.fcx.infcx().ty_to_str(derefd_ty),
                i, derefs);
@@ -810,8 +809,6 @@ pub mod guarantor {
     use syntax::codemap::span;
     use util::ppaux::{ty_to_str};
 
-    use std::uint;
-
     pub fn for_addr_of(rcx: @mut Rcx, expr: @ast::expr, base: @ast::expr) {
         /*!
          * Computes the guarantor for an expression `&base` and then
@@ -1132,7 +1129,7 @@ pub mod guarantor {
             return ct;
         }
 
-        for uint::range(0, autoderefs) |_| {
+        foreach _ in range(0u, autoderefs) {
             ct.cat.guarantor = guarantor_of_deref(&ct.cat);
 
             match ty::deref(tcx, ct.ty, true) {
diff --git a/src/librustc/middle/typeck/coherence.rs b/src/librustc/middle/typeck/coherence.rs
index 950c836e032..f79d7dd3587 100644
--- a/src/librustc/middle/typeck/coherence.rs
+++ b/src/librustc/middle/typeck/coherence.rs
@@ -54,7 +54,6 @@ use util::ppaux::ty_to_str;
 
 use std::hashmap::{HashMap, HashSet};
 use std::result::Ok;
-use std::uint;
 use std::vec;
 
 pub struct UniversalQuantificationResult {
@@ -551,7 +550,7 @@ impl CoherenceChecker {
 
         let mut provided_names = HashSet::new();
         // Implemented methods
-        for uint::range(0, all_methods.len()) |i| {
+        foreach i in range(0u, all_methods.len()) {
             provided_names.insert(all_methods[i].ident);
         }
 
diff --git a/src/librustc/middle/typeck/infer/region_inference/mod.rs b/src/librustc/middle/typeck/infer/region_inference/mod.rs
index 500f8e4fe48..92f053cad89 100644
--- a/src/librustc/middle/typeck/infer/region_inference/mod.rs
+++ b/src/librustc/middle/typeck/infer/region_inference/mod.rs
@@ -374,7 +374,7 @@ impl RegionVarBindings {
     pub fn vars_created_since_snapshot(&mut self, snapshot: uint)
                                        -> ~[RegionVid] {
         do vec::build |push| {
-            for uint::range(snapshot, self.undo_log.len()) |i| {
+            foreach i in range(snapshot, self.undo_log.len()) {
                 match self.undo_log[i] {
                     AddVar(vid) => push(vid),
                     _ => ()
@@ -962,7 +962,7 @@ impl RegionVarBindings {
 
         let mut opt_graph = None;
 
-        for uint::range(0, self.num_vars()) |idx| {
+        foreach idx in range(0u, self.num_vars()) {
             match var_data[idx].value {
                 Value(_) => {
                     /* Inference successful */
@@ -1027,7 +1027,7 @@ impl RegionVarBindings {
         let mut graph = graph::Graph::with_capacity(num_vars + 1,
                                                     num_edges);
 
-        for uint::range(0, num_vars) |_| {
+        foreach _ in range(0u, num_vars) {
             graph.add_node(());
         }
         let dummy_idx = graph.add_node(());
diff --git a/src/libstd/at_vec.rs b/src/libstd/at_vec.rs
index 22cbcb0d6d4..ab1dd3d45f1 100644
--- a/src/libstd/at_vec.rs
+++ b/src/libstd/at_vec.rs
@@ -12,10 +12,9 @@
 
 use clone::Clone;
 use container::Container;
-use iterator::Iterator;
+use iterator::{Iterator, range};
 use option::{Option, Some, None};
 use sys;
-use uint;
 use unstable::raw::Repr;
 use vec::{ImmutableVector, OwnedVector};
 
@@ -95,7 +94,7 @@ pub fn append<T:Clone>(lhs: @[T], rhs: &[T]) -> @[T] {
         foreach x in lhs.iter() {
             push((*x).clone());
         }
-        for uint::range(0, rhs.len()) |i| {
+        foreach i in range(0u, rhs.len()) {
             push(rhs[i].clone());
         }
     }
@@ -323,14 +322,14 @@ pub mod raw {
 #[cfg(test)]
 mod test {
     use super::*;
-    use uint;
+    use prelude::*;
 
     #[test]
     fn test() {
         // Some code that could use that, then:
         fn seq_range(lo: uint, hi: uint) -> @[uint] {
             do build |push| {
-                for uint::range(lo, hi) |i| {
+                foreach i in range(lo, hi) {
                     push(i);
                 }
             }
diff --git a/src/libstd/hashmap.rs b/src/libstd/hashmap.rs
index ca61f3e5ad8..e7d51106c58 100644
--- a/src/libstd/hashmap.rs
+++ b/src/libstd/hashmap.rs
@@ -19,7 +19,7 @@ use container::{Container, Mutable, Map, MutableMap, Set, MutableSet};
 use clone::Clone;
 use cmp::{Eq, Equiv};
 use hash::Hash;
-use iterator::{Iterator, IteratorUtil, FromIterator, Extendable, Chain};
+use iterator::{Iterator, IteratorUtil, FromIterator, Extendable, Chain, range};
 use num;
 use option::{None, Option, Some};
 use rand::RngUtil;
@@ -284,7 +284,7 @@ impl<K:Hash + Eq,V> Container for HashMap<K, V> {
 impl<K:Hash + Eq,V> Mutable for HashMap<K, V> {
     /// Clear the map, removing all key-value pairs.
     fn clear(&mut self) {
-        for uint::range(0, self.buckets.len()) |idx| {
+        foreach idx in range(0u, self.buckets.len()) {
             self.buckets[idx] = None;
         }
         self.size = 0;
@@ -802,10 +802,8 @@ pub type SetAlgebraIter<'self, T> =
 
 #[cfg(test)]
 mod test_map {
-    use container::{Container, Map};
-    use option::{None, Some};
+    use prelude::*;
     use super::*;
-    use uint;
 
     #[test]
     fn test_create_capacity_zero() {
@@ -930,7 +928,7 @@ mod test_map {
     #[test]
     fn test_iterate() {
         let mut m = linear_map_with_capacity(4);
-        for uint::range(0, 32) |i| {
+        foreach i in range(0u, 32) {
             assert!(m.insert(i, i*2));
         }
         let mut observed = 0;
@@ -1023,7 +1021,6 @@ mod test_set {
     use prelude::*;
     use container::Container;
     use vec::ImmutableEqVector;
-    use uint;
 
     #[test]
     fn test_disjoint() {
@@ -1079,7 +1076,7 @@ mod test_set {
     #[test]
     fn test_iterate() {
         let mut a = HashSet::new();
-        for uint::range(0, 32) |i| {
+        foreach i in range(0u, 32) {
             assert!(a.insert(i));
         }
         let mut observed = 0;
diff --git a/src/libstd/iterator.rs b/src/libstd/iterator.rs
index 013901d57f8..3b829841484 100644
--- a/src/libstd/iterator.rs
+++ b/src/libstd/iterator.rs
@@ -47,6 +47,7 @@ pub trait Iterator<A> {
     /// Return a lower bound and upper bound on the remaining length of the iterator.
     ///
     /// The common use case for the estimate is pre-allocating space to store the results.
+    #[inline]
     fn size_hint(&self) -> (uint, Option<uint>) { (0, None) }
 }
 
@@ -1513,11 +1514,38 @@ impl<A> Counter<A> {
     }
 }
 
+/// A range of numbers from [0, N)
+#[deriving(Clone, DeepClone)]
+pub struct Range<A> {
+    priv state: A,
+    priv stop: A,
+    priv one: A
+}
+
+/// Return an iterator over the range [start, stop)
+#[inline]
+pub fn range<A: Add<A, A> + Ord + Clone + One>(start: A, stop: A) -> Range<A> {
+    Range{state: start, stop: stop, one: One::one()}
+}
+
+impl<A: Add<A, A> + Ord + Clone + One> Iterator<A> for Range<A> {
+    #[inline]
+    fn next(&mut self) -> Option<A> {
+        if self.state < self.stop {
+            let result = self.state.clone();
+            self.state = self.state + self.one;
+            Some(result)
+        } else {
+            None
+        }
+    }
+}
+
 impl<A: Add<A, A> + Clone> Iterator<A> for Counter<A> {
     #[inline]
     fn next(&mut self) -> Option<A> {
         let result = self.state.clone();
-        self.state = self.state.add(&self.step); // FIXME: #6050
+        self.state = self.state + self.step;
         Some(result)
     }
 
@@ -1703,13 +1731,13 @@ mod tests {
     #[test]
     fn test_cycle() {
         let cycle_len = 3;
-        let it = Counter::new(0u,1).take_(cycle_len).cycle();
+        let it = Counter::new(0u, 1).take_(cycle_len).cycle();
         assert_eq!(it.size_hint(), (uint::max_value, None));
         foreach (i, x) in it.take_(100).enumerate() {
             assert_eq!(i % cycle_len, x);
         }
 
-        let mut it = Counter::new(0u,1).take_(0).cycle();
+        let mut it = Counter::new(0u, 1).take_(0).cycle();
         assert_eq!(it.size_hint(), (0, Some(0)));
         assert_eq!(it.next(), None);
     }
@@ -1717,7 +1745,7 @@ mod tests {
     #[test]
     fn test_iterator_nth() {
         let v = &[0, 1, 2, 3, 4];
-        for uint::range(0, v.len()) |i| {
+        foreach i in range(0u, v.len()) {
             assert_eq!(v.iter().nth(i).unwrap(), &v[i]);
         }
     }
diff --git a/src/libstd/num/int_macros.rs b/src/libstd/num/int_macros.rs
index cef32b5c7e4..9aa79090425 100644
--- a/src/libstd/num/int_macros.rs
+++ b/src/libstd/num/int_macros.rs
@@ -126,12 +126,6 @@ pub fn range_step_inclusive(start: $T, last: $T, step: $T, it: &fn($T) -> bool)
 
 
 #[inline]
-/// Iterate over the range [`lo`..`hi`)
-pub fn range(lo: $T, hi: $T, it: &fn($T) -> bool) -> bool {
-    range_step(lo, hi, 1 as $T, it)
-}
-
-#[inline]
 /// Iterate over the range (`hi`..`lo`]
 pub fn range_rev(hi: $T, lo: $T, it: &fn($T) -> bool) -> bool {
     if hi == min_value { return true; }
@@ -895,9 +889,6 @@ mod tests {
     fn test_ranges() {
         let mut l = ~[];
 
-        for range(0,3) |i| {
-            l.push(i);
-        }
         for range_rev(14,11) |i| {
             l.push(i);
         }
@@ -919,8 +910,7 @@ mod tests {
         for range_step(min_value + 3, min_value, -2) |i| {
             l.push(i);
         }
-        assert_eq!(l, ~[0,1,2,
-                        13,12,11,
+        assert_eq!(l, ~[13,12,11,
                         20,22,24,
                         36,34,32,
                         max_value-2,
@@ -929,9 +919,6 @@ mod tests {
                         min_value+3,min_value+1]);
 
         // None of the `fail`s should execute.
-        for range(10,0) |_i| {
-            fail!(~"unreachable");
-        }
         for range_rev(0,10) |_i| {
             fail!(~"unreachable");
         }
diff --git a/src/libstd/num/uint_macros.rs b/src/libstd/num/uint_macros.rs
index acf7ea683fb..aa01b871b9d 100644
--- a/src/libstd/num/uint_macros.rs
+++ b/src/libstd/num/uint_macros.rs
@@ -126,12 +126,6 @@ pub fn range_step_inclusive(start: $T, last: $T, step: $T_SIGNED, it: &fn($T) ->
 }
 
 #[inline]
-/// Iterate over the range [`lo`..`hi`)
-pub fn range(lo: $T, hi: $T, it: &fn($T) -> bool) -> bool {
-    range_step(lo, hi, 1 as $T_SIGNED, it)
-}
-
-#[inline]
 /// Iterate over the range (`hi`..`lo`]
 pub fn range_rev(hi: $T, lo: $T, it: &fn($T) -> bool) -> bool {
     if hi == min_value { return true; }
@@ -660,9 +654,6 @@ mod tests {
     pub fn test_ranges() {
         let mut l = ~[];
 
-        for range(0,3) |i| {
-            l.push(i);
-        }
         for range_rev(14,11) |i| {
             l.push(i);
         }
@@ -685,8 +676,7 @@ mod tests {
             l.push(i);
         }
 
-        assert_eq!(l, ~[0,1,2,
-                        13,12,11,
+        assert_eq!(l, ~[13,12,11,
                         20,22,24,
                         36,34,32,
                         max_value-2,
@@ -695,9 +685,6 @@ mod tests {
                         min_value+3,min_value+1]);
 
         // None of the `fail`s should execute.
-        for range(0,0) |_i| {
-            fail!("unreachable");
-        }
         for range_rev(0,0) |_i| {
             fail!("unreachable");
         }
diff --git a/src/libstd/os.rs b/src/libstd/os.rs
index 1bfae8c40e1..8a1964783ae 100644
--- a/src/libstd/os.rs
+++ b/src/libstd/os.rs
@@ -32,7 +32,7 @@ use cast;
 use clone::Clone;
 use container::Container;
 use io;
-use iterator::IteratorUtil;
+use iterator::{IteratorUtil, range};
 use libc;
 use libc::{c_char, c_void, c_int, size_t};
 use libc::FILE;
@@ -43,7 +43,6 @@ use prelude::*;
 use ptr;
 use str;
 use to_str;
-use uint;
 use unstable::finally::Finally;
 use vec;
 
@@ -1114,7 +1113,7 @@ pub fn set_exit_status(code: int) {
 
 unsafe fn load_argc_and_argv(argc: c_int, argv: **c_char) -> ~[~str] {
     let mut args = ~[];
-    for uint::range(0, argc as uint) |i| {
+    foreach i in range(0u, argc as uint) {
         args.push(str::raw::from_c_str(*argv.offset(i as int)));
     }
     args
@@ -1163,7 +1162,7 @@ pub fn real_args() -> ~[~str] {
     let szArgList = unsafe { CommandLineToArgvW(lpCmdLine, lpArgCount) };
 
     let mut args = ~[];
-    for uint::range(0, nArgs as uint) |i| {
+    foreach i in range(0u, nArgs as uint) {
         unsafe {
             // Determine the length of this argument.
             let ptr = *szArgList.offset(i as int);
diff --git a/src/libstd/prelude.rs b/src/libstd/prelude.rs
index 0d9446bcfca..517bc4a441a 100644
--- a/src/libstd/prelude.rs
+++ b/src/libstd/prelude.rs
@@ -40,6 +40,7 @@ pub use result::{Result, Ok, Err};
 
 // Reexported functions
 pub use io::{print, println};
+pub use iterator::range;
 
 // Reexported types and traits
 pub use clone::{Clone, DeepClone};
@@ -49,7 +50,7 @@ pub use container::{Container, Mutable, Map, MutableMap, Set, MutableSet};
 pub use hash::Hash;
 pub use iter::Times;
 pub use iterator::{Iterator, IteratorUtil, DoubleEndedIterator, DoubleEndedIteratorUtil};
-pub use iterator::OrdIterator;
+pub use iterator::{ClonableIterator, OrdIterator};
 pub use num::{Num, NumCast};
 pub use num::{Orderable, Signed, Unsigned, Round};
 pub use num::{Algebraic, Trigonometric, Exponential, Hyperbolic};
diff --git a/src/libstd/rand.rs b/src/libstd/rand.rs
index 9134d2da257..075e208ab82 100644
--- a/src/libstd/rand.rs
+++ b/src/libstd/rand.rs
@@ -48,6 +48,7 @@ use clone::Clone;
 use cmp;
 use container::Container;
 use int;
+use iterator::{Iterator, range};
 use local_data;
 use num;
 use prelude::*;
@@ -582,7 +583,7 @@ impl<R: Rng> RngUtil for R {
     fn weighted_vec<T:Clone>(&mut self, v: &[Weighted<T>]) -> ~[T] {
         let mut r = ~[];
         foreach item in v.iter() {
-            for uint::range(0u, item.weight) |_i| {
+            foreach _ in range(0u, item.weight) {
                 r.push(item.item.clone());
             }
         }
diff --git a/src/libstd/rt/args.rs b/src/libstd/rt/args.rs
index cd950471286..e701cb64fb6 100644
--- a/src/libstd/rt/args.rs
+++ b/src/libstd/rt/args.rs
@@ -53,11 +53,10 @@ pub fn clone() -> Option<~[~str]> {
 #[cfg(target_os = "android")]
 #[cfg(target_os = "freebsd")]
 mod imp {
-
     use libc;
     use option::{Option, Some, None};
+    use iterator::{Iterator, range};
     use str;
-    use uint;
     use unstable::finally::Finally;
     use util;
 
@@ -113,10 +112,10 @@ mod imp {
     // Copied from `os`.
     unsafe fn load_argc_and_argv(argc: int, argv: **u8) -> ~[~str] {
         let mut args = ~[];
-        for uint::range(0, argc as uint) |i| {
+        foreach i in range(0u, argc as uint) {
             args.push(str::raw::from_c_str(*(argv as **libc::c_char).offset(i as int)));
         }
-        return args;
+        args
     }
 
     extern {
diff --git a/src/libstd/rt/io/net/tcp.rs b/src/libstd/rt/io/net/tcp.rs
index 2daa64e8085..764ef283eb8 100644
--- a/src/libstd/rt/io/net/tcp.rs
+++ b/src/libstd/rt/io/net/tcp.rs
@@ -143,11 +143,11 @@ impl Listener<TcpStream> for TcpListener {
 #[cfg(test)]
 mod test {
     use super::*;
-    use int;
     use cell::Cell;
     use rt::test::*;
     use rt::io::net::ip::Ipv4;
     use rt::io::*;
+    use prelude::*;
 
     #[test] #[ignore]
     fn bind_error() {
@@ -421,7 +421,7 @@ mod test {
 
             do spawntask {
                 let mut listener = TcpListener::bind(addr);
-                for int::range(0, MAX) |i| {
+                foreach i in range(0, MAX) {
                     let stream = Cell::new(listener.accept());
                     rtdebug!("accepted");
                     // Start another task to handle the connection
@@ -460,7 +460,7 @@ mod test {
 
             do spawntask {
                 let mut listener = TcpListener::bind(addr);
-                for int::range(0, MAX) |i| {
+                foreach i in range(0, MAX) {
                     let stream = Cell::new(listener.accept());
                     rtdebug!("accepted");
                     // Start another task to handle the connection
@@ -499,7 +499,7 @@ mod test {
 
             do spawntask {
                 let mut listener = TcpListener::bind(addr);
-                for int::range(0, MAX) |_| {
+                foreach _ in range(0, MAX) {
                     let stream = Cell::new(listener.accept());
                     rtdebug!("accepted");
                     // Start another task to handle the connection
@@ -537,7 +537,7 @@ mod test {
 
             do spawntask {
                 let mut listener = TcpListener::bind(addr);
-                for int::range(0, MAX) |_| {
+                foreach _ in range(0, MAX) {
                     let stream = Cell::new(listener.accept());
                     rtdebug!("accepted");
                     // Start another task to handle the connection
diff --git a/src/libstd/rt/sched.rs b/src/libstd/rt/sched.rs
index 4abe69a7d13..3f394283bce 100644
--- a/src/libstd/rt/sched.rs
+++ b/src/libstd/rt/sched.rs
@@ -723,13 +723,12 @@ impl ClosureConverter for UnsafeTaskReceiver {
 
 #[cfg(test)]
 mod test {
+    use prelude::*;
     use rt::test::*;
     use unstable::run_in_bare_thread;
     use borrow::to_uint;
     use rt::local::*;
     use rt::sched::{Scheduler};
-    use uint;
-    use int;
     use cell::Cell;
     use rt::thread::Thread;
     use rt::task::{Task, Sched};
@@ -752,7 +751,7 @@ mod test {
         let mut task_run_count = 0;
         let task_run_count_ptr: *mut uint = &mut task_run_count;
         do run_in_newsched_task || {
-            for uint::range(0,total) |_| {
+            foreach _ in range(0u, total) {
                 do spawntask || {
                     unsafe { *task_run_count_ptr = *task_run_count_ptr + 1};
                 }
@@ -951,7 +950,7 @@ mod test {
     #[test]
     fn test_stress_schedule_task_states() {
         let n = stress_factor() * 120;
-        for int::range(0,n as int) |_| {
+        foreach _ in range(0, n as int) {
             test_schedule_home_states();
         }
     }
diff --git a/src/libstd/rt/select.rs b/src/libstd/rt/select.rs
index b19357fa221..a5adb25b526 100644
--- a/src/libstd/rt/select.rs
+++ b/src/libstd/rt/select.rs
@@ -111,6 +111,7 @@ mod test {
     use comm::GenericChan;
     use task;
     use cell::Cell;
+    use iterator::{Iterator, range};
 
     #[test] #[ignore(cfg(windows))] #[should_fail]
     fn select_doesnt_get_trolled() {
@@ -263,7 +264,6 @@ mod test {
         select_racing_senders_helper(false, ~[7,8,9]);
 
         fn select_racing_senders_helper(killable: bool, send_on_chans: ~[uint]) {
-            use uint;
             use rt::test::spawntask_random;
 
             do run_in_newsched_task {
@@ -272,7 +272,7 @@ mod test {
                     let send_on_chans = send_on_chans.clone();
                     do task::spawn {
                         let mut ports = ~[];
-                        for uint::range(0, NUM_CHANS) |i| {
+                        foreach i in range(0u, NUM_CHANS) {
                             let (p,c) = oneshot();
                             ports.push(p);
                             if send_on_chans.contains(&i) {
diff --git a/src/libstd/rt/test.rs b/src/libstd/rt/test.rs
index 22eb42e2ee8..1ed0703de4d 100644
--- a/src/libstd/rt/test.rs
+++ b/src/libstd/rt/test.rs
@@ -14,7 +14,7 @@ use option::{Some, None};
 use cell::Cell;
 use clone::Clone;
 use container::Container;
-use iterator::Iterator;
+use iterator::{Iterator, range};
 use vec::{OwnedVector, MutableVector};
 use super::io::net::ip::{IpAddr, Ipv4, Ipv6};
 use rt::sched::Scheduler;
@@ -90,7 +90,7 @@ pub fn run_in_mt_newsched_task(f: ~fn()) {
         let mut handles = ~[];
         let mut scheds = ~[];
 
-        for uint::range(0, nthreads) |_| {
+        foreach _ in range(0u, nthreads) {
             let loop_ = ~UvEventLoop::new();
             let mut sched = ~Scheduler::new(loop_,
                                             work_queue.clone(),
diff --git a/src/libstd/rt/tube.rs b/src/libstd/rt/tube.rs
index ae455a6ad04..c014d0abda2 100644
--- a/src/libstd/rt/tube.rs
+++ b/src/libstd/rt/tube.rs
@@ -88,13 +88,13 @@ impl<T> Clone for Tube<T> {
 
 #[cfg(test)]
 mod test {
-    use int;
     use cell::Cell;
     use rt::test::*;
     use rt::rtio::EventLoop;
     use rt::sched::Scheduler;
     use rt::local::Local;
     use super::*;
+    use prelude::*;
 
     #[test]
     fn simple_test() {
@@ -166,7 +166,7 @@ mod test {
                 sched.enqueue_blocked_task(task);
             }
 
-            for int::range(0, MAX) |i| {
+            foreach i in range(0, MAX) {
                 let j = tube.recv();
                 assert!(j == i);
             }
diff --git a/src/libstd/rt/uv/uvio.rs b/src/libstd/rt/uv/uvio.rs
index 5be19752152..e15e3adb8c9 100644
--- a/src/libstd/rt/uv/uvio.rs
+++ b/src/libstd/rt/uv/uvio.rs
@@ -31,11 +31,11 @@ use str::StrSlice;
 use unstable::sync::Exclusive;
 
 #[cfg(test)] use container::Container;
-#[cfg(test)] use uint;
 #[cfg(test)] use unstable::run_in_bare_thread;
 #[cfg(test)] use rt::test::{spawntask,
                             next_test_ip4,
                             run_in_newsched_task};
+#[cfg(test)] use iterator::{Iterator, range};
 
 enum SocketNameKind {
     TcpPeer,
@@ -843,7 +843,7 @@ fn test_simple_tcp_server_and_client() {
                 let mut buf = [0, .. 2048];
                 let nread = stream.read(buf).unwrap();
                 assert_eq!(nread, 8);
-                for uint::range(0, nread) |i| {
+                foreach i in range(0u, nread) {
                     rtdebug!("%u", buf[i] as uint);
                     assert_eq!(buf[i], i as u8);
                 }
@@ -873,7 +873,7 @@ fn test_simple_udp_server_and_client() {
                 let mut buf = [0, .. 2048];
                 let (nread,src) = server_socket.recvfrom(buf).unwrap();
                 assert_eq!(nread, 8);
-                for uint::range(0, nread) |i| {
+                foreach i in range(0u, nread) {
                     rtdebug!("%u", buf[i] as uint);
                     assert_eq!(buf[i], i as u8);
                 }
@@ -908,7 +908,7 @@ fn test_read_and_block() {
 
             while current < expected {
                 let nread = stream.read(buf).unwrap();
-                for uint::range(0, nread) |i| {
+                foreach i in range(0u, nread) {
                     let val = buf[i] as uint;
                     assert_eq!(val, current % 8);
                     current += 1;
@@ -973,7 +973,7 @@ fn test_read_read_read() {
                     let nread = stream.read(buf).unwrap();
                     rtdebug!("read %u bytes", nread as uint);
                     total_bytes_read += nread;
-                    for uint::range(0, nread) |i| {
+                    foreach i in range(0u, nread) {
                         assert_eq!(buf[i], 1);
                     }
                 }
@@ -1065,7 +1065,7 @@ fn test_udp_many_read() {
                     let (nread, src) = res.unwrap();
                     assert_eq!(src, server_out_addr);
                     total_bytes_recv += nread;
-                    for uint::range(0, nread) |i| {
+                    foreach i in range(0u, nread) {
                         assert_eq!(buf[i], 1);
                     }
                 }
diff --git a/src/libstd/run.rs b/src/libstd/run.rs
index acdc97da58c..8af5a6dfac7 100644
--- a/src/libstd/run.rs
+++ b/src/libstd/run.rs
@@ -574,9 +574,6 @@ fn zeroed_process_information() -> libc::types::os::arch::extra::PROCESS_INFORMA
 // FIXME: this is only pub so it can be tested (see issue #4536)
 #[cfg(windows)]
 pub fn make_command_line(prog: &str, args: &[~str]) -> ~str {
-
-    use uint;
-
     let mut cmd = ~"";
     append_arg(&mut cmd, prog);
     foreach arg in args.iter() {
@@ -590,7 +587,7 @@ pub fn make_command_line(prog: &str, args: &[~str]) -> ~str {
         if quote {
             cmd.push_char('"');
         }
-        for uint::range(0, arg.len()) |i| {
+        foreach i in range(0u, arg.len()) {
             append_char_at(cmd, arg, i);
         }
         if quote {
diff --git a/src/libstd/trie.rs b/src/libstd/trie.rs
index f60093ce48c..97e2b3b3c34 100644
--- a/src/libstd/trie.rs
+++ b/src/libstd/trie.rs
@@ -261,7 +261,7 @@ impl<T> TrieNode<T> {
 
 impl<T> TrieNode<T> {
     fn each<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) -> bool {
-        for uint::range(0, self.children.len()) |idx| {
+        foreach idx in range(0u, self.children.len()) {
             match self.children[idx] {
                 Internal(ref x) => if !x.each(|i,t| f(i,t)) { return false },
                 External(k, ref v) => if !f(&k, v) { return false },
@@ -396,7 +396,7 @@ pub fn check_integrity<T>(trie: &TrieNode<T>) {
 #[cfg(test)]
 mod test_map {
     use super::*;
-    use option::{Some, None};
+    use prelude::*;
     use uint;
 
     #[test]
@@ -429,7 +429,7 @@ mod test_map {
             check_integrity(&trie.root);
         }
 
-        for uint::range(0, n) |x| {
+        foreach x in range(0u, n) {
             assert!(trie.contains_key(&x));
             assert!(!trie.insert(x, x + 1));
             check_integrity(&trie.root);
diff --git a/src/libstd/unstable/sync.rs b/src/libstd/unstable/sync.rs
index f5c82bad2b1..4b5c72e5a86 100644
--- a/src/libstd/unstable/sync.rs
+++ b/src/libstd/unstable/sync.rs
@@ -436,9 +436,9 @@ mod tests {
     use cell::Cell;
     use comm;
     use option::*;
+    use prelude::*;
     use super::{Exclusive, UnsafeAtomicRcBox, atomically};
     use task;
-    use uint;
     use util;
 
     #[test]
@@ -458,13 +458,13 @@ mod tests {
 
             let total = Exclusive::new(~0);
 
-            for uint::range(0, num_tasks) |_i| {
+            foreach _ in range(0u, num_tasks) {
                 let total = total.clone();
                 let (port, chan) = comm::stream();
                 futures.push(port);
 
                 do task::spawn || {
-                    for uint::range(0, count) |_i| {
+                    foreach _ in range(0u, count) {
                         do total.with |count| {
                             **count += 1;
                         }
diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs
index 6cff9ce84cf..ad5ded2002a 100644
--- a/src/libstd/vec.rs
+++ b/src/libstd/vec.rs
@@ -473,7 +473,7 @@ pub fn each_permutation<T:Clone>(values: &[T], fun: &fn(perm : &[T]) -> bool) ->
         indices.swap(k, l);
         indices.mut_slice(k+1, length).reverse();
         // fixup permutation based on indices
-        for uint::range(k, length) |i| {
+        foreach i in range(k, length) {
             permutation[i] = values[indices[i]].clone();
         }
     }
@@ -1461,7 +1461,7 @@ impl<T> OwnedVector<T> for ~[T] {
             assert!(newlen <= oldlen);
             unsafe {
                 // This loop is optimized out for non-drop types.
-                for uint::range(newlen, oldlen) |i| {
+                foreach i in range(newlen, oldlen) {
                     ptr::read_and_zero_ptr(ptr::mut_offset(p, i as int));
                 }
             }
@@ -1477,7 +1477,7 @@ impl<T> OwnedVector<T> for ~[T] {
         let len = self.len();
         let mut deleted: uint = 0;
 
-        for uint::range(0, len) |i| {
+        foreach i in range(0u, len) {
             if !f(&self[i]) {
                 deleted += 1;
             } else if deleted > 0 {
@@ -1561,7 +1561,7 @@ impl<T:Clone> OwnedCopyableVector<T> for ~[T] {
         let new_len = self.len() + rhs.len();
         self.reserve(new_len);
 
-        for uint::range(0u, rhs.len()) |i| {
+        foreach i in range(0u, rhs.len()) {
             self.push(unsafe { raw::get(rhs, i) })
         }
     }
diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs
index d89057890f1..04b9fdce666 100644
--- a/src/libsyntax/codemap.rs
+++ b/src/libsyntax/codemap.rs
@@ -22,7 +22,6 @@ source code snippets, etc.
 */
 
 use std::cmp;
-use std::uint;
 use extra::serialize::{Encodable, Decodable, Encoder, Decoder};
 
 pub trait Pos {
@@ -364,7 +363,7 @@ impl CodeMap {
         let lo = self.lookup_char_pos(sp.lo);
         let hi = self.lookup_char_pos(sp.hi);
         let mut lines = ~[];
-        for uint::range(lo.line - 1u, hi.line as uint) |i| {
+        foreach i in range(lo.line - 1u, hi.line as uint) {
             lines.push(i);
         };
         return @FileLines {file: lo.file, lines: lines};
diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs
index 0fb28596e11..01f55e8c4f4 100644
--- a/src/libsyntax/diagnostic.rs
+++ b/src/libsyntax/diagnostic.rs
@@ -12,7 +12,6 @@ use codemap::{Pos, span};
 use codemap;
 
 use std::io;
-use std::uint;
 use std::local_data;
 use extra::term;
 
@@ -306,7 +305,7 @@ fn highlight_lines(cm: @codemap::CodeMap,
             s.push_char(' ');
         }
         let orig = fm.get_line(lines.lines[0] as int);
-        for uint::range(0u,left-skip) |pos| {
+        foreach pos in range(0u, left-skip) {
             let curChar = (orig[pos] as char);
             // Whenever a tab occurs on the previous line, we insert one on
             // the error-point-squiggly-line as well (instead of a space).
diff --git a/src/libsyntax/ext/deriving/decodable.rs b/src/libsyntax/ext/deriving/decodable.rs
index 30dd89b02f1..77b5bf5bf2c 100644
--- a/src/libsyntax/ext/deriving/decodable.rs
+++ b/src/libsyntax/ext/deriving/decodable.rs
@@ -14,7 +14,6 @@ encodable.rs for more.
 */
 
 use std::vec;
-use std::uint;
 
 use ast::{MetaItem, item, expr, m_mutbl};
 use codemap::span;
@@ -84,7 +83,7 @@ fn decodable_substructure(cx: @ExtCtxt, span: span,
                         cx.expr_ident(span, substr.type_ident)
                     } else {
                         let mut fields = vec::with_capacity(n);
-                        for uint::range(0, n) |i| {
+                        foreach i in range(0, n) {
                             fields.push(getarg(fmt!("_field%u", i).to_managed(), i));
                         }
                         cx.expr_call_ident(span, substr.type_ident, fields)
@@ -126,7 +125,7 @@ fn decodable_substructure(cx: @ExtCtxt, span: span,
                             cx.expr_ident(span, name)
                         } else {
                             let mut fields = vec::with_capacity(n);
-                            for uint::range(0, n) |i| {
+                            foreach i in range(0u, n) {
                                 fields.push(getarg(i));
                             }
                             cx.expr_call_ident(span, name, fields)
diff --git a/src/libsyntax/ext/deriving/generic.rs b/src/libsyntax/ext/deriving/generic.rs
index cb74f152c1e..715e3013444 100644
--- a/src/libsyntax/ext/deriving/generic.rs
+++ b/src/libsyntax/ext/deriving/generic.rs
@@ -170,7 +170,6 @@ use ext::build::AstBuilder;
 use codemap::{span,respan};
 use opt_vec;
 
-use std::uint;
 use std::vec;
 
 pub use self::ty::*;
@@ -580,13 +579,13 @@ impl<'self> MethodDef<'self> {
         let mut raw_fields = ~[]; // ~[[fields of self],
                                  // [fields of next Self arg], [etc]]
         let mut patterns = ~[];
-        for uint::range(0, self_args.len()) |i| {
+        foreach i in range(0u, self_args.len()) {
             let (pat, ident_expr) = create_struct_pattern(cx, span,
                                                           type_ident, struct_def,
                                                           fmt!("__self_%u", i), ast::m_imm);
             patterns.push(pat);
             raw_fields.push(ident_expr);
-        };
+        }
 
         // transpose raw_fields
         let fields = match raw_fields {
@@ -992,7 +991,7 @@ fn create_enum_variant_pattern(cx: @ExtCtxt,
 
             let mut paths = ~[];
             let mut ident_expr = ~[];
-            for uint::range(0, variant_args.len()) |i| {
+            foreach i in range(0u, variant_args.len()) {
                 let path = cx.path_ident(span,
                                          cx.ident_of(fmt!("%s_%u", prefix, i)));
 
diff --git a/src/libsyntax/ext/tt/macro_parser.rs b/src/libsyntax/ext/tt/macro_parser.rs
index ad26d7b3f7e..982e605af22 100644
--- a/src/libsyntax/ext/tt/macro_parser.rs
+++ b/src/libsyntax/ext/tt/macro_parser.rs
@@ -21,7 +21,6 @@ use parse::token::{Token, EOF, to_str, nonterminal, get_ident_interner, ident_to
 use parse::token;
 
 use std::hashmap::HashMap;
-use std::uint;
 use std::vec;
 
 /* This is an Earley-like parser, without support for in-grammar nonterminals,
@@ -280,7 +279,7 @@ pub fn parse(
                         // most of the time.
 
                         // Only touch the binders we have actually bound
-                        for uint::range(ei.match_lo, ei.match_hi) |idx| {
+                        foreach idx in range(ei.match_lo, ei.match_hi) {
                             let sub = ei.matches[idx].clone();
                             new_pos.matches[idx]
                                 .push(@matched_seq(sub,
@@ -321,7 +320,7 @@ pub fn parse(
                         let mut new_ei = ei.clone();
                         new_ei.idx += 1u;
                         //we specifically matched zero repeats.
-                        for uint::range(match_idx_lo, match_idx_hi) |idx| {
+                        foreach idx in range(match_idx_lo, match_idx_hi) {
                             new_ei.matches[idx].push(@matched_seq(~[], sp));
                         }
 
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index a4666847f8c..d24dd86fda1 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -29,7 +29,6 @@ use print::pprust;
 
 use std::io;
 use std::u64;
-use std::uint;
 
 // The @ps is stored here to prevent recursive type.
 pub enum ann_node<'self> {
@@ -1791,7 +1790,7 @@ pub fn print_generics(s: @ps, generics: &ast::Generics) {
         }
 
         let mut ints = ~[];
-        for uint::range(0, total) |i| {
+        foreach i in range(0u, total) {
             ints.push(i);
         }
 
diff --git a/src/test/auxiliary/cci_class_5.rs b/src/test/auxiliary/cci_class_5.rs
index d64930b3dab..7cdfcf64bb9 100644
--- a/src/test/auxiliary/cci_class_5.rs
+++ b/src/test/auxiliary/cci_class_5.rs
@@ -17,7 +17,7 @@ pub mod kitties {
     }
 
     impl cat {
-        priv fn nap(&self) { for uint::range(1, 10000u) |_i|{}}
+        priv fn nap(&self) {}
     }
 
     pub fn cat(in_x : uint, in_y : int) -> cat {
diff --git a/src/test/bench/core-map.rs b/src/test/bench/core-map.rs
index 3bd0157c48a..922a518a382 100644
--- a/src/test/bench/core-map.rs
+++ b/src/test/bench/core-map.rs
@@ -31,19 +31,19 @@ fn ascending<M: MutableMap<uint, uint>>(map: &mut M, n_keys: uint) {
     io::println(" Ascending integers:");
 
     do timed("insert") {
-        for uint::range(0, n_keys) |i| {
+        foreach i in range(0u, n_keys) {
             map.insert(i, i + 1);
         }
     }
 
     do timed("search") {
-        for uint::range(0, n_keys) |i| {
+        foreach i in range(0u, n_keys) {
             assert_eq!(map.find(&i).unwrap(), &(i + 1));
         }
     }
 
     do timed("remove") {
-        for uint::range(0, n_keys) |i| {
+        foreach i in range(0, n_keys) {
             assert!(map.remove(&i));
         }
     }
@@ -74,19 +74,19 @@ fn descending<M: MutableMap<uint, uint>>(map: &mut M, n_keys: uint) {
 fn vector<M: MutableMap<uint, uint>>(map: &mut M, n_keys: uint, dist: &[uint]) {
 
     do timed("insert") {
-        for uint::range(0, n_keys) |i| {
+        foreach i in range(0u, n_keys) {
             map.insert(dist[i], i + 1);
         }
     }
 
     do timed("search") {
-        for uint::range(0, n_keys) |i| {
+        foreach i in range(0u, n_keys) {
             assert_eq!(map.find(&dist[i]).unwrap(), &(i + 1));
         }
     }
 
     do timed("remove") {
-        for uint::range(0, n_keys) |i| {
+        foreach i in range(0u, n_keys) {
             assert!(map.remove(&dist[i]));
         }
     }
diff --git a/src/test/bench/core-set.rs b/src/test/bench/core-set.rs
index 7a11a93abc5..c6234f40cfc 100644
--- a/src/test/bench/core-set.rs
+++ b/src/test/bench/core-set.rs
@@ -46,11 +46,11 @@ impl Results {
         {
             let mut set = f();
             do timed(&mut self.sequential_ints) {
-                for uint::range(0, num_keys) |i| {
+                foreach i in range(0u, num_keys) {
                     set.insert(i);
                 }
 
-                for uint::range(0, num_keys) |i| {
+                foreach i in range(0u, num_keys) {
                     assert!(set.contains(&i));
                 }
             }
@@ -67,12 +67,12 @@ impl Results {
 
         {
             let mut set = f();
-            for uint::range(0, num_keys) |i| {
+            foreach i in range(0u, num_keys) {
                 set.insert(i);
             }
 
             do timed(&mut self.delete_ints) {
-                for uint::range(0, num_keys) |i| {
+                foreach i in range(0u, num_keys) {
                     assert!(set.remove(&i));
                 }
             }
@@ -88,12 +88,12 @@ impl Results {
         {
             let mut set = f();
             do timed(&mut self.sequential_strings) {
-                for uint::range(0, num_keys) |i| {
+                foreach i in range(0u, num_keys) {
                     let s = uint::to_str(i);
                     set.insert(s);
                 }
 
-                for uint::range(0, num_keys) |i| {
+                foreach i in range(0u, num_keys) {
                     let s = uint::to_str(i);
                     assert!(set.contains(&s));
                 }
@@ -112,11 +112,11 @@ impl Results {
 
         {
             let mut set = f();
-            for uint::range(0, num_keys) |i| {
+            foreach i in range(0u, num_keys) {
                 set.insert(uint::to_str(i));
             }
             do timed(&mut self.delete_strings) {
-                for uint::range(0, num_keys) |i| {
+                foreach i in range(0u, num_keys) {
                     assert!(set.remove(&uint::to_str(i)));
                 }
             }
diff --git a/src/test/bench/core-std.rs b/src/test/bench/core-std.rs
index 754181f9cd8..100d9d673fa 100644
--- a/src/test/bench/core-std.rs
+++ b/src/test/bench/core-std.rs
@@ -74,7 +74,7 @@ fn read_line() {
     let path = Path(env!("CFG_SRC_DIR"))
         .push_rel(&Path("src/test/bench/shootout-k-nucleotide.data"));
 
-    for int::range(0, 3) |_i| {
+    foreach _ in range(0, 3) {
         let reader = io::file_reader(&path).unwrap();
         while !reader.eof() {
             reader.read_line();
@@ -119,7 +119,7 @@ fn vec_push_all() {
     let mut r = rand::rng();
 
     let mut v = ~[];
-    for uint::range(0, 1500) |i| {
+    foreach i in range(0u, 1500) {
         let mut rv = vec::from_elem(r.gen_uint_range(0, i + 1), i);
         if r.gen() {
             v.push_all(rv);
@@ -133,7 +133,7 @@ fn vec_push_all() {
 
 fn is_utf8_ascii() {
     let mut v : ~[u8] = ~[];
-    for uint::range(0, 20000) |_| {
+    foreach _ in range(0u, 20000) {
         v.push('b' as u8);
         if !str::is_utf8(v) {
             fail!("is_utf8 failed");
@@ -144,7 +144,7 @@ fn is_utf8_ascii() {
 fn is_utf8_multibyte() {
     let s = "b¢€𤭢";
     let mut v : ~[u8]= ~[];
-    for uint::range(0, 5000) |_| {
+    foreach _ in range(0u, 5000) {
         v.push_all(s.as_bytes());
         if !str::is_utf8(v) {
             fail!("is_utf8 failed");
diff --git a/src/test/bench/core-uint-to-str.rs b/src/test/bench/core-uint-to-str.rs
index 2c5cb5d1347..3e975e8f025 100644
--- a/src/test/bench/core-uint-to-str.rs
+++ b/src/test/bench/core-uint-to-str.rs
@@ -23,7 +23,7 @@ fn main() {
 
     let n = uint::from_str(args[1]).get();
 
-    for uint::range(0u, n) |i| {
+    foreach i in range(0u, n) {
         let x = uint::to_str(i);
         info!(x);
     }
diff --git a/src/test/bench/msgsend-pipes-shared.rs b/src/test/bench/msgsend-pipes-shared.rs
index 989630448be..77d7dd868da 100644
--- a/src/test/bench/msgsend-pipes-shared.rs
+++ b/src/test/bench/msgsend-pipes-shared.rs
@@ -64,12 +64,12 @@ fn run(args: &[~str]) {
     let num_bytes = 100;
     let start = extra::time::precise_time_s();
     let mut worker_results = ~[];
-    for uint::range(0, workers) |_i| {
+    foreach _ in range(0u, workers) {
         let to_child = to_child.clone();
         let mut builder = task::task();
         builder.future_result(|r| worker_results.push(r));
         do builder.spawn {
-            for uint::range(0, size / workers) |_i| {
+            foreach _ in range(0u, size / workers) {
                 //error!("worker %?: sending %? bytes", i, num_bytes);
                 to_child.send(bytes(num_bytes));
             }
diff --git a/src/test/bench/msgsend-pipes.rs b/src/test/bench/msgsend-pipes.rs
index eb653e2fe31..70d94c27375 100644
--- a/src/test/bench/msgsend-pipes.rs
+++ b/src/test/bench/msgsend-pipes.rs
@@ -58,12 +58,12 @@ fn run(args: &[~str]) {
     let num_bytes = 100;
     let start = extra::time::precise_time_s();
     let mut worker_results = ~[];
-    for uint::range(0, workers) |_i| {
+    foreach _ in range(0u, workers) {
         let to_child = to_child.clone();
         let mut builder = task::task();
         builder.future_result(|r| worker_results.push(r));
         do builder.spawn {
-            for uint::range(0, size / workers) |_i| {
+            foreach _ in range(0u, size / workers) {
                 //error!("worker %?: sending %? bytes", i, num_bytes);
                 to_child.send(bytes(num_bytes));
             }
diff --git a/src/test/bench/msgsend-ring-mutex-arcs.rs b/src/test/bench/msgsend-ring-mutex-arcs.rs
index 621f38035e9..626fa25766b 100644
--- a/src/test/bench/msgsend-ring-mutex-arcs.rs
+++ b/src/test/bench/msgsend-ring-mutex-arcs.rs
@@ -57,7 +57,7 @@ fn thread_ring(i: uint, count: uint, num_chan: pipe, num_port: pipe) {
     let mut num_chan = Some(num_chan);
     let mut num_port = Some(num_port);
     // Send/Receive lots of messages.
-    for uint::range(0u, count) |j| {
+    foreach j in range(0u, count) {
         //error!("task %?, iter %?", i, j);
         let num_chan2 = num_chan.take_unwrap();
         let num_port2 = num_port.take_unwrap();
@@ -90,7 +90,7 @@ fn main() {
     // create the ring
     let mut futures = ~[];
 
-    for uint::range(1u, num_tasks) |i| {
+    foreach i in range(1u, num_tasks) {
         //error!("spawning %?", i);
         let (new_chan, num_port) = init();
         let num_chan2 = Cell::new(num_chan.take());
diff --git a/src/test/bench/msgsend-ring-rw-arcs.rs b/src/test/bench/msgsend-ring-rw-arcs.rs
index 609a160aa5d..1a92b8b2fe8 100644
--- a/src/test/bench/msgsend-ring-rw-arcs.rs
+++ b/src/test/bench/msgsend-ring-rw-arcs.rs
@@ -53,7 +53,7 @@ fn thread_ring(i: uint, count: uint, num_chan: pipe, num_port: pipe) {
     let mut num_chan = Some(num_chan);
     let mut num_port = Some(num_port);
     // Send/Receive lots of messages.
-    for uint::range(0u, count) |j| {
+    foreach j in range(0u, count) {
         //error!("task %?, iter %?", i, j);
         let num_chan2 = num_chan.take_unwrap();
         let num_port2 = num_port.take_unwrap();
@@ -86,7 +86,7 @@ fn main() {
     // create the ring
     let mut futures = ~[];
 
-    for uint::range(1u, num_tasks) |i| {
+    foreach i in range(1u, num_tasks) {
         //error!("spawning %?", i);
         let (new_chan, num_port) = init();
         let num_chan2 = Cell::new(num_chan.take());
diff --git a/src/test/bench/noise.rs b/src/test/bench/noise.rs
index e25f1bdfa78..6a5f3623d0f 100644
--- a/src/test/bench/noise.rs
+++ b/src/test/bench/noise.rs
@@ -38,11 +38,11 @@ impl Noise2DContext {
     pub fn new() -> Noise2DContext {
         let mut r = rand::rng();
         let mut rgradients = [ Vec2 { x: 0.0, y: 0.0 }, ..256 ];
-        for int::range(0, 256) |i| {
+        foreach i in range(0, 256) {
             rgradients[i] = random_gradient(&mut r);
         }
         let mut permutations = [ 0, ..256 ];
-        for int::range(0, 256) |i| {
+        foreach i in range(0, 256) {
             permutations[i] = i;
         }
         r.shuffle_mut(permutations);
@@ -106,8 +106,8 @@ fn main() {
     let mut pixels = [0f32, ..256*256];
     let n2d = ~Noise2DContext::new();
     do 100.times {
-        for int::range(0, 256) |y| {
-            for int::range(0, 256) |x| {
+        foreach y in range(0, 256) {
+            foreach x in range(0, 256) {
                 let v = n2d.get(
                     x as f32 * 0.1f32,
                     y as f32 * 0.1f32
@@ -117,8 +117,8 @@ fn main() {
         };
     };
 
-    for int::range(0, 256) |y| {
-        for int::range(0, 256) |x| {
+    foreach y in range(0, 256) {
+        foreach x in range(0, 256) {
             print(symbols[pixels[y*256+x] / 0.2f32 as int]);
         }
         println("");
diff --git a/src/test/bench/shootout-fannkuch-redux.rs b/src/test/bench/shootout-fannkuch-redux.rs
index 35179328c83..d8766fdd643 100644
--- a/src/test/bench/shootout-fannkuch-redux.rs
+++ b/src/test/bench/shootout-fannkuch-redux.rs
@@ -1,5 +1,4 @@
 use std::from_str::FromStr;
-use std::i32::range;
 use std::os;
 use std::vec::MutableVector;
 use std::vec;
@@ -42,7 +41,7 @@ fn fannkuch_redux(n: i32) -> i32 {
                 }
 
                 let k2 = (k+1) >> 1;
-                for range(0, k2) |i| {
+                foreach i in range(0i32, k2) {
                     let (perm_i, perm_k_i) = {
                         (perm.unsafe_get(i as uint),
                             perm.unsafe_get((k-i) as uint))
diff --git a/src/test/bench/shootout-fasta-redux.rs b/src/test/bench/shootout-fasta-redux.rs
index f7b66e9e145..b5336add4e4 100644
--- a/src/test/bench/shootout-fasta-redux.rs
+++ b/src/test/bench/shootout-fasta-redux.rs
@@ -2,7 +2,7 @@ use std::cast::transmute;
 use std::from_str::FromStr;
 use std::libc::{FILE, STDOUT_FILENO, c_int, fdopen, fputc, fputs, fwrite, size_t};
 use std::os;
-use std::uint::{min, range};
+use std::uint::min;
 use std::vec::bytes::copy_memory;
 use std::vec;
 
@@ -165,7 +165,7 @@ impl RandomFasta {
             let mut buf = [0, ..LINE_LEN + 1];
 
             do lines.times {
-                for range(0, LINE_LEN) |i| {
+                foreach i in range(0u, LINE_LEN) {
                     buf[i] = self.nextc();
                 }
                 buf[LINE_LEN] = '\n' as u8;
@@ -174,7 +174,7 @@ impl RandomFasta {
                        1,
                        self.stdout);
             }
-            for range(0, chars_left) |i| {
+            foreach i in range(0u, chars_left) {
                 buf[i] = self.nextc();
             }
             fwrite(transmute(&buf[0]), chars_left as size_t, 1, self.stdout);
diff --git a/src/test/bench/shootout-fasta.rs b/src/test/bench/shootout-fasta.rs
index 350d139676f..6cee2c4e5ff 100644
--- a/src/test/bench/shootout-fasta.rs
+++ b/src/test/bench/shootout-fasta.rs
@@ -81,7 +81,7 @@ fn make_random_fasta(wr: @io::Writer,
         last: rng.next()
     };
     let mut op: ~str = ~"";
-    for uint::range(0u, n as uint) |_i| {
+    foreach _ in range(0u, n as uint) {
         op.push_char(select_random(myrandom_next(rng, 100u32),
                                    genelist.clone()));
         if op.len() >= LINE_LENGTH {
@@ -96,7 +96,7 @@ fn make_repeat_fasta(wr: @io::Writer, id: ~str, desc: ~str, s: ~str, n: int) {
     wr.write_line(~">" + id + " " + desc);
     let mut op = str::with_capacity( LINE_LENGTH );
     let sl = s.len();
-    for uint::range(0u, n as uint) |i| {
+    foreach i in range(0u, n as uint) {
         if (op.len() >= LINE_LENGTH) {
             wr.write_line( op );
             op = str::with_capacity( LINE_LENGTH );
diff --git a/src/test/bench/shootout-k-nucleotide.rs b/src/test/bench/shootout-k-nucleotide.rs
index 69d173c8070..34e979b506b 100644
--- a/src/test/bench/shootout-k-nucleotide.rs
+++ b/src/test/bench/shootout-k-nucleotide.rs
@@ -44,7 +44,7 @@ impl Code {
 
     fn pack(string: &str) -> Code {
         let mut code = Code(0u64);
-        for uint::range(0, string.len()) |i| {
+        foreach i in range(0u, string.len()) {
             code = code.push_char(string[i]);
         }
         code
diff --git a/src/test/bench/shootout-mandelbrot.rs b/src/test/bench/shootout-mandelbrot.rs
index 930439fe7f0..b46aa4b1dd5 100644
--- a/src/test/bench/shootout-mandelbrot.rs
+++ b/src/test/bench/shootout-mandelbrot.rs
@@ -1,6 +1,5 @@
 use std::cast::transmute;
 use std::from_str::FromStr;
-use std::i32::range;
 use std::libc::{STDOUT_FILENO, c_int, fdopen, fputc};
 use std::os;
 
@@ -20,9 +19,9 @@ fn main() {
         let mode = "w";
         let stdout = fdopen(STDOUT_FILENO as c_int, transmute(&mode[0]));
 
-        for range(0, h) |y| {
+        foreach y in range(0i32, h) {
             let y = y as f64;
-            for range(0, w) |x| {
+            foreach x in range(0i32, w) {
                 let mut Zr = 0f64;
                 let mut Zi = 0f64;
                 let mut Tr = 0f64;
@@ -30,7 +29,7 @@ fn main() {
                 let Cr = 2.0 * (x as f64) / (w as f64) - 1.5;
                 let Ci = 2.0 * (y as f64) / (h as f64) - 1.0;
 
-                for range(0, ITER as i32) |_| {
+                foreach _ in range(0i32, ITER as i32) {
                     if Tr + Ti > LIMIT * LIMIT {
                         break;
                     }
diff --git a/src/test/bench/shootout-nbody.rs b/src/test/bench/shootout-nbody.rs
index b294ca8f282..8011f4bda03 100644
--- a/src/test/bench/shootout-nbody.rs
+++ b/src/test/bench/shootout-nbody.rs
@@ -1,6 +1,5 @@
 use std::from_str::FromStr;
 use std::os;
-use std::uint::range;
 
 static PI: f64 = 3.141592653589793;
 static SOLAR_MASS: f64 = 4.0 * PI * PI;
@@ -81,8 +80,8 @@ struct Planet {
 fn advance(bodies: &mut [Planet, ..N_BODIES], dt: f64, steps: i32) {
     let mut d = [ 0.0, ..3 ];
     do (steps as uint).times {
-        for range(0, N_BODIES) |i| {
-            for range(i + 1, N_BODIES) |j| {
+        foreach i in range(0u, N_BODIES) {
+            foreach j in range(i + 1, N_BODIES) {
                 d[0] = bodies[i].x[0] - bodies[j].x[0];
                 d[1] = bodies[i].x[1] - bodies[j].x[1];
                 d[2] = bodies[i].x[2] - bodies[j].x[2];
@@ -113,13 +112,13 @@ fn advance(bodies: &mut [Planet, ..N_BODIES], dt: f64, steps: i32) {
 fn energy(bodies: &[Planet, ..N_BODIES]) -> f64 {
     let mut e = 0.0;
     let mut d = [ 0.0, ..3 ];
-    for range(0, N_BODIES) |i| {
-        for range(0, 3) |k| {
+    foreach i in range(0u, N_BODIES) {
+        foreach k in range(0u, 3) {
             e += bodies[i].mass * bodies[i].v[k] * bodies[i].v[k] / 2.0;
         }
 
-        for range(i + 1, N_BODIES) |j| {
-            for range(0, 3) |k| {
+        foreach j in range(i + 1, N_BODIES) {
+            foreach k in range(0u, 3) {
                 d[k] = bodies[i].x[k] - bodies[j].x[k];
             }
             let dist = (d[0]*d[0] + d[1]*d[1] + d[2]*d[2]).sqrt();
@@ -130,8 +129,8 @@ fn energy(bodies: &[Planet, ..N_BODIES]) -> f64 {
 }
 
 fn offset_momentum(bodies: &mut [Planet, ..N_BODIES]) {
-    for range(0, N_BODIES) |i| {
-        for range(0, 3) |k| {
+    foreach i in range(0u, N_BODIES) {
+        foreach k in range(0u, 3) {
             bodies[0].v[k] -= bodies[i].v[k] * bodies[i].mass / SOLAR_MASS;
         }
     }
diff --git a/src/test/bench/shootout-pfib.rs b/src/test/bench/shootout-pfib.rs
index e8c3d306f56..b27b8395470 100644
--- a/src/test/bench/shootout-pfib.rs
+++ b/src/test/bench/shootout-pfib.rs
@@ -23,7 +23,6 @@ extern mod extra;
 
 use extra::{time, getopts};
 use std::comm::*;
-use std::int::range;
 use std::io::WriterUtil;
 use std::io;
 use std::os;
@@ -84,7 +83,7 @@ fn stress_task(id: int) {
 
 fn stress(num_tasks: int) {
     let mut results = ~[];
-    for range(0, num_tasks) |i| {
+    foreach i in range(0, num_tasks) {
         let mut builder = task::task();
         builder.future_result(|r| results.push(r));
         do builder.spawn {
@@ -117,8 +116,8 @@ fn main() {
 
         let out = io::stdout();
 
-        for range(1, max + 1) |n| {
-            for range(0, num_trials) |_i| {
+        foreach n in range(1, max + 1) {
+            foreach _ in range(0, num_trials) {
                 let start = time::precise_time_ns();
                 let fibn = fib(n);
                 let stop = time::precise_time_ns();
diff --git a/src/test/bench/std-smallintmap.rs b/src/test/bench/std-smallintmap.rs
index 7f2accb6f0e..47efd076ef2 100644
--- a/src/test/bench/std-smallintmap.rs
+++ b/src/test/bench/std-smallintmap.rs
@@ -19,13 +19,13 @@ use std::os;
 use std::uint;
 
 fn append_sequential(min: uint, max: uint, map: &mut SmallIntMap<uint>) {
-    for uint::range(min, max) |i| {
+    foreach i in range(min, max) {
         map.insert(i, i + 22u);
     }
 }
 
 fn check_sequential(min: uint, max: uint, map: &SmallIntMap<uint>) {
-    for uint::range(min, max) |i| {
+    foreach i in range(min, max) {
         assert_eq!(*map.get(&i), i + 22u);
     }
 }
@@ -45,7 +45,7 @@ fn main() {
     let mut checkf = 0.0;
     let mut appendf = 0.0;
 
-    for uint::range(0u, rep) |_r| {
+    foreach _ in range(0u, rep) {
         let mut map = SmallIntMap::new();
         let start = extra::time::precise_time_s();
         append_sequential(0u, max, &mut map);
diff --git a/src/test/bench/sudoku.rs b/src/test/bench/sudoku.rs
index f4ddc090c21..a14a63cd3a0 100644
--- a/src/test/bench/sudoku.rs
+++ b/src/test/bench/sudoku.rs
@@ -56,8 +56,8 @@ impl Sudoku {
     }
 
     pub fn equal(&self, other: &Sudoku) -> bool {
-        for u8::range(0u8, 9u8) |row| {
-            for u8::range(0u8, 9u8) |col| {
+        foreach row in range(0u8, 9u8) {
+            foreach col in range(0u8, 9u8) {
                 if self.grid[row][col] != other.grid[row][col] {
                     return false;
                 }
@@ -87,9 +87,9 @@ impl Sudoku {
     }
 
     pub fn write(&self, writer: @io::Writer) {
-        for u8::range(0u8, 9u8) |row| {
+        foreach row in range(0u8, 9u8) {
             writer.write_str(fmt!("%u", self.grid[row][0] as uint));
-            for u8::range(1u8, 9u8) |col| {
+            foreach col in range(1u8, 9u8) {
                 writer.write_str(fmt!(" %u", self.grid[row][col] as uint));
             }
             writer.write_char('\n');
@@ -99,8 +99,8 @@ impl Sudoku {
     // solve sudoku grid
     pub fn solve(&mut self) {
         let mut work: ~[(u8, u8)] = ~[]; /* queue of uncolored fields */
-        for u8::range(0u8, 9u8) |row| {
-            for u8::range(0u8, 9u8) |col| {
+        foreach row in range(0u8, 9u8) {
+            foreach col in range(0u8, 9u8) {
                 let color = self.grid[row][col];
                 if color == 0u8 {
                     work.push((row, col));
@@ -143,7 +143,7 @@ impl Sudoku {
 
     // find colors available in neighbourhood of (row, col)
     fn drop_colors(&mut self, avail: &mut Colors, row: u8, col: u8) {
-        for u8::range(0u8, 9u8) |idx| {
+        foreach idx in range(0u8, 9u8) {
             avail.remove(self.grid[idx][col]); /* check same column fields */
             avail.remove(self.grid[row][idx]); /* check same row fields */
         }
@@ -151,8 +151,10 @@ impl Sudoku {
         // check same block fields
         let row0 = (row / 3u8) * 3u8;
         let col0 = (col / 3u8) * 3u8;
-        for u8::range(row0, row0 + 3u8) |alt_row| {
-            for u8::range(col0, col0 + 3u8) |alt_col| { avail.remove(self.grid[alt_row][alt_col]); }
+        foreach alt_row in range(row0, row0 + 3u8) {
+            foreach alt_col in range(col0, col0 + 3u8) {
+                avail.remove(self.grid[alt_row][alt_col]);
+            }
         }
     }
 }
diff --git a/src/test/compile-fail/issue-2817-2.rs b/src/test/compile-fail/issue-2817-2.rs
deleted file mode 100644
index 166f7e048df..00000000000
--- a/src/test/compile-fail/issue-2817-2.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use std::uint;
-
-fn not_bool(f: &fn(int) -> ~str) -> bool {}
-
-fn main() {
-    for uint::range(0, 100000) |_i| { //~ ERROR A for-loop body must return (), but
-        false
-    };
-    for not_bool |_i| {
-    //~^ ERROR A `for` loop iterator should expect a closure that returns `bool`
-        ~"hi"
-    };
-    for uint::range(0, 100000) |_i| { //~ ERROR A for-loop body must return (), but
-        ~"hi"
-    };
-    for not_bool() |_i| {
-    //~^ ERROR A `for` loop iterator should expect a closure that returns `bool`
-    };
-}
diff --git a/src/test/compile-fail/issue-2817.rs b/src/test/compile-fail/issue-2817.rs
index 49516831904..384b2cc843b 100644
--- a/src/test/compile-fail/issue-2817.rs
+++ b/src/test/compile-fail/issue-2817.rs
@@ -17,11 +17,11 @@ fn to_str(u: uint) -> ~str { fail!(); }
 fn uuid_random() -> uint { fail!(); }
 
 fn main() {
-    do uint::range(0, 100000) |_i| { //~ ERROR Do-block body must return bool, but
+    do range(0u, 100000).advance |_i| { //~ ERROR Do-block body must return bool, but
     };
     // should get a more general message if the callback
     // doesn't return nil
-    do uint::range(0, 100000) |_i| { //~ ERROR mismatched types
+    do range(0u, 100000).advance |_i| { //~ ERROR mismatched types
         ~"str"
     };
 }
diff --git a/src/test/compile-fail/moves-based-on-type-move-out-of-closure-env-issue-1965.rs b/src/test/compile-fail/moves-based-on-type-move-out-of-closure-env-issue-1965.rs
index e25ba0f39f2..ac52f10ba70 100644
--- a/src/test/compile-fail/moves-based-on-type-move-out-of-closure-env-issue-1965.rs
+++ b/src/test/compile-fail/moves-based-on-type-move-out-of-closure-env-issue-1965.rs
@@ -14,7 +14,5 @@ fn test(_x: ~uint) {}
 
 fn main() {
     let i = ~3;
-    for uint::range(0, 10) |_x| {
-        test(i); //~ ERROR cannot move out
-    }
+    let _f = || test(i); //~ ERROR cannot move out
 }
diff --git a/src/test/compile-fail/private-method.rs b/src/test/compile-fail/private-method.rs
index 0c67980a551..1cde50cc15e 100644
--- a/src/test/compile-fail/private-method.rs
+++ b/src/test/compile-fail/private-method.rs
@@ -11,8 +11,6 @@
 // error-pattern:method `nap` is private
 
 mod kitties {
-    use std::uint;
-
     pub struct cat {
         priv meows : uint,
 
@@ -20,7 +18,7 @@ mod kitties {
     }
 
     impl cat {
-        priv fn nap(&self) { uint::range(1u, 10000u, |_i| false); }
+        priv fn nap(&self) {}
     }
 
     pub fn cat(in_x : uint, in_y : int) -> cat {
diff --git a/src/test/compile-fail/regions-addr-of-upvar-self.rs b/src/test/compile-fail/regions-addr-of-upvar-self.rs
index f1172690f4d..9cedf86f350 100644
--- a/src/test/compile-fail/regions-addr-of-upvar-self.rs
+++ b/src/test/compile-fail/regions-addr-of-upvar-self.rs
@@ -16,10 +16,10 @@ struct dog {
 
 impl dog {
     pub fn chase_cat(&mut self) {
-        for uint::range(0u, 10u) |_i| {
+        let _f = || {
             let p: &'static mut uint = &mut self.food; //~ ERROR cannot infer an appropriate lifetime due to conflicting requirements
             *p = 3u;
-        }
+        };
     }
 }
 
diff --git a/src/test/run-fail/for-each-loop-fail.rs b/src/test/run-fail/for-each-loop-fail.rs
index 97ca36cf448..5aa8273527a 100644
--- a/src/test/run-fail/for-each-loop-fail.rs
+++ b/src/test/run-fail/for-each-loop-fail.rs
@@ -11,6 +11,4 @@
 // error-pattern:moop
 extern mod extra;
 
-use std::uint;
-
-fn main() { for uint::range(0u, 10u) |_i| { fail!("moop"); } }
+fn main() { foreach _ in range(0u, 10u) { fail!("moop"); } }
diff --git a/src/test/run-fail/unwind-misc-1.rs b/src/test/run-fail/unwind-misc-1.rs
index bfcd2e8f8db..87791112edf 100644
--- a/src/test/run-fail/unwind-misc-1.rs
+++ b/src/test/run-fail/unwind-misc-1.rs
@@ -15,7 +15,7 @@ fn main() {
     let count = @mut 0u;
     let mut map = std::hashmap::HashMap::new();
     let mut arr = ~[];
-    for std::uint::range(0u, 10u) |i| {
+    foreach i in range(0u, 10u) {
         arr.push(@~"key stuff");
         map.insert(arr.clone(), arr + &[@~"value stuff"]);
         if arr.len() == 5 {
diff --git a/src/test/run-pass/borrowck-mut-uniq.rs b/src/test/run-pass/borrowck-mut-uniq.rs
index 1b43e98cc17..ecd3b0aa529 100644
--- a/src/test/run-pass/borrowck-mut-uniq.rs
+++ b/src/test/run-pass/borrowck-mut-uniq.rs
@@ -23,7 +23,7 @@ fn add_int(x: &mut Ints, v: int) {
 
 fn iter_ints(x: &Ints, f: &fn(x: &int) -> bool) -> bool {
     let l = x.values.len();
-    uint::range(0, l, |i| f(&x.values[i]))
+    range(0u, l).advance(|i| f(&x.values[i]))
 }
 
 pub fn main() {
diff --git a/src/test/run-pass/class-cast-to-trait-multiple-types.rs b/src/test/run-pass/class-cast-to-trait-multiple-types.rs
index 97bcd7c5308..6bfe7a8d790 100644
--- a/src/test/run-pass/class-cast-to-trait-multiple-types.rs
+++ b/src/test/run-pass/class-cast-to-trait-multiple-types.rs
@@ -83,7 +83,7 @@ fn cat(in_x : uint, in_y : int, in_name: ~str) -> cat {
 
 
 fn annoy_neighbors(critter: @noisy) {
-  for uint::range(0u, 10u) |i| { critter.speak(); }
+    foreach i in range(0u, 10) { critter.speak(); }
 }
 
 pub fn main() {
diff --git a/src/test/run-pass/class-impl-parameterized-trait.rs b/src/test/run-pass/class-impl-parameterized-trait.rs
index 31a30068978..8f5fcaba4fb 100644
--- a/src/test/run-pass/class-impl-parameterized-trait.rs
+++ b/src/test/run-pass/class-impl-parameterized-trait.rs
@@ -75,7 +75,7 @@ class cat : map<int, bool> {
 
 pub fn main() {
   let nyan : cat = cat(0, 2, "nyan");
-  for uint::range(1u, 5u) |_i| { nyan.speak(); }
+  foreach _ in range(1u, 5u) { nyan.speak(); }
   // cat returns true if uint input is greater than
   // the number of meows so far
   assert!((nyan.get(1)));
diff --git a/src/test/run-pass/class-impl-very-parameterized-trait.rs b/src/test/run-pass/class-impl-very-parameterized-trait.rs
index a1ea1d6e3e2..921b35b7437 100644
--- a/src/test/run-pass/class-impl-very-parameterized-trait.rs
+++ b/src/test/run-pass/class-impl-very-parameterized-trait.rs
@@ -117,11 +117,11 @@ impl<T> cat<T> {
 
 pub fn main() {
     let mut nyan: cat<~str> = cat::new(0, 2, ~"nyan");
-    for uint::range(1, 5) |_| { nyan.speak(); }
+    foreach _ in range(1u, 5) { nyan.speak(); }
     assert!(*nyan.find(&1).unwrap() == ~"nyan");
     assert_eq!(nyan.find(&10), None);
     let mut spotty: cat<cat_type> = cat::new(2, 57, tuxedo);
-    for uint::range(0, 6) |_| { spotty.speak(); }
+    foreach _ in range(0u, 6) { spotty.speak(); }
     assert_eq!(spotty.len(), 8);
     assert!((spotty.contains_key(&2)));
     assert_eq!(spotty.get(&3), &tuxedo);
diff --git a/src/test/run-pass/class-implement-trait-cross-crate.rs b/src/test/run-pass/class-implement-trait-cross-crate.rs
index 70020b39510..a5cc005b538 100644
--- a/src/test/run-pass/class-implement-trait-cross-crate.rs
+++ b/src/test/run-pass/class-implement-trait-cross-crate.rs
@@ -63,6 +63,6 @@ pub fn main() {
   let mut nyan = cat(0u, 2, ~"nyan");
   nyan.eat();
   assert!((!nyan.eat()));
-  for uint::range(1u, 10u) |_i| { nyan.speak(); };
+  foreach _ in range(1u, 10u) { nyan.speak(); };
   assert!((nyan.eat()));
 }
diff --git a/src/test/run-pass/class-implement-traits.rs b/src/test/run-pass/class-implement-traits.rs
index 59de9e9e76e..05084ec9802 100644
--- a/src/test/run-pass/class-implement-traits.rs
+++ b/src/test/run-pass/class-implement-traits.rs
@@ -13,7 +13,7 @@
 use std::uint;
 
 trait noisy {
-  fn speak(&mut self);
+    fn speak(&mut self);
 }
 
 #[deriving(Clone)]
@@ -48,7 +48,7 @@ impl cat {
 }
 
 impl noisy for cat {
-  fn speak(&mut self) { self.meow(); }
+    fn speak(&mut self) { self.meow(); }
 }
 
 fn cat(in_x : uint, in_y : int, in_name: ~str) -> cat {
@@ -65,10 +65,10 @@ fn make_speak<C:noisy>(mut c: C) {
 }
 
 pub fn main() {
-  let mut nyan = cat(0u, 2, ~"nyan");
-  nyan.eat();
-  assert!((!nyan.eat()));
-  for uint::range(1u, 10u) |_i| {
-    make_speak(nyan.clone());
-  }
+    let mut nyan = cat(0u, 2, ~"nyan");
+    nyan.eat();
+    assert!((!nyan.eat()));
+    foreach _ in range(1u, 10u) {
+        make_speak(nyan.clone());
+    }
 }
diff --git a/src/test/run-pass/class-implements-multiple-traits.rs b/src/test/run-pass/class-implements-multiple-traits.rs
index f7f1039d1b7..d33f2c26c92 100644
--- a/src/test/run-pass/class-implements-multiple-traits.rs
+++ b/src/test/run-pass/class-implements-multiple-traits.rs
@@ -95,7 +95,7 @@ class cat : noisy, scratchy, bitey {
 }
 
 fn annoy_neighbors<T:noisy>(critter: T) {
-  for uint::range(0u, 10u) |i| {
+  foreach i in range(0u, 10u) {
       let what = critter.speak();
       info!("%u %d", i, what);
   }
diff --git a/src/test/run-pass/classes-cross-crate.rs b/src/test/run-pass/classes-cross-crate.rs
index 0af433bd655..d14bcac5a24 100644
--- a/src/test/run-pass/classes-cross-crate.rs
+++ b/src/test/run-pass/classes-cross-crate.rs
@@ -19,6 +19,6 @@ pub fn main() {
     let mut nyan = cat(0u, 2, ~"nyan");
     nyan.eat();
     assert!((!nyan.eat()));
-    for uint::range(1u, 10u) |_i| { nyan.speak(); };
+    foreach _ in range(1u, 10u) { nyan.speak(); };
     assert!((nyan.eat()));
 }
diff --git a/src/test/run-pass/classes.rs b/src/test/run-pass/classes.rs
index 89d89d116a3..3200b476a72 100644
--- a/src/test/run-pass/classes.rs
+++ b/src/test/run-pass/classes.rs
@@ -8,8 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use std::uint;
-
 struct cat {
     priv meows : uint,
 
@@ -54,6 +52,6 @@ pub fn main() {
   let mut nyan = cat(0u, 2, ~"nyan");
   nyan.eat();
   assert!((!nyan.eat()));
-  for uint::range(1u, 10u) |_i| { nyan.speak(); };
+  foreach _ in range(1u, 10u) { nyan.speak(); };
   assert!((nyan.eat()));
 }
diff --git a/src/test/run-pass/issue-2989.rs b/src/test/run-pass/issue-2989.rs
index d4cbfa91fb6..c46641ffbd6 100644
--- a/src/test/run-pass/issue-2989.rs
+++ b/src/test/run-pass/issue-2989.rs
@@ -11,7 +11,6 @@
 extern mod extra;
 
 use std::io;
-use std::uint;
 use std::vec;
 
 trait methods {
@@ -41,7 +40,7 @@ pub fn main() {
     let bools = ~[false, false, true, false, false, true, true, false];
     let bools2 = to_bools(Storage{storage: ~[0b01100100]});
 
-    for uint::range(0, 8) |i| {
+    foreach i in range(0u, 8) {
         printfln!("%u => %u vs %u", i, bools[i] as uint, bools2[i] as uint);
     }
 
diff --git a/src/test/run-pass/issue-3563-3.rs b/src/test/run-pass/issue-3563-3.rs
index 5d8405ce433..2819a0471e9 100644
--- a/src/test/run-pass/issue-3563-3.rs
+++ b/src/test/run-pass/issue-3563-3.rs
@@ -134,13 +134,13 @@ impl Canvas for AsciiArt {
 
     fn add_rect(&mut self, shape: Rect) {
         // Add the top and bottom lines.
-        for int::range(shape.top_left.x, shape.top_left.x + shape.size.width) |x| {
+        foreach x in range(shape.top_left.x, shape.top_left.x + shape.size.width) {
             self.add_pt(x, shape.top_left.y);
             self.add_pt(x, shape.top_left.y + shape.size.height - 1);
         }
 
         // Add the left and right lines.
-        for int::range(shape.top_left.y, shape.top_left.y + shape.size.height) |y|{
+        foreach y in range(shape.top_left.y, shape.top_left.y + shape.size.height) {
             self.add_pt(shape.top_left.x, y);
             self.add_pt(shape.top_left.x + shape.size.width - 1, y);
         }
diff --git a/src/test/run-pass/issue-3609.rs b/src/test/run-pass/issue-3609.rs
index ab62d9c4142..65d23e7916d 100644
--- a/src/test/run-pass/issue-3609.rs
+++ b/src/test/run-pass/issue-3609.rs
@@ -2,7 +2,6 @@ extern mod extra;
 
 use std::comm::Chan;
 use std::task;
-use std::uint;
 
 type RingBuffer = ~[float];
 type SamplesFn = ~fn(samples: &RingBuffer);
@@ -18,8 +17,9 @@ fn foo(name: ~str, samples_chan: Chan<Msg>) {
         let callback: SamplesFn =
             |buffer|
             {
-                for uint::range(0, buffer.len())
-                    |i| {error!("%?: %f", i, buffer[i])}
+                foreach i in range(0u, buffer.len()) {
+                    error!("%?: %f", i, buffer[i])
+                }
             };
         samples_chan.send(GetSamples(name.clone(), callback));
     };
diff --git a/src/test/run-pass/iter-range.rs b/src/test/run-pass/iter-range.rs
index 51499e85590..edb91a11cfc 100644
--- a/src/test/run-pass/iter-range.rs
+++ b/src/test/run-pass/iter-range.rs
@@ -10,7 +10,7 @@
 
 
 
-fn range(a: int, b: int, it: &fn(int)) {
+fn range_(a: int, b: int, it: &fn(int)) {
     assert!((a < b));
     let mut i: int = a;
     while i < b { it(i); i += 1; }
@@ -18,6 +18,6 @@ fn range(a: int, b: int, it: &fn(int)) {
 
 pub fn main() {
     let mut sum: int = 0;
-    range(0, 100, |x| sum += x );
+    range_(0, 100, |x| sum += x );
     info!(sum);
 }
diff --git a/src/test/run-pass/lots-a-fail.rs b/src/test/run-pass/lots-a-fail.rs
index 04486a83455..9f79ca2f936 100644
--- a/src/test/run-pass/lots-a-fail.rs
+++ b/src/test/run-pass/lots-a-fail.rs
@@ -12,7 +12,6 @@
 extern mod extra;
 
 use std::task;
-use std::uint;
 
 fn die() {
     fail!();
@@ -23,7 +22,7 @@ fn iloop() {
 }
 
 pub fn main() {
-    for uint::range(0u, 100u) |_i| {
+    foreach _ in range(0u, 100u) {
         task::spawn_unlinked(|| iloop() );
     }
 }
diff --git a/src/test/run-pass/move-3-unique.rs b/src/test/run-pass/move-3-unique.rs
index 377fae52f49..827c43cbcae 100644
--- a/src/test/run-pass/move-3-unique.rs
+++ b/src/test/run-pass/move-3-unique.rs
@@ -10,8 +10,6 @@
 
 extern mod extra;
 
-use std::uint;
-
 #[deriving(Clone)]
 struct Triple {
     x: int,
@@ -28,7 +26,7 @@ fn test(x: bool, foo: ~Triple) -> int {
 
 pub fn main() {
     let x = ~Triple{x: 1, y: 2, z: 3};
-    for uint::range(0u, 10000u) |_i| {
+    foreach _ in range(0u, 10000u) {
         assert_eq!(test(true, x.clone()), 2);
     }
     assert_eq!(test(false, x), 5);
diff --git a/src/test/run-pass/move-3.rs b/src/test/run-pass/move-3.rs
index a52f34c54db..a33098ad723 100644
--- a/src/test/run-pass/move-3.rs
+++ b/src/test/run-pass/move-3.rs
@@ -10,8 +10,6 @@
 
 extern mod extra;
 
-use std::uint;
-
 struct Triple { x: int, y: int, z: int }
 
 fn test(x: bool, foo: @Triple) -> int {
@@ -23,7 +21,7 @@ fn test(x: bool, foo: @Triple) -> int {
 
 pub fn main() {
     let x = @Triple{x: 1, y: 2, z: 3};
-    for uint::range(0u, 10000u) |i| {
+    foreach i in range(0u, 10000u) {
         assert_eq!(test(true, x), 2);
     }
     assert_eq!(test(false, x), 5);
diff --git a/src/test/run-pass/num-range-rev.rs b/src/test/run-pass/num-range-rev.rs
index e40a183243e..869888c7dbc 100644
--- a/src/test/run-pass/num-range-rev.rs
+++ b/src/test/run-pass/num-range-rev.rs
@@ -12,11 +12,11 @@ use std::int;
 use std::uint;
 
 fn uint_range(lo: uint, hi: uint, it: &fn(uint) -> bool) -> bool {
-    uint::range(lo, hi, it)
+    range(lo, hi).advance(it)
 }
 
 fn int_range(lo: int,  hi: int, it: &fn(int) -> bool) -> bool {
-    int::range(lo, hi, it)
+    range(lo, hi).advance(it)
 }
 
 fn uint_range_rev(hi: uint, lo: uint, it: &fn(uint) -> bool) -> bool {
diff --git a/src/test/run-pass/num-range.rs b/src/test/run-pass/num-range.rs
index d01b2240446..3960f489c6a 100644
--- a/src/test/run-pass/num-range.rs
+++ b/src/test/run-pass/num-range.rs
@@ -12,11 +12,11 @@ use std::int;
 use std::uint;
 
 fn uint_range(lo: uint, hi: uint, it: &fn(uint) -> bool) -> bool {
-    uint::range(lo, hi, it)
+    range(lo, hi).advance(it)
 }
 
 fn int_range(lo: int, hi: int, it: &fn(int) -> bool) -> bool {
-    int::range(lo, hi, it)
+    range(lo, hi).advance(it)
 }
 
 fn int_range_step(a: int, b: int, step: int, it: &fn(int) -> bool) -> bool {
diff --git a/src/test/run-pass/owned-trait-objects.rs b/src/test/run-pass/owned-trait-objects.rs
index 50b6666a20b..dd570f85244 100644
--- a/src/test/run-pass/owned-trait-objects.rs
+++ b/src/test/run-pass/owned-trait-objects.rs
@@ -8,8 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use std::uint::{range};
-
 trait FooTrait {
     fn foo(&self) -> uint;
 }
@@ -31,7 +29,7 @@ pub fn main() {
         ~BarStruct{ x: 2 } as ~FooTrait
     ];
 
-    for range(0, foos.len()) |i| {
+    foreach i in range(0u, foos.len()) {
         assert_eq!(i, foos[i].foo());
     }
 }
diff --git a/src/test/run-pass/packed-struct-vec.rs b/src/test/run-pass/packed-struct-vec.rs
index 0f84adcc941..844a7c732a3 100644
--- a/src/test/run-pass/packed-struct-vec.rs
+++ b/src/test/run-pass/packed-struct-vec.rs
@@ -9,7 +9,6 @@
 // except according to those terms.
 
 use std::sys;
-use std::uint;
 
 #[packed]
 #[deriving(Eq)]
@@ -23,7 +22,7 @@ fn main() {
 
     assert_eq!(sys::size_of::<[Foo, .. 10]>(), 90);
 
-    for uint::range(0, 10) |i| {
+    foreach i in range(0u, 10) {
         assert_eq!(foos[i], Foo { bar: 1, baz: 2});
     }
 
diff --git a/src/test/run-pass/pattern-bound-var-in-for-each.rs b/src/test/run-pass/pattern-bound-var-in-for-each.rs
index 5a0f9ed6eb4..2bdb381ee2c 100644
--- a/src/test/run-pass/pattern-bound-var-in-for-each.rs
+++ b/src/test/run-pass/pattern-bound-var-in-for-each.rs
@@ -12,13 +12,11 @@
 // pattern-bound var is an upvar (when translating
 // the for-each body)
 
-use std::uint;
-
 fn foo(src: uint) {
 
     match Some(src) {
       Some(src_id) => {
-        for uint::range(0u, 10u) |i| {
+        foreach i in range(0u, 10u) {
             let yyy = src_id;
             assert_eq!(yyy, 0u);
         }
diff --git a/src/test/run-pass/private-method.rs b/src/test/run-pass/private-method.rs
index de07cc7c4d0..c218b6ba013 100644
--- a/src/test/run-pass/private-method.rs
+++ b/src/test/run-pass/private-method.rs
@@ -8,8 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use std::uint;
-
 struct cat {
     priv meows : uint,
 
@@ -24,7 +22,7 @@ impl cat {
 }
 
 impl cat {
-    fn nap(&mut self) { for uint::range(1u, 10u) |_i| { }}
+    fn nap(&mut self) { foreach _ in range(1u, 10u) { } }
 }
 
 fn cat(in_x : uint, in_y : int) -> cat {
diff --git a/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs b/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs
index 702b64881ab..a727c28fe83 100644
--- a/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs
+++ b/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs
@@ -8,13 +8,12 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use std::uint;
 use std::util;
 
 pub fn main() {
     let mut x = 4;
 
-    for uint::range(0, 3) |i| {
+    foreach i in range(0u, 3) {
         // ensure that the borrow in this alt
         // does not inferfere with the swap
         // below.  note that it would it you
diff --git a/src/test/run-pass/send-iloop.rs b/src/test/run-pass/send-iloop.rs
index 4977082e7ed..65c5ca0aee7 100644
--- a/src/test/run-pass/send-iloop.rs
+++ b/src/test/run-pass/send-iloop.rs
@@ -13,7 +13,6 @@ extern mod extra;
 
 use std::comm;
 use std::task;
-use std::uint;
 
 fn die() {
     fail!();
@@ -34,7 +33,7 @@ fn iloop() {
 }
 
 pub fn main() {
-    for uint::range(0u, 16u) |_i| {
+    foreach _ in range(0u, 16u) {
         task::spawn_unlinked(|| iloop() );
     }
 }
diff --git a/src/test/run-pass/stat.rs b/src/test/run-pass/stat.rs
index d07da255c5d..babf5a2fa90 100644
--- a/src/test/run-pass/stat.rs
+++ b/src/test/run-pass/stat.rs
@@ -26,7 +26,7 @@ pub fn main() {
         match io::file_writer(&path, [io::Create, io::Truncate]) {
             Err(ref e) => fail!(e.clone()),
             Ok(f) => {
-                for uint::range(0, 1000) |_i| {
+                foreach _ in range(0u, 1000) {
                     f.write_u8(0);
                 }
             }
diff --git a/src/test/run-pass/trait-generic.rs b/src/test/run-pass/trait-generic.rs
index d6218a6ad8e..24e2b95a5df 100644
--- a/src/test/run-pass/trait-generic.rs
+++ b/src/test/run-pass/trait-generic.rs
@@ -31,8 +31,8 @@ trait map<T> {
 impl<T> map<T> for ~[T] {
     fn map<U>(&self, f: &fn(&T) -> U) -> ~[U] {
         let mut r = ~[];
-        // FIXME: #7355 generates bad code with Iterator
-        for std::uint::range(0, self.len()) |i| {
+        // FIXME: #7355 generates bad code with VecIterator
+        foreach i in range(0u, self.len()) {
             r.push(f(&self[i]));
         }
         r
diff --git a/src/test/run-pass/type-params-in-for-each.rs b/src/test/run-pass/type-params-in-for-each.rs
index d600ff25f02..a0cecb31427 100644
--- a/src/test/run-pass/type-params-in-for-each.rs
+++ b/src/test/run-pass/type-params-in-for-each.rs
@@ -13,13 +13,13 @@ struct S<T> {
     b: uint,
 }
 
-fn range(lo: uint, hi: uint, it: &fn(uint)) {
+fn range_(lo: uint, hi: uint, it: &fn(uint)) {
     let mut lo_ = lo;
     while lo_ < hi { it(lo_); lo_ += 1u; }
 }
 
 fn create_index<T>(index: ~[S<T>], hash_fn: extern fn(T) -> uint) {
-    range(0u, 256u, |_i| { let bucket: ~[T] = ~[]; } )
+    range_(0u, 256u, |_i| { let bucket: ~[T] = ~[]; } )
 }
 
 pub fn main() { }
diff --git a/src/test/run-pass/unique-send-2.rs b/src/test/run-pass/unique-send-2.rs
index a6bed9e2398..60d28d832df 100644
--- a/src/test/run-pass/unique-send-2.rs
+++ b/src/test/run-pass/unique-send-2.rs
@@ -10,7 +10,6 @@
 
 use std::comm::*;
 use std::task;
-use std::uint;
 
 fn child(c: &SharedChan<~uint>, i: uint) {
     c.send(~i);
@@ -21,14 +20,14 @@ pub fn main() {
     let ch = SharedChan::new(ch);
     let n = 100u;
     let mut expected = 0u;
-    for uint::range(0u, n) |i| {
+    foreach i in range(0u, n) {
         let ch = ch.clone();
         task::spawn(|| child(&ch, i) );
         expected += i;
     }
 
     let mut actual = 0u;
-    for uint::range(0u, n) |_i| {
+    foreach _ in range(0u, n) {
         let j = p.recv();
         actual += *j;
     }