]> git.lizzy.rs Git - rust.git/commitdiff
Merge remote-tracking branch 'remotes/origin/master' into str-remove-null
authorErick Tryzelaar <erick.tryzelaar@gmail.com>
Sun, 4 Aug 2013 23:23:41 +0000 (16:23 -0700)
committerErick Tryzelaar <erick.tryzelaar@gmail.com>
Sun, 4 Aug 2013 23:23:41 +0000 (16:23 -0700)
323 files changed:
.gitmodules
doc/po/rust.md.pot
doc/po/tutorial-container.md.pot
doc/po/tutorial-tasks.md.pot
doc/po/tutorial.md.pot
doc/rust.md
doc/tutorial-tasks.md
mk/llvm.mk
src/compiletest/compiletest.rs
src/compiletest/procsrv.rs
src/compiletest/runtest.rs
src/etc/check-links.pl
src/etc/emacs/rust-mode.el
src/etc/vim/syntax/rust.vim
src/etc/x86.supp
src/libextra/arc.rs
src/libextra/arena.rs
src/libextra/base64.rs
src/libextra/bitv.rs
src/libextra/container.rs
src/libextra/crypto/digest.rs
src/libextra/crypto/sha1.rs
src/libextra/crypto/sha2.rs
src/libextra/dlist.rs
src/libextra/fileinput.rs
src/libextra/flatpipes.rs
src/libextra/getopts.rs
src/libextra/iter.rs
src/libextra/json.rs
src/libextra/num/bigint.rs
src/libextra/num/complex.rs
src/libextra/num/rational.rs
src/libextra/priority_queue.rs
src/libextra/ringbuf.rs
src/libextra/serialize.rs
src/libextra/smallintmap.rs
src/libextra/sort.rs
src/libextra/stats.rs
src/libextra/sync.rs
src/libextra/task_pool.rs
src/libextra/tempfile.rs
src/libextra/terminfo/parm.rs
src/libextra/terminfo/parser/compiled.rs
src/libextra/terminfo/searcher.rs
src/libextra/test.rs
src/libextra/time.rs
src/libextra/treemap.rs
src/libextra/url.rs
src/libextra/workcache.rs
src/librust/rust.rs
src/librustc/back/link.rs
src/librustc/back/passes.rs
src/librustc/back/rpath.rs
src/librustc/driver/driver.rs
src/librustc/front/test.rs
src/librustc/lib/llvm.rs
src/librustc/metadata/creader.rs
src/librustc/metadata/cstore.rs
src/librustc/metadata/decoder.rs
src/librustc/metadata/encoder.rs
src/librustc/metadata/filesearch.rs
src/librustc/metadata/loader.rs
src/librustc/metadata/tyencode.rs
src/librustc/middle/astencode.rs
src/librustc/middle/borrowck/check_loans.rs
src/librustc/middle/borrowck/gather_loans/gather_moves.rs
src/librustc/middle/borrowck/gather_loans/mod.rs
src/librustc/middle/borrowck/gather_loans/restrictions.rs
src/librustc/middle/borrowck/mod.rs
src/librustc/middle/borrowck/move_data.rs
src/librustc/middle/cfg/construct.rs
src/librustc/middle/check_const.rs
src/librustc/middle/check_loop.rs
src/librustc/middle/check_match.rs
src/librustc/middle/const_eval.rs
src/librustc/middle/dataflow.rs
src/librustc/middle/entry.rs
src/librustc/middle/graph.rs
src/librustc/middle/kind.rs
src/librustc/middle/lang_items.rs
src/librustc/middle/lint.rs
src/librustc/middle/liveness.rs
src/librustc/middle/mem_categorization.rs
src/librustc/middle/moves.rs
src/librustc/middle/privacy.rs
src/librustc/middle/reachable.rs
src/librustc/middle/region.rs
src/librustc/middle/resolve.rs
src/librustc/middle/trans/_match.rs
src/librustc/middle/trans/adt.rs
src/librustc/middle/trans/asm.rs
src/librustc/middle/trans/base.rs
src/librustc/middle/trans/builder.rs
src/librustc/middle/trans/cabi.rs
src/librustc/middle/trans/cabi_arm.rs
src/librustc/middle/trans/cabi_mips.rs
src/librustc/middle/trans/cabi_x86_64.rs
src/librustc/middle/trans/callee.rs
src/librustc/middle/trans/closure.rs
src/librustc/middle/trans/common.rs
src/librustc/middle/trans/controlflow.rs
src/librustc/middle/trans/expr.rs
src/librustc/middle/trans/foreign.rs
src/librustc/middle/trans/glue.rs
src/librustc/middle/trans/inline.rs
src/librustc/middle/trans/meth.rs
src/librustc/middle/trans/monomorphize.rs
src/librustc/middle/trans/reflect.rs
src/librustc/middle/trans/tvec.rs
src/librustc/middle/trans/type_use.rs
src/librustc/middle/ty.rs
src/librustc/middle/typeck/astconv.rs
src/librustc/middle/typeck/check/_match.rs
src/librustc/middle/typeck/check/method.rs
src/librustc/middle/typeck/check/mod.rs
src/librustc/middle/typeck/check/regionck.rs
src/librustc/middle/typeck/check/regionmanip.rs
src/librustc/middle/typeck/check/vtable.rs
src/librustc/middle/typeck/check/writeback.rs
src/librustc/middle/typeck/coherence.rs
src/librustc/middle/typeck/collect.rs
src/librustc/middle/typeck/infer/error_reporting.rs
src/librustc/middle/typeck/infer/glb.rs
src/librustc/middle/typeck/infer/mod.rs
src/librustc/middle/typeck/infer/region_inference/mod.rs
src/librustc/middle/typeck/infer/sub.rs
src/librustc/middle/typeck/infer/test.rs
src/librustc/middle/typeck/rscope.rs
src/librustc/rustc.rs
src/librustc/util/common.rs
src/librustc/util/ppaux.rs
src/librustdoc/config.rs
src/librustdoc/extract.rs
src/librustdoc/markdown_pass.rs
src/librustdoc/sectionalize_pass.rs
src/librusti/program.rs
src/librusti/rusti.rs
src/librustpkg/installed_packages.rs
src/librustpkg/package_source.rs
src/librustpkg/path_util.rs
src/librustpkg/rustpkg.rs
src/librustpkg/tests.rs
src/librustpkg/util.rs
src/librustpkg/version.rs
src/librustpkg/workspace.rs
src/libstd/at_vec.rs
src/libstd/cmp.rs
src/libstd/container.rs
src/libstd/either.rs
src/libstd/hash.rs
src/libstd/hashmap.rs
src/libstd/io.rs
src/libstd/iterator.rs
src/libstd/option.rs
src/libstd/os.rs
src/libstd/path.rs
src/libstd/pipes.rs
src/libstd/ptr.rs
src/libstd/rand.rs
src/libstd/repr.rs
src/libstd/result.rs
src/libstd/rt/args.rs
src/libstd/rt/borrowck.rs
src/libstd/rt/io/net/ip.rs
src/libstd/rt/io/net/tcp.rs
src/libstd/rt/io/net/udp.rs
src/libstd/rt/mod.rs
src/libstd/rt/rtio.rs
src/libstd/rt/sched.rs
src/libstd/rt/select.rs
src/libstd/rt/task.rs
src/libstd/rt/test.rs
src/libstd/rt/tube.rs
src/libstd/rt/uv/mod.rs
src/libstd/rt/uv/net.rs
src/libstd/rt/uv/uvio.rs
src/libstd/run.rs
src/libstd/str.rs
src/libstd/str/ascii.rs
src/libstd/task/local_data_priv.rs
src/libstd/task/spawn.rs
src/libstd/to_str.rs
src/libstd/trie.rs
src/libstd/unstable/atomics.rs
src/libstd/unstable/extfmt.rs
src/libstd/unstable/intrinsics.rs
src/libstd/unstable/sync.rs
src/libstd/vec.rs
src/libsyntax/abi.rs
src/libsyntax/ast.rs
src/libsyntax/ast_map.rs
src/libsyntax/ast_util.rs
src/libsyntax/attr.rs
src/libsyntax/codemap.rs
src/libsyntax/diagnostic.rs
src/libsyntax/ext/bytes.rs
src/libsyntax/ext/concat_idents.rs
src/libsyntax/ext/deriving/decodable.rs
src/libsyntax/ext/deriving/encodable.rs
src/libsyntax/ext/deriving/generic.rs
src/libsyntax/ext/deriving/iter_bytes.rs
src/libsyntax/ext/deriving/to_str.rs
src/libsyntax/ext/expand.rs
src/libsyntax/ext/fmt.rs
src/libsyntax/ext/quote.rs
src/libsyntax/ext/tt/macro_parser.rs
src/libsyntax/ext/tt/macro_rules.rs
src/libsyntax/fold.rs
src/libsyntax/oldvisit.rs
src/libsyntax/parse/comments.rs
src/libsyntax/parse/lexer.rs
src/libsyntax/parse/parser.rs
src/libsyntax/parse/token.rs
src/libsyntax/print/pprust.rs
src/libsyntax/util/interner.rs
src/libsyntax/visit.rs
src/llvm
src/rt/rust_task.cpp
src/rustllvm/RustWrapper.cpp
src/rustllvm/llvm-auto-clean-trigger
src/rustllvm/rustllvm.h
src/snapshots.txt
src/test/auxiliary/cci_nested_lib.rs
src/test/bench/core-map.rs
src/test/bench/core-set.rs
src/test/bench/core-std.rs
src/test/bench/core-uint-to-str.rs
src/test/bench/graph500-bfs.rs
src/test/bench/msgsend-pipes-shared.rs
src/test/bench/msgsend-pipes.rs
src/test/bench/msgsend-ring-mutex-arcs.rs
src/test/bench/msgsend-ring-rw-arcs.rs
src/test/bench/noise.rs
src/test/bench/shootout-chameneos-redux.rs
src/test/bench/shootout-fannkuch-redux.rs
src/test/bench/shootout-fasta-redux.rs
src/test/bench/shootout-fasta.rs
src/test/bench/shootout-k-nucleotide-pipes.rs
src/test/bench/shootout-k-nucleotide.rs
src/test/bench/shootout-mandelbrot.rs
src/test/bench/shootout-nbody.rs
src/test/bench/shootout-pfib.rs
src/test/bench/shootout-spectralnorm.rs
src/test/bench/std-smallintmap.rs
src/test/bench/sudoku.rs
src/test/compile-fail/borrowck-insert-during-each.rs
src/test/compile-fail/borrowck-mut-boxed-vec.rs
src/test/compile-fail/issue-2149.rs
src/test/compile-fail/issue-2150.rs
src/test/compile-fail/issue-5100.rs
src/test/compile-fail/vec-mut-iter-borrow.rs
src/test/pretty/block-comment-wchar.pp
src/test/pretty/block-comment-wchar.rs
src/test/pretty/for-comment.rs
src/test/run-fail/for-each-loop-fail.rs
src/test/run-fail/unwind-misc-1.rs
src/test/run-pass/auto-loop.rs
src/test/run-pass/block-arg.rs
src/test/run-pass/block-iter-1.rs
src/test/run-pass/block-iter-2.rs
src/test/run-pass/borrowck-borrow-from-at-vec.rs
src/test/run-pass/borrowck-mut-vec-as-imm-slice.rs
src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs
src/test/run-pass/break.rs
src/test/run-pass/class-cast-to-trait-multiple-types.rs
src/test/run-pass/class-impl-parameterized-trait.rs
src/test/run-pass/class-impl-very-parameterized-trait.rs
src/test/run-pass/class-implement-trait-cross-crate.rs
src/test/run-pass/class-implement-traits.rs
src/test/run-pass/class-implements-multiple-traits.rs
src/test/run-pass/classes-cross-crate.rs
src/test/run-pass/classes.rs
src/test/run-pass/coerce-reborrow-imm-vec-arg.rs
src/test/run-pass/const-vec-of-fns.rs
src/test/run-pass/deriving-cmp-generic-enum.rs
src/test/run-pass/deriving-cmp-generic-struct.rs
src/test/run-pass/deriving-cmp-generic-tuple-struct.rs
src/test/run-pass/explicit-self-closures.rs
src/test/run-pass/fn-pattern-expected-type-2.rs
src/test/run-pass/for-loop-fail.rs
src/test/run-pass/foreach-external-iterators-break.rs
src/test/run-pass/foreach-external-iterators-hashmap-break-restart.rs
src/test/run-pass/foreach-external-iterators-hashmap.rs
src/test/run-pass/foreach-external-iterators-loop.rs
src/test/run-pass/foreach-external-iterators-nested.rs
src/test/run-pass/foreach-external-iterators.rs
src/test/run-pass/generic-static-methods.rs
src/test/run-pass/hashmap-memory.rs
src/test/run-pass/issue-2904.rs
src/test/run-pass/issue-2989.rs
src/test/run-pass/issue-3389.rs
src/test/run-pass/issue-3563-2.rs
src/test/run-pass/issue-3563-3.rs
src/test/run-pass/issue-3609.rs
src/test/run-pass/issue-4241.rs
src/test/run-pass/issue-4542.rs
src/test/run-pass/linear-for-loop.rs
src/test/run-pass/loop-scope.rs
src/test/run-pass/lots-a-fail.rs
src/test/run-pass/monad.rs
src/test/run-pass/morestack6.rs
src/test/run-pass/move-3-unique.rs
src/test/run-pass/move-3.rs
src/test/run-pass/mutability-inherits-through-fixed-length-vec.rs
src/test/run-pass/overload-index-operator.rs
src/test/run-pass/owned-trait-objects.rs
src/test/run-pass/packed-struct-vec.rs
src/test/run-pass/pattern-bound-var-in-for-each.rs
src/test/run-pass/private-method.rs
src/test/run-pass/reflect-visit-data.rs
src/test/run-pass/reflect-visit-type.rs
src/test/run-pass/regions-infer-borrow-scope-addr-of.rs
src/test/run-pass/send-iloop.rs
src/test/run-pass/shadow.rs
src/test/run-pass/stat.rs
src/test/run-pass/static-impl.rs
src/test/run-pass/task-comm-3.rs
src/test/run-pass/trait-bounds-in-arc.rs
src/test/run-pass/trait-generic.rs
src/test/run-pass/unfoldr-cross-crate.rs
src/test/run-pass/unique-send-2.rs
src/test/run-pass/unwind-resource.rs
src/test/run-pass/utf8.rs

index c84426161796d231876dd1f7bb27f15dbd6d8257..88ead6e608d5c4ee00212451f47c281d09d00846 100644 (file)
@@ -1,6 +1,6 @@
 [submodule "src/llvm"]
        path = src/llvm
-       url = https://github.com/brson/llvm.git
+       url = https://github.com/alexcrichton/llvm.git
        branch = master
 [submodule "src/libuv"]
        path = src/libuv
index ce68fb4179df977e4527d7e89e86cce9f178496e..20ebb88c72434b053427a7d71d447ba995a6cc7a 100644 (file)
@@ -1792,11 +1792,11 @@ msgstr ""
 msgid ""
 "~~~~ {.xfail-test}\n"
 "fn iter<T>(seq: &[T], f: &fn(T)) {\n"
-"    foreach elt in seq.iter() { f(elt); }\n"
+"    for elt in seq.iter() { f(elt); }\n"
 "}\n"
 "fn map<T, U>(seq: &[T], f: &fn(T) -> U) -> ~[U] {\n"
 "    let mut acc = ~[];\n"
-"    foreach elt in seq.iter() { acc.push(f(elt)); }\n"
+"    for elt in seq.iter() { acc.push(f(elt)); }\n"
 "    acc\n"
 "}\n"
 "~~~~\n"
@@ -4570,7 +4570,7 @@ msgstr ""
 #: doc/rust.md:2405
 #, no-wrap
 msgid ""
-"foreach e in v.iter() {\n"
+"for e in v.iter() {\n"
 "    bar(*e);\n"
 "}\n"
 "~~~~\n"
index 841e6a233935804363c05f39e35b97a945a35b35..3435a51dbeff15a5d93247a3a3161f58b11b0a65 100644 (file)
@@ -376,7 +376,7 @@ msgstr ""
 #, no-wrap
 msgid ""
 "// print out all the elements in the vector\n"
-"foreach x in xs.iter() {\n"
+"for x in xs.iter() {\n"
 "    println(x.to_str())\n"
 "}\n"
 msgstr ""
@@ -386,7 +386,7 @@ msgstr ""
 #, no-wrap
 msgid ""
 "// print out all but the first 3 elements in the vector\n"
-"foreach x in xs.iter().skip(3) {\n"
+"for x in xs.iter().skip(3) {\n"
 "    println(x.to_str())\n"
 "}\n"
 "~~~\n"
@@ -418,7 +418,7 @@ msgstr ""
 #, no-wrap
 msgid ""
 "// print out the pairs of elements up to (&3, &\"baz\")\n"
-"foreach (x, y) in it {\n"
+"for (x, y) in it {\n"
 "    println(fmt!(\"%d %s\", *x, *y));\n"
 msgstr ""
 
@@ -487,7 +487,7 @@ msgid ""
 "    pub fn from_iterator(iterator: &mut T) -> ~[A] {\n"
 "        let (lower, _) = iterator.size_hint();\n"
 "        let mut xs = with_capacity(lower);\n"
-"        foreach x in iterator {\n"
+"        for x in iterator {\n"
 "            xs.push(x);\n"
 "        }\n"
 "        xs\n"
@@ -587,7 +587,7 @@ msgstr ""
 #, no-wrap
 msgid ""
 "// prints `5`, `4` and `3`\n"
-"foreach &x in it.invert() {\n"
+"for &x in it.invert() {\n"
 "    println(fmt!(\"%?\", x))\n"
 "}\n"
 "~~~\n"
index fb7d60716bf6144a9cb57f7d8422c5fdee9a1d8e..ff1f25f83b32576f9c7f0621f872ec782e0bfa55 100644 (file)
@@ -587,7 +587,7 @@ msgstr ""
 #, no-wrap
 msgid ""
 "    let mut final_res = 0f64;\n"
-"    foreach ft in futures.mut_iter()  {\n"
+"    for ft in futures.mut_iter()  {\n"
 "        final_res += ft.get();\n"
 "    }\n"
 "    println(fmt!(\"^2/6 is not far from : %?\", final_res));\n"
index 2b24d688a96f6ffdcacebaecd9a96337bf8b8895..5d8a03343ae33ebcb4cb3a695557f3a2581cc533 100644 (file)
@@ -2501,7 +2501,7 @@ msgstr ""
 msgid ""
 "// Iterate over a vector, obtaining a pointer to each element\n"
 "// (`for` is explained in the next section)\n"
-"foreach crayon in crayons.iter() {\n"
+"for crayon in crayons.iter() {\n"
 "    let delicious_crayon_wax = unwrap_crayon(*crayon);\n"
 "    eat_crayon_wax(delicious_crayon_wax);\n"
 "}\n"
@@ -3101,7 +3101,7 @@ msgid ""
 "~~~~\n"
 "fn map<T, U>(vector: &[T], function: &fn(v: &T) -> U) -> ~[U] {\n"
 "    let mut accumulator = ~[];\n"
-"    foreach element in vector.iter() {\n"
+"    for element in vector.iter() {\n"
 "        accumulator.push(function(element));\n"
 "    }\n"
 "    return accumulator;\n"
@@ -3570,7 +3570,7 @@ msgid ""
 "~~~~\n"
 "# trait Printable { fn print(&self); }\n"
 "fn print_all<T: Printable>(printable_things: ~[T]) {\n"
-"    foreach thing in printable_things.iter() {\n"
+"    for thing in printable_things.iter() {\n"
 "        thing.print();\n"
 "    }\n"
 "}\n"
@@ -3650,7 +3650,7 @@ msgstr ""
 #, no-wrap
 msgid ""
 "fn draw_all<T: Drawable>(shapes: ~[T]) {\n"
-"    foreach shape in shapes.iter() { shape.draw(); }\n"
+"    for shape in shapes.iter() { shape.draw(); }\n"
 "}\n"
 "# let c: Circle = new_circle();\n"
 "# draw_all(~[c]);\n"
@@ -3673,7 +3673,7 @@ msgid ""
 "~~~~\n"
 "# trait Drawable { fn draw(&self); }\n"
 "fn draw_all(shapes: &[@Drawable]) {\n"
-"    foreach shape in shapes.iter() { shape.draw(); }\n"
+"    for shape in shapes.iter() { shape.draw(); }\n"
 "}\n"
 "~~~~\n"
 msgstr ""
index ea4d7ec3fe9ebb24b5b223778b9303348454f387..2f5c310ec8328adec207bd7b0b87f2106e14c780 100644 (file)
@@ -880,11 +880,11 @@ the function name.
 
 ~~~~ {.xfail-test}
 fn iter<T>(seq: &[T], f: &fn(T)) {
-    foreach elt in seq.iter() { f(elt); }
+    for elt in seq.iter() { f(elt); }
 }
 fn map<T, U>(seq: &[T], f: &fn(T) -> U) -> ~[U] {
     let mut acc = ~[];
-    foreach elt in seq.iter() { acc.push(f(elt)); }
+    for elt in seq.iter() { acc.push(f(elt)); }
     acc
 }
 ~~~~
@@ -2378,7 +2378,7 @@ An example of a for loop over the contents of a vector:
 
 let v: &[foo] = &[a, b, c];
 
-foreach e in v.iter() {
+for e in v.iter() {
     bar(*e);
 }
 ~~~~
@@ -2387,7 +2387,7 @@ An example of a for loop over a series of integers:
 
 ~~~~
 # fn bar(b:uint) { }
-foreach i in range(0u, 256) {
+for i in range(0u, 256) {
     bar(i);
 }
 ~~~~
index 4528f3f9e15b2972e0881ed1ca1defb4c4cd1c2c..b2ef624d1ac3e6b1c90cb17a3c9dbfecfafe7637 100644 (file)
@@ -121,7 +121,7 @@ should interleave the output in vaguely random order.
 # use std::io::print;
 # use std::task::spawn;
 
-foreach child_task_number in range(0, 20) {
+for child_task_number in range(0, 20) {
     do spawn {
        print(fmt!("I am child number %d\n", child_task_number));
     }
@@ -240,7 +240,7 @@ Instead we can use a `SharedChan`, a type that allows a single
 let (port, chan) = stream();
 let chan = SharedChan::new(chan);
 
-foreach init_val in range(0u, 3) {
+for 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,7 +314,7 @@ be distributed on the available cores.
 # use std::vec;
 fn partial_sum(start: uint) -> f64 {
     let mut local_sum = 0f64;
-    foreach num in range(start*100000, (start+1)*100000) {
+    for num in range(start*100000, (start+1)*100000) {
         local_sum += (num as f64 + 1.0).pow(&-2.0);
     }
     local_sum
@@ -324,7 +324,7 @@ fn main() {
     let mut futures = vec::from_fn(1000, |ind| do extra::future::spawn { partial_sum(ind) });
 
     let mut final_res = 0f64;
-    foreach ft in futures.mut_iter()  {
+    for ft in futures.mut_iter()  {
         final_res += ft.get();
     }
     println(fmt!("π^2/6 is not far from : %?", final_res));
@@ -359,7 +359,7 @@ fn main() {
 
     let numbers_arc = Arc::new(numbers);
 
-    foreach num in range(1u, 10) {
+    for num in range(1u, 10) {
         let (port, chan)  = stream();
         chan.send(numbers_arc.clone());
 
index 77b6b4d96f3628c195139c9e630ad1e7fb391874..12ccc55d4fae135020c85a0529f26f7046cefd54 100644 (file)
@@ -14,7 +14,9 @@ LLVM_DEPS := $(S)/.gitmodules
 else
 
 # This is just a rough approximation of LLVM deps
-LLVM_DEPS=$(call rwildcard,$(CFG_LLVM_SRC_DIR),*cpp *hpp)
+LLVM_DEPS_SRC=$(call rwildcard,$(CFG_LLVM_SRC_DIR)/lib,*cpp *hpp)
+LLVM_DEPS_INC=$(call rwildcard,$(CFG_LLVM_SRC_DIR)/include,*cpp *hpp)
+LLVM_DEPS=$(LLVM_DEPS_SRC) $(LLVM_DEPS_INC)
 endif
 
 define DEF_LLVM_RULES
index 4b9a48ed445365460af324d20d01764207b2dc36..b01de242590d0e9e580343d6c39d391c2055c271 100644 (file)
@@ -243,7 +243,7 @@ pub fn make_tests(config: &config) -> ~[test::TestDescAndFn] {
            config.src_base.to_str());
     let mut tests = ~[];
     let dirs = os::list_dir_path(&config.src_base);
-    foreach file in dirs.iter() {
+    for file in dirs.iter() {
         let file = file.clone();
         debug!("inspecting file %s", file.to_str());
         if is_test(config, &file) {
@@ -271,11 +271,11 @@ pub fn is_test(config: &config, testfile: &Path) -> bool {
 
     let mut valid = false;
 
-    foreach ext in valid_extensions.iter() {
+    for ext in valid_extensions.iter() {
         if name.ends_with(*ext) { valid = true; }
     }
 
-    foreach pre in invalid_prefixes.iter() {
+    for pre in invalid_prefixes.iter() {
         if name.starts_with(*pre) { valid = false; }
     }
 
index 48c467c34b6de2b337e8f4a3a3e909f7dfec52e6..a5d308007b48a3db5dc8042e5de20b32b06396c7 100644 (file)
@@ -56,7 +56,7 @@ pub fn run(lib_path: &str,
         err_fd: None
     });
 
-    foreach input in input.iter() {
+    for input in input.iter() {
         proc.input().write_str(*input);
     }
     let output = proc.finish_with_output();
index 970178f05fe0823384679c4a6940b1e166e1ae4f..74b4a1de5e0d13aecca9d2a0ea4c8261d050d6d0 100644 (file)
@@ -282,7 +282,7 @@ fn debugger() -> ~str { ~"gdb" }
         // check if each line in props.check_lines appears in the
         // output (in order)
         let mut i = 0u;
-        foreach line in ProcRes.stdout.line_iter() {
+        for line in ProcRes.stdout.line_iter() {
             if check_lines[i].trim() == line.trim() {
                 i += 1u;
             }
@@ -312,7 +312,7 @@ fn check_error_patterns(props: &TestProps,
     let mut next_err_idx = 0u;
     let mut next_err_pat = &props.error_patterns[next_err_idx];
     let mut done = false;
-    foreach line in ProcRes.stderr.line_iter() {
+    for line in ProcRes.stderr.line_iter() {
         if line.contains(*next_err_pat) {
             debug!("found error pattern %s", *next_err_pat);
             next_err_idx += 1u;
@@ -332,7 +332,7 @@ fn check_error_patterns(props: &TestProps,
         fatal_ProcRes(fmt!("error pattern '%s' not found!",
                            missing_patterns[0]), ProcRes);
     } else {
-        foreach pattern in missing_patterns.iter() {
+        for pattern in missing_patterns.iter() {
             error(fmt!("error pattern '%s' not found!", *pattern));
         }
         fatal_ProcRes(~"multiple error patterns not found", ProcRes);
@@ -385,9 +385,9 @@ fn prefix_matches( line : &str, prefix : &str ) -> bool {
     //    filename:line1:col1: line2:col2: *warning:* msg
     // where line1:col1: is the starting point, line2:col2:
     // is the ending point, and * represents ANSI color codes.
-    foreach line in ProcRes.stderr.line_iter() {
+    for line in ProcRes.stderr.line_iter() {
         let mut was_expected = false;
-        foreach (i, ee) in expected_errors.iter().enumerate() {
+        for (i, ee) in expected_errors.iter().enumerate() {
             if !found_flags[i] {
                 debug!("prefix=%s ee.kind=%s ee.msg=%s line=%s",
                        prefixes[i], ee.kind, ee.msg, line);
@@ -413,7 +413,7 @@ fn prefix_matches( line : &str, prefix : &str ) -> bool {
         }
     }
 
-    foreach i in range(0u, found_flags.len()) {
+    for 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",
@@ -558,7 +558,7 @@ fn compose_and_run_compiler(
     let extra_link_args = ~[~"-L",
                             aux_output_dir_name(config, testfile).to_str()];
 
-    foreach rel_ab in props.aux_builds.iter() {
+    for rel_ab in props.aux_builds.iter() {
         let abs_ab = config.aux_base.push_rel(&Path(*rel_ab));
         let aux_args =
             make_compile_args(config, props, ~[~"--lib"] + extra_link_args,
@@ -785,7 +785,7 @@ fn _arm_exec_compiled_test(config: &config, props: &TestProps,
     runargs.push(fmt!("%s", config.adb_test_dir));
     runargs.push(fmt!("%s", prog_short));
 
-    foreach tv in args.args.iter() {
+    for tv in args.args.iter() {
         runargs.push(tv.to_owned());
     }
 
@@ -802,7 +802,7 @@ fn _arm_exec_compiled_test(config: &config, props: &TestProps,
                      Some(~""));
 
     let mut exitcode : int = 0;
-    foreach c in exitcode_out.iter() {
+    for c in exitcode_out.iter() {
         if !c.is_digit() { break; }
         exitcode = exitcode * 10 + match c {
             '0' .. '9' => c as int - ('0' as int),
@@ -851,7 +851,7 @@ fn _arm_push_aux_shared_library(config: &config, testfile: &Path) {
     let tstr = aux_output_dir_name(config, testfile).to_str();
 
     let dirs = os::list_dir_path(&Path(tstr));
-    foreach file in dirs.iter() {
+    for file in dirs.iter() {
 
         if (file.filetype() == Some(~".so")) {
 
index 6492be53d34814a5867ae6f83fc40134e6e16714..3507e6ff788e1dd36fa75d196850dd4fba921e46 100755 (executable)
@@ -7,7 +7,7 @@ my @lines = <>;
 my $anchors = {};
 
 my $i = 0;
-foreach $line (@lines) {
+for $line (@lines) {
     $i++;
     if ($line =~ m/id="([^"]+)"/) {
         $anchors->{$1} = $i;
@@ -15,7 +15,7 @@ foreach $line (@lines) {
 }
 
 $i = 0;
-foreach $line (@lines) {
+for $line (@lines) {
     $i++;
     while ($line =~ m/href="#([^"]+)"/g) {
         if (! exists($anchors->{$1})) {
index 106cdbfd5f426b55ef99307ea8bf5b4cd0dd84ff..87c505e69d0b90fb3b9bc9c589723b29e0b0a488 100644 (file)
     "do"
     "else" "enum" "extern"
     "false" "fn" "for"
-    "if" "impl"
+    "if" "impl" "in"
     "let" "loop"
     "match" "mod" "mut"
     "priv" "pub"
index 12a504e4d0b89671dd20fac8539a4a36512b9221..260b23cb70be4c01dee0e6e233309cb56642f3b6 100644 (file)
@@ -3,7 +3,7 @@
 " Maintainer:   Patrick Walton <pcwalton@mozilla.com>
 " Maintainer:   Ben Blum <bblum@cs.cmu.edu>
 " Maintainer:   Chris Morgan <me@chrismorgan.info>
-" Last Change:  2013 Jul 10
+" Last Change:  2013 Aug 1
 
 if version < 600
   syntax clear
@@ -17,7 +17,7 @@ syn keyword   rustOperator    as
 syn match     rustAssert      "\<assert\(\w\)*!" contained
 syn match     rustFail        "\<fail\(\w\)*!" contained
 syn keyword   rustKeyword     break copy do extern
-syn keyword   rustKeyword     for if impl let log
+syn keyword   rustKeyword     in if impl let log
 syn keyword   rustKeyword     copy do extern
 syn keyword   rustKeyword     for impl let log
 syn keyword   rustKeyword     loop mod once priv pub
@@ -83,12 +83,26 @@ syn match     rustModPathSep  "::"
 syn match     rustFuncCall    "\w\(\w\)*("he=e-1,me=e-1
 syn match     rustFuncCall    "\w\(\w\)*::<"he=e-3,me=e-3 " foo::<T>();
 
+" This is merely a convention; note also the use of [A-Z], restricting it to
+" latin identifiers rather than the full Unicode uppercase. I have not used
+" [:upper:] as it depends upon 'noignorecase'
+"syn match     rustCapsIdent    display "[A-Z]\w\(\w\)*"
+
+syn match     rustOperator     display "\%(+\|-\|/\|*\|=\|\^\|&\||\|!\|>\|<\|%\)=\?"
+" This one isn't *quite* right, as we could have binary-& with a reference
+syn match     rustSigil        display /&\s\+[&~@*][^)= \t\r\n]/he=e-1,me=e-1
+syn match     rustSigil        display /[&~@*][^)= \t\r\n]/he=e-1,me=e-1
+" This isn't actually correct; a closure with no arguments can be `|| { }`.
+" Last, because the & in && isn't a sigil
+syn match     rustOperator     display "&&\|||"
+
 syn match     rustMacro       '\w\(\w\)*!' contains=rustAssert,rustFail
 syn match     rustMacro       '#\w\(\w\)*' contains=rustAssert,rustFail
 
 syn match     rustFormat      display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn?]\|\[\^\=.[^]]*\]\)" contained
 syn match     rustFormat      display "%%" contained
-syn region    rustString      start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=rustTodo,rustFormat
+syn match     rustSpecial     display contained /\\\([nrt\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)/
+syn region    rustString      start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=rustTodo,rustFormat,rustSpecial
 
 syn region    rustAttribute   start="#\[" end="\]" contains=rustString,rustDeriving
 syn region    rustDeriving    start="deriving(" end=")" contained contains=rustTrait
@@ -114,13 +128,13 @@ syn match     rustFloat       display "\<[0-9][0-9_]*\.[0-9_]\+\%([eE][+-]\=[0-9
 syn match     rustFloat       display "\<[0-9][0-9_]*\.[0-9_]\+\%([eE][+-]\=[0-9_]\+\)\(f\|f32\|f64\)\>"
 
 " For the benefit of delimitMate
-syn region rustLifetimeCandidate display start=/&'\%(\([^'\\]\|\\\(['nrt\\\"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'\)\@!/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustLifetime
+syn region rustLifetimeCandidate display start=/&'\%(\([^'\\]\|\\\(['nrt\\\"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'\)\@!/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime
 syn region rustGenericRegion display start=/<\%('\|[^[cntrl:][:space:][:punct:]]\)\@=')\S\@=/ end=/>/ contains=rustGenericLifetimeCandidate
-syn region rustGenericLifetimeCandidate display start=/\%(<\|,\s*\)\@<='/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustLifetime
+syn region rustGenericLifetimeCandidate display start=/\%(<\|,\s*\)\@<='/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime
 
 "rustLifetime must appear before rustCharacter, or chars will get the lifetime highlighting
 syn match     rustLifetime    display "\'\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*"
-syn match   rustCharacter   "'\([^'\\]\|\\\(['nrt\\\"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'"
+syn match   rustCharacter   /'\([^'\\]\|\\\([nrt\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'/ contains=rustSpecial
 
 syn region    rustCommentML   start="/\*" end="\*/" contains=rustTodo
 syn region    rustComment     start="//" skip="\\$" end="$" contains=rustTodo keepend
@@ -140,7 +154,9 @@ hi def link rustBinNumber       rustNumber
 hi def link rustIdentifierPrime rustIdentifier
 hi def link rustTrait           rustType
 
+hi def link rustSigil         StorageClass
 hi def link rustFormat        Special
+hi def link rustSpecial       Special
 hi def link rustString        String
 hi def link rustCharacter     Character
 hi def link rustNumber        Number
@@ -152,6 +168,7 @@ hi def link rustOperator      Operator
 hi def link rustKeyword       Keyword
 hi def link rustConditional   Conditional
 hi def link rustIdentifier    Identifier
+hi def link rustCapsIdent     rustIdentifier
 hi def link rustModPath       Include
 hi def link rustModPathSep    Delimiter
 hi def link rustFuncName      Function
index def1c5a53c1fde79dc5645064c39aacc2091d4b1..e6064ff4f72d2852bca25bbfc525772f59882e8b 100644 (file)
    fun:*
    ...
 }
+
+{
+   libuv-mac-no-thread-join
+   Memcheck:Leak
+   fun:malloc_zone_malloc
+   fun:_CFRuntimeCreateInstance
+   fun:CFRunLoopSourceCreate
+   fun:uv__platform_loop_init
+   fun:uv__loop_init
+   fun:uv_loop_new
+   fun:rust_uv_loop_new__c_stack_shim
+   ...
+}
\ No newline at end of file
index af69997f02e8d9a70de872b58cc93ccfe68c1989..cb4468f48ecb1473b65c3805ff15e22a2581c69f 100644 (file)
@@ -782,7 +782,7 @@ fn test_rw_arc() {
         }
 
         // Wait for children to pass their asserts
-        foreach r in children.iter() {
+        for r in children.iter() {
             r.recv();
         }
 
@@ -848,7 +848,7 @@ fn test_rw_downgrade() {
                 *state = 31337;
                 // FIXME: #7372: hits type inference bug with iterators
                 // send to other readers
-                foreach i in range(0u, reader_convos.len()) {
+                for i in range(0u, reader_convos.len()) {
                     match reader_convos[i] {
                         (ref rc, _) => rc.send(()),
                     }
@@ -858,7 +858,7 @@ fn test_rw_downgrade() {
             do (&read_mode).read |state| {
                 // FIXME: #7372: hits type inference bug with iterators
                 // complete handshake with other readers
-                foreach i in range(0u, reader_convos.len()) {
+                for i in range(0u, reader_convos.len()) {
                     match reader_convos[i] {
                         (_, ref rp) => rp.recv(),
                     }
index 0f54a9effa22267a0b1195e228230aa81e35b869..47b64d76951683087cd3e91666c78e4b8821477d 100644 (file)
@@ -277,7 +277,7 @@ pub fn alloc<'a, T>(&'a self, op: &fn() -> T) -> &'a T {
 #[test]
 fn test_arena_destructors() {
     let arena = Arena();
-    foreach i in range(0u, 10) {
+    for 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.
-    foreach i in range(0u, 10) {
+    for i in range(0u, 10) {
         // Arena allocate something with drop glue to make sure it
         // doesn't leak.
         do arena.alloc { @i };
index 5d5311d232922a712777c39869ef97fa032d3cf4..f2cbcf86935e7256c99a33cc095bbcaa16843cb6 100644 (file)
@@ -206,7 +206,7 @@ fn from_base64(&self) -> Result<~[u8], ~str> {
         let mut modulus = 0;
 
         let mut it = self.iter();
-        foreach &byte in it {
+        for &byte in it {
             let ch = byte as char;
             let val = byte as u32;
 
index 42f3fdc52798d6e930fb72183fa05e84b07309ad..bf618d7bd3a6ff1065f5e28c138beca29c7d0cde 100644 (file)
@@ -145,7 +145,7 @@ pub fn process(&mut self,
         let len = b.storage.len();
         assert_eq!(self.storage.len(), len);
         let mut changed = false;
-        foreach i in range(0, len) {
+        for i in range(0, len) {
             let mask = big_mask(nbits, i);
             let w0 = self.storage[i] & mask;
             let w1 = b.storage[i] & mask;
@@ -401,7 +401,7 @@ pub fn is_true(&self) -> bool {
       match self.rep {
         Small(ref b) => b.is_true(self.nbits),
         _ => {
-          foreach i in self.iter() { if !i { return false; } }
+          for i in self.iter() { if !i { return false; } }
           true
         }
       }
@@ -422,7 +422,7 @@ pub fn is_false(&self) -> bool {
       match self.rep {
         Small(ref b) => b.is_false(self.nbits),
         Big(_) => {
-          foreach i in self.iter() { if i { return false; } }
+          for i in self.iter() { if i { return false; } }
           true
         }
       }
@@ -486,7 +486,7 @@ pub fn to_bools(&self) -> ~[bool] {
      */
      pub fn to_str(&self) -> ~str {
         let mut rs = ~"";
-        foreach i in self.iter() {
+        for i in self.iter() {
             if i {
                 rs.push_char('1');
             } else {
@@ -544,7 +544,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);
-    foreach i in range(0u, len) {
+    for i in range(0u, len) {
         bitv.set(i, f(i));
     }
     bitv
@@ -561,7 +561,7 @@ fn iterate_bits(base: uint, bits: uint, f: &fn(uint) -> bool) -> bool {
     if bits == 0 {
         return true;
     }
-    foreach i in range(0u, uint::bits) {
+    for i in range(0u, uint::bits) {
         if bits & (1 << i) != 0 {
             if !f(base + i) {
                 return false;
@@ -676,7 +676,7 @@ pub fn unwrap(self) -> Bitv {
     fn other_op(&mut self, other: &BitvSet, f: &fn(uint, uint) -> uint) {
         fn nbits(mut w: uint) -> uint {
             let mut bits = 0;
-            foreach _ in range(0u, uint::bits) {
+            for _ in range(0u, uint::bits) {
                 if w == 0 {
                     break;
                 }
@@ -688,7 +688,7 @@ fn nbits(mut w: uint) -> uint {
         if self.capacity() < other.capacity() {
             self.bitv.storage.grow(other.capacity() / uint::bits, &0);
         }
-        foreach (i, &w) in other.bitv.storage.iter().enumerate() {
+        for (i, &w) in other.bitv.storage.iter().enumerate() {
             let old = self.bitv.storage[i];
             let new = f(old, w);
             self.bitv.storage[i] = new;
@@ -721,7 +721,7 @@ pub fn iter<'a>(&'a self) -> BitvSetIterator<'a> {
     }
 
     pub fn difference(&self, other: &BitvSet, f: &fn(&uint) -> bool) -> bool {
-        foreach (i, w1, w2) in self.common_iter(other) {
+        for (i, w1, w2) in self.common_iter(other) {
             if !iterate_bits(i, w1 & !w2, |b| f(&b)) {
                 return false
             }
@@ -734,7 +734,7 @@ pub fn difference(&self, other: &BitvSet, f: &fn(&uint) -> bool) -> bool {
 
     pub fn symmetric_difference(&self, other: &BitvSet,
                             f: &fn(&uint) -> bool) -> bool {
-        foreach (i, w1, w2) in self.common_iter(other) {
+        for (i, w1, w2) in self.common_iter(other) {
             if !iterate_bits(i, w1 ^ w2, |b| f(&b)) {
                 return false
             }
@@ -747,7 +747,7 @@ pub fn intersection(&self, other: &BitvSet, f: &fn(&uint) -> bool) -> bool {
     }
 
     pub fn union(&self, other: &BitvSet, f: &fn(&uint) -> bool) -> bool {
-        foreach (i, w1, w2) in self.common_iter(other) {
+        for (i, w1, w2) in self.common_iter(other) {
             if !iterate_bits(i, w1 | w2, |b| f(&b)) {
                 return false
             }
@@ -761,12 +761,12 @@ fn eq(&self, other: &BitvSet) -> bool {
         if self.size != other.size {
             return false;
         }
-        foreach (_, w1, w2) in self.common_iter(other) {
+        for (_, w1, w2) in self.common_iter(other) {
             if w1 != w2 {
                 return false;
             }
         }
-        foreach (_, _, w) in self.outlier_iter(other) {
+        for (_, _, w) in self.outlier_iter(other) {
             if w != 0 {
                 return false;
             }
@@ -801,7 +801,7 @@ fn is_disjoint(&self, other: &BitvSet) -> bool {
     }
 
     fn is_subset(&self, other: &BitvSet) -> bool {
-        foreach (_, w1, w2) in self.common_iter(other) {
+        for (_, w1, w2) in self.common_iter(other) {
             if w1 & w2 != w1 {
                 return false;
             }
@@ -809,7 +809,7 @@ fn is_subset(&self, other: &BitvSet) -> bool {
         /* If anything is not ours, then everything is not ours so we're
            definitely a subset in that case. Otherwise if there's any stray
            ones that 'other' doesn't have, we're not a subset. */
-        foreach (mine, _, w) in self.outlier_iter(other) {
+        for (mine, _, w) in self.outlier_iter(other) {
             if !mine {
                 return true;
             } else if w != 0 {
@@ -1285,12 +1285,12 @@ fn test_equal_sneaky_small() {
     #[test]
     fn test_equal_sneaky_big() {
         let mut a = bitv::Bitv::new(100, false);
-        foreach i in range(0u, 100) {
+        for i in range(0u, 100) {
             a.set(i, true);
         }
 
         let mut b = bitv::Bitv::new(100, true);
-        foreach i in range(0u, 100) {
+        for i in range(0u, 100) {
             b.set(i, true);
         }
 
@@ -1333,7 +1333,7 @@ fn test_bitv_iterator() {
         let bools = [true, false, true, true];
         let bitv = from_bools(bools);
 
-        foreach (act, &ex) in bitv.iter().zip(bools.iter()) {
+        for (act, &ex) in bitv.iter().zip(bools.iter()) {
             assert_eq!(ex, act);
         }
     }
@@ -1639,7 +1639,7 @@ fn bench_btv_small_iter(b: &mut BenchHarness) {
         let bitv = Bitv::new(uint::bits, false);
         do b.iter {
             let mut _sum = 0;
-            foreach pres in bitv.iter() {
+            for pres in bitv.iter() {
                 _sum += pres as uint;
             }
         }
@@ -1650,7 +1650,7 @@ fn bench_bitv_big_iter(b: &mut BenchHarness) {
         let bitv = Bitv::new(BENCH_BITS, false);
         do b.iter {
             let mut _sum = 0;
-            foreach pres in bitv.iter() {
+            for pres in bitv.iter() {
                 _sum += pres as uint;
             }
         }
@@ -1662,7 +1662,7 @@ fn bench_bitvset_iter(b: &mut BenchHarness) {
                                               |idx| {idx % 3 == 0}));
         do b.iter {
             let mut _sum = 0;
-            foreach idx in bitv.iter() {
+            for idx in bitv.iter() {
                 _sum += idx;
             }
         }
index 5b2de22ff0702d5a0fe089713b9b29e38504e9c2..623a9d5f452358cb7930883470c6b942d00489dc 100644 (file)
@@ -53,7 +53,7 @@ pub fn insert_rand_n<M:MutableMap<uint,uint>>(n: uint,
         let mut rng = rand::XorShiftRng::new();
 
         map.clear();
-        foreach _ in range(0, n) {
+        for _ in range(0, n) {
             map.insert(rng.gen::<uint>() % n, 1);
         }
 
@@ -70,7 +70,7 @@ pub fn insert_seq_n<M:MutableMap<uint,uint>>(n: uint,
                                                  bh: &mut BenchHarness) {
         // setup
         map.clear();
-        foreach i in range(0u, n) {
+        for i in range(0u, n) {
             map.insert(i*2, 1);
         }
 
@@ -90,7 +90,7 @@ pub fn find_rand_n<M:MutableMap<uint,uint>>(n: uint,
         let mut rng = rand::XorShiftRng::new();
         let mut keys = vec::from_fn(n, |_| rng.gen::<uint>() % n);
 
-        foreach k in keys.iter() {
+        for k in keys.iter() {
             map.insert(*k, 1);
         }
 
@@ -108,7 +108,7 @@ pub fn find_seq_n<M:MutableMap<uint,uint>>(n: uint,
                                                map: &mut M,
                                                bh: &mut BenchHarness) {
         // setup
-        foreach i in range(0u, n) {
+        for i in range(0u, n) {
             map.insert(i, 1);
         }
 
index 217573a4135b04be9fad37885c7df52db1081352..217f5b0a4175e2f903f8772504b3f68cef36489e 100644 (file)
@@ -70,7 +70,7 @@ fn result_str(&mut self) -> ~str {
 
 fn to_hex(rr: &[u8]) -> ~str {
     let mut s = ~"";
-    foreach b in rr.iter() {
+    for b in rr.iter() {
         let hex = uint::to_str_radix(*b as uint, 16u);
         if hex.len() == 1 {
             s.push_char('0');
index 86a89d79f1addb4bc34139af41c116e670782d22..aa52902c27d11ea28dc4ab2a8ed63f2fbca32b19 100644 (file)
@@ -250,7 +250,7 @@ fn test() {
         let mut out = [0u8, ..20];
 
         let mut sh = ~Sha1::new();
-        foreach t in tests.iter() {
+        for t in tests.iter() {
             (*sh).input_str(t.input);
             sh.result(out);
             assert!(t.output.as_slice() == out);
@@ -264,7 +264,7 @@ fn test() {
 
 
         // Test that it works when accepting the message in pieces
-        foreach t in tests.iter() {
+        for t in tests.iter() {
             let len = t.input.len();
             let mut left = len;
             while left > 0u {
index 06e96d99bca95f03eff9c625b45f3465ac1d7713..47535d5103ab113946adb4fd76df84da91373516 100644 (file)
@@ -736,7 +736,7 @@ struct Test {
 
     fn test_hash<D: Digest>(sh: &mut D, tests: &[Test]) {
         // Test that it works when accepting the message all at once
-        foreach t in tests.iter() {
+        for t in tests.iter() {
             sh.input_str(t.input);
 
             let out_str = sh.result_str();
@@ -746,7 +746,7 @@ fn test_hash<D: Digest>(sh: &mut D, tests: &[Test]) {
         }
 
         // Test that it works when accepting the message in pieces
-        foreach t in tests.iter() {
+        for t in tests.iter() {
             let len = t.input.len();
             let mut left = len;
             while left > 0u {
index 392eaf28157807f62a3a68b6badade1053de7e0e..4142bdadaf63e87b2f224909fd58b9d0af839e4c 100644 (file)
@@ -548,7 +548,7 @@ fn from_iterator(iterator: &mut T) -> DList<A> {
 
 impl<A, T: Iterator<A>> Extendable<A, T> for DList<A> {
     fn extend(&mut self, iterator: &mut T) {
-        foreach elt in *iterator { self.push_back(elt); }
+        for elt in *iterator { self.push_back(elt); }
     }
 }
 
@@ -687,7 +687,7 @@ fn test_append() {
         check_links(&m);
         let sum = v + u;
         assert_eq!(sum.len(), m.len());
-        foreach elt in sum.consume_iter() {
+        for elt in sum.consume_iter() {
             assert_eq!(m.pop_front(), Some(elt))
         }
     }
@@ -711,7 +711,7 @@ fn test_prepend() {
         check_links(&m);
         let sum = u + v;
         assert_eq!(sum.len(), m.len());
-        foreach elt in sum.consume_iter() {
+        for elt in sum.consume_iter() {
             assert_eq!(m.pop_front(), Some(elt))
         }
     }
@@ -742,7 +742,7 @@ fn test_rotate() {
     #[test]
     fn test_iterator() {
         let m = generate_test();
-        foreach (i, elt) in m.iter().enumerate() {
+        for (i, elt) in m.iter().enumerate() {
             assert_eq!(i as int, *elt);
         }
         let mut n = DList::new();
@@ -790,7 +790,7 @@ fn test_iterator_double_end() {
     #[test]
     fn test_rev_iter() {
         let m = generate_test();
-        foreach (i, elt) in m.rev_iter().enumerate() {
+        for (i, elt) in m.rev_iter().enumerate() {
             assert_eq!((6 - i) as int, *elt);
         }
         let mut n = DList::new();
@@ -807,7 +807,7 @@ fn test_rev_iter() {
     fn test_mut_iter() {
         let mut m = generate_test();
         let mut len = m.len();
-        foreach (i, elt) in m.mut_iter().enumerate() {
+        for (i, elt) in m.mut_iter().enumerate() {
             assert_eq!(i as int, *elt);
             len -= 1;
         }
@@ -899,7 +899,7 @@ fn test_insert_ordered() {
     #[test]
     fn test_mut_rev_iter() {
         let mut m = generate_test();
-        foreach (i, elt) in m.mut_rev_iter().enumerate() {
+        for (i, elt) in m.mut_rev_iter().enumerate() {
             assert_eq!((6-i) as int, *elt);
         }
         let mut n = DList::new();
@@ -943,7 +943,7 @@ fn test_fuzz() {
     fn fuzz_test(sz: int) {
         let mut m = DList::new::<int>();
         let mut v = ~[];
-        foreach i in range(0, sz) {
+        for i in range(0, sz) {
             check_links(&m);
             let r: u8 = rand::random();
             match r % 6 {
@@ -969,7 +969,7 @@ fn fuzz_test(sz: int) {
         check_links(&m);
 
         let mut i = 0u;
-        foreach (a, &b) in m.consume_iter().zip(v.iter()) {
+        for (a, &b) in m.consume_iter().zip(v.iter()) {
             i += 1;
             assert_eq!(a, b);
         }
index 2094259664cf9092290a90f1b9799be503795f22..a161989c3751623b1ddd5ea982130c7ae9c20f01 100644 (file)
@@ -419,7 +419,7 @@ mod test {
     fn make_file(path : &Path, contents: &[~str]) {
         let file = io::file_writer(path, [io::Create, io::Truncate]).unwrap();
 
-        foreach str in contents.iter() {
+        for str in contents.iter() {
             file.write_str(*str);
             file.write_char('\n');
         }
@@ -446,13 +446,13 @@ fn test_fileinput_read_byte() {
             |i| fmt!("tmp/lib-fileinput-test-fileinput-read-byte-%u.tmp", i)), true);
 
         // 3 files containing 0\n, 1\n, and 2\n respectively
-        foreach (i, filename) in filenames.iter().enumerate() {
+        for (i, filename) in filenames.iter().enumerate() {
             make_file(filename.get_ref(), [fmt!("%u", i)]);
         }
 
         let fi = FileInput::from_vec(filenames.clone());
 
-        foreach (line, c) in "012".iter().enumerate() {
+        for (line, c) in "012".iter().enumerate() {
             assert_eq!(fi.read_byte(), c as int);
             assert_eq!(fi.state().line_num, line);
             assert_eq!(fi.state().line_num_file, 0);
@@ -476,7 +476,7 @@ fn test_fileinput_read() {
             |i| fmt!("tmp/lib-fileinput-test-fileinput-read-%u.tmp", i)), true);
 
         // 3 files containing 1\n, 2\n, and 3\n respectively
-        foreach (i, filename) in filenames.iter().enumerate() {
+        for (i, filename) in filenames.iter().enumerate() {
             make_file(filename.get_ref(), [fmt!("%u", i)]);
         }
 
@@ -496,7 +496,7 @@ fn test_input_vec() {
             3,
             |i| fmt!("tmp/lib-fileinput-test-input-vec-%u.tmp", i)), true);
 
-        foreach (i, filename) in filenames.iter().enumerate() {
+        for (i, filename) in filenames.iter().enumerate() {
             let contents =
                 vec::from_fn(3, |j| fmt!("%u %u", i, j));
             make_file(filename.get_ref(), contents);
@@ -518,7 +518,7 @@ fn test_input_vec_state() {
             3,
             |i| fmt!("tmp/lib-fileinput-test-input-vec-state-%u.tmp", i)),true);
 
-        foreach (i, filename) in filenames.iter().enumerate() {
+        for (i, filename) in filenames.iter().enumerate() {
             let contents =
                 vec::from_fn(3, |j| fmt!("%u %u", i, j + 1));
             make_file(filename.get_ref(), contents);
@@ -587,7 +587,7 @@ fn test_next_file() {
             3,
             |i| fmt!("tmp/lib-fileinput-test-next-file-%u.tmp", i)),true);
 
-        foreach (i, filename) in filenames.iter().enumerate() {
+        for (i, filename) in filenames.iter().enumerate() {
             let contents =
                 vec::from_fn(3, |j| fmt!("%u %u", i, j + 1));
             make_file(filename.get_ref(), contents);
@@ -600,7 +600,7 @@ fn test_next_file() {
         input.next_file(); // skip the rest of 1
 
         // read all lines from 1 (but don't read any from 2),
-        foreach i in range(1u, 4) {
+        for 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
index b43962dae40feec64c2c71c3c5a8296e6ce38b0e..74653828121e96516778c3363e8c0f4b7e06cbc3 100644 (file)
 let (port, chan) = serial::pipe_stream();
 
 do task::spawn || {
-    foreach i in range(0, 10) {
+    for i in range(0, 10) {
         chan.send(@i)
     }
 }
 
-foreach i in range(0, 10) {
+for i in range(0, 10) {
     assert @i == port.recv()
 }
 ~~~
@@ -664,12 +664,12 @@ fn test_serializing_pipes() {
         let (port, chan) = serial::pipe_stream();
 
         do task::spawn || {
-            foreach i in range(0, 10) {
+            for i in range(0, 10) {
                 chan.send(i)
             }
         }
 
-        foreach i in range(0, 10) {
+        for i in range(0, 10) {
             assert!(i == port.recv())
         }
     }
@@ -680,12 +680,12 @@ fn test_serializing_boxes() {
         let (port, chan) = serial::pipe_stream();
 
         do task::spawn || {
-            foreach i in range(0, 10) {
+            for i in range(0, 10) {
                 chan.send(@i)
             }
         }
 
-        foreach i in range(0, 10) {
+        for i in range(0, 10) {
             assert!(@i == port.recv())
         }
     }
@@ -711,12 +711,12 @@ fn test_pod_pipes() {
         let (port, chan) = pod::pipe_stream();
 
         do task::spawn || {
-            foreach i in range(0, 10) {
+            for i in range(0, 10) {
                 chan.send(i)
             }
         }
 
-        foreach i in range(0, 10) {
+        for i in range(0, 10) {
             assert!(i == port.recv())
         }
     }
@@ -828,7 +828,7 @@ fn test_some_tcp_stream<U:Unflattener<int>,F:Flattener<int>>(
             // TcpSocketBuf is a Writer!
             let chan = writer_chan(socket_buf);
 
-            foreach i in range(0, 10) {
+            for i in range(0, 10) {
                 debug!("sending %?", i);
                 chan.send(i)
             }
@@ -851,7 +851,7 @@ fn test_some_tcp_stream<U:Unflattener<int>,F:Flattener<int>>(
             // TcpSocketBuf is a Reader!
             let port = reader_port(socket_buf);
 
-            foreach i in range(0, 10) {
+            for i in range(0, 10) {
                 let j = port.recv();
                 debug!("received %?", j);
                 assert_eq!(i, j);
index 31a73833e27ca6c8910165b6a9c0ce4d648ee422..b9ee38317f3210356fd9549c71ef96b3d51ffcb5 100644 (file)
@@ -307,7 +307,7 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result {
                 }
             }
             let mut name_pos = 0;
-            foreach nm in names.iter() {
+            for nm in names.iter() {
                 name_pos += 1;
                 let optid = match find_opt(opts, (*nm).clone()) {
                   Some(id) => id,
@@ -392,7 +392,7 @@ pub fn opt_count(mm: &Matches, nm: &str) -> uint {
 
 /// Returns true if any of several options were matched
 pub fn opts_present(mm: &Matches, names: &[~str]) -> bool {
-    foreach nm in names.iter() {
+    for nm in names.iter() {
         match find_opt(mm.opts, mkname(*nm)) {
             Some(id) if !mm.vals[id].is_empty() => return true,
             _ => (),
@@ -422,7 +422,7 @@ pub fn opt_str(mm: &Matches, nm: &str) -> ~str {
  * option took an argument
  */
 pub fn opts_str(mm: &Matches, names: &[~str]) -> ~str {
-    foreach nm in names.iter() {
+    for nm in names.iter() {
         match opt_val(mm, *nm) {
           Some(Val(ref s)) => return (*s).clone(),
           _ => ()
@@ -441,7 +441,7 @@ pub fn opts_str(mm: &Matches, names: &[~str]) -> ~str {
 pub fn opt_strs(mm: &Matches, nm: &str) -> ~[~str] {
     let mut acc: ~[~str] = ~[];
     let r = opt_vals(mm, nm);
-    foreach v in r.iter() {
+    for v in r.iter() {
         match *v { Val(ref s) => acc.push((*s).clone()), _ => () }
     }
     acc
@@ -671,7 +671,7 @@ pub fn usage(brief: &str, opts: &[OptGroup]) -> ~str {
 
             // Normalize desc to contain words separated by one space character
             let mut desc_normalized_whitespace = ~"";
-            foreach word in desc.word_iter() {
+            for word in desc.word_iter() {
                 desc_normalized_whitespace.push_str(word);
                 desc_normalized_whitespace.push_char(' ');
             }
index 720a525164a3256b3cb4e79d3e8f3427df549f57..7fd47fdbd3999a7f336e837e0c67e008381b15d4 100644 (file)
@@ -27,7 +27,7 @@
 let xs = [0u, 1, 2, 3, 4, 5];
 let ys = [30, 40, 50, 60];
 let mut it = xs.iter().chain(ys.iter());
-foreach &x: &uint in it {
+for &x: &uint in it {
     println(x.to_str());
 }
 ~~~
index a9f4276e79e701297cb57813fe19382ecaedf22e..cd35cbdf30980faa2cd62e765835e0f69dddfe05 100644 (file)
@@ -57,7 +57,7 @@ pub struct Error {
 
 fn escape_str(s: &str) -> ~str {
     let mut escaped = ~"\"";
-    foreach c in s.iter() {
+    for c in s.iter() {
         match c {
           '"' => escaped.push_str("\\\""),
           '\\' => escaped.push_str("\\\\"),
@@ -923,7 +923,7 @@ fn read_float(&mut self) -> float {
     fn read_char(&mut self) -> char {
         let mut v = ~[];
         let s = self.read_str();
-        foreach c in s.iter() { v.push(c) }
+        for c in s.iter() { v.push(c) }
         if v.len() != 1 { fail!("string must have one character") }
         v[0]
     }
@@ -949,7 +949,7 @@ fn read_enum_variant<T>(&mut self,
         let name = match self.stack.pop() {
             String(s) => s,
             List(list) => {
-                foreach v in list.consume_rev_iter() {
+                for v in list.consume_rev_iter() {
                     self.stack.push(v);
                 }
                 match self.stack.pop() {
@@ -1067,7 +1067,7 @@ fn read_seq<T>(&mut self, f: &fn(&mut Decoder, uint) -> T) -> T {
         let len = match self.stack.pop() {
             List(list) => {
                 let len = list.len();
-                foreach v in list.consume_rev_iter() {
+                for v in list.consume_rev_iter() {
                     self.stack.push(v);
                 }
                 len
@@ -1087,7 +1087,7 @@ fn read_map<T>(&mut self, f: &fn(&mut Decoder, uint) -> T) -> T {
         let len = match self.stack.pop() {
             Object(obj) => {
                 let len = obj.len();
-                foreach (key, value) in obj.consume_iter() {
+                for (key, value) in obj.consume_iter() {
                     self.stack.push(value);
                     self.stack.push(String(key));
                 }
@@ -1157,12 +1157,12 @@ fn lt(&self, other: &Json) -> bool {
                         let mut d1_flat = ~[];
 
                         // FIXME #4430: this is horribly inefficient...
-                        foreach (k, v) in d0.iter() {
+                        for (k, v) in d0.iter() {
                              d0_flat.push((@(*k).clone(), @(*v).clone()));
                         }
                         d0_flat.qsort();
 
-                        foreach (k, v) in d1.iter() {
+                        for (k, v) in d1.iter() {
                             d1_flat.push((@(*k).clone(), @(*v).clone()));
                         }
                         d1_flat.qsort();
@@ -1297,7 +1297,7 @@ fn to_json(&self) -> Json { List(self.map(|elt| elt.to_json())) }
 impl<A:ToJson> ToJson for TreeMap<~str, A> {
     fn to_json(&self) -> Json {
         let mut d = TreeMap::new();
-        foreach (key, value) in self.iter() {
+        for (key, value) in self.iter() {
             d.insert((*key).clone(), value.to_json());
         }
         Object(~d)
@@ -1307,7 +1307,7 @@ fn to_json(&self) -> Json {
 impl<A:ToJson> ToJson for HashMap<~str, A> {
     fn to_json(&self) -> Json {
         let mut d = TreeMap::new();
-        foreach (key, value) in self.iter() {
+        for (key, value) in self.iter() {
             d.insert((*key).clone(), value.to_json());
         }
         Object(~d)
@@ -1364,7 +1364,7 @@ struct Outer {
     fn mk_object(items: &[(~str, Json)]) -> Json {
         let mut d = ~TreeMap::new();
 
-        foreach item in items.iter() {
+        for item in items.iter() {
             match *item {
                 (ref key, ref value) => { d.insert((*key).clone(), (*value).clone()); },
             }
index 6f575926cc69d0e39f2cdaa3048254c8a237b4f5..ab843fe65464bd599f6f812f713d25ef32ce747e 100644 (file)
@@ -131,7 +131,7 @@ fn cmp(&self, other: &BigUint) -> Ordering {
         if s_len < o_len { return Less; }
         if s_len > o_len { return Greater;  }
 
-        foreach (&self_i, &other_i) in self.data.rev_iter().zip(other.data.rev_iter()) {
+        for (&self_i, &other_i) in self.data.rev_iter().zip(other.data.rev_iter()) {
             cond!((self_i < other_i) { return Less; }
                   (self_i > other_i) { return Greater; })
         }
@@ -420,7 +420,7 @@ fn div_estimate(a: &BigUint, b: &BigUint, n: uint)
             let bn = *b.data.last();
             let mut d = ~[];
             let mut carry = 0;
-            foreach elt in an.rev_iter() {
+            for elt in an.rev_iter() {
                 let ai = BigDigit::to_uint(carry, *elt);
                 let di = ai / (bn as uint);
                 assert!(di < BigDigit::base);
@@ -524,7 +524,7 @@ fn convert_base(n: BigUint, base: uint) -> ~[BigDigit] {
         fn fill_concat(v: &[BigDigit], radix: uint, l: uint) -> ~str {
             if v.is_empty() { return ~"0" }
             let mut s = str::with_capacity(v.len() * l);
-            foreach n in v.rev_iter() {
+            for n in v.rev_iter() {
                 let ss = uint::to_str_radix(*n as uint, radix);
                 s.push_str("0".repeat(l - ss.len()));
                 s.push_str(ss);
@@ -651,7 +651,7 @@ pub fn to_uint(&self) -> uint {
 
         let mut borrow = 0;
         let mut shifted = ~[];
-        foreach elem in self.data.rev_iter() {
+        for elem in self.data.rev_iter() {
             shifted = ~[(*elem >> n_bits) | borrow] + shifted;
             borrow = *elem << (BigDigit::bits - n_bits);
         }
@@ -1186,8 +1186,8 @@ fn check(slice: &[BigDigit], data: &[BigDigit]) {
     fn test_cmp() {
         let data: ~[BigUint] = [ &[], &[1], &[2], &[-1], &[0, 1], &[2, 1], &[1, 1, 1]  ]
             .map(|v| BigUint::from_slice(*v));
-        foreach (i, ni) in data.iter().enumerate() {
-            foreach (j0, nj) in data.slice(i, data.len()).iter().enumerate() {
+        for (i, ni) in data.iter().enumerate() {
+            for (j0, nj) in data.slice(i, data.len()).iter().enumerate() {
                 let j = j0 + i;
                 if i == j {
                     assert_eq!(ni.cmp(nj), Equal);
@@ -1360,7 +1360,7 @@ fn check(v: ~[BigDigit], u: uint) {
 
     #[test]
     fn test_add() {
-        foreach elm in sum_triples.iter() {
+        for elm in sum_triples.iter() {
             let (aVec, bVec, cVec) = *elm;
             let a = BigUint::from_slice(aVec);
             let b = BigUint::from_slice(bVec);
@@ -1373,7 +1373,7 @@ fn test_add() {
 
     #[test]
     fn test_sub() {
-        foreach elm in sum_triples.iter() {
+        for elm in sum_triples.iter() {
             let (aVec, bVec, cVec) = *elm;
             let a = BigUint::from_slice(aVec);
             let b = BigUint::from_slice(bVec);
@@ -1424,7 +1424,7 @@ fn test_sub() {
 
     #[test]
     fn test_mul() {
-        foreach elm in mul_triples.iter() {
+        for elm in mul_triples.iter() {
             let (aVec, bVec, cVec) = *elm;
             let a = BigUint::from_slice(aVec);
             let b = BigUint::from_slice(bVec);
@@ -1434,7 +1434,7 @@ fn test_mul() {
             assert!(b * a == c);
         }
 
-        foreach elm in div_rem_quadruples.iter() {
+        for elm in div_rem_quadruples.iter() {
             let (aVec, bVec, cVec, dVec) = *elm;
             let a = BigUint::from_slice(aVec);
             let b = BigUint::from_slice(bVec);
@@ -1448,7 +1448,7 @@ fn test_mul() {
 
     #[test]
     fn test_div_rem() {
-        foreach elm in mul_triples.iter() {
+        for elm in mul_triples.iter() {
             let (aVec, bVec, cVec) = *elm;
             let a = BigUint::from_slice(aVec);
             let b = BigUint::from_slice(bVec);
@@ -1462,7 +1462,7 @@ fn test_div_rem() {
             }
         }
 
-        foreach elm in div_rem_quadruples.iter() {
+        for elm in div_rem_quadruples.iter() {
             let (aVec, bVec, cVec, dVec) = *elm;
             let a = BigUint::from_slice(aVec);
             let b = BigUint::from_slice(bVec);
@@ -1579,9 +1579,9 @@ fn to_str_pairs() -> ~[ (BigUint, ~[(uint, ~str)]) ] {
     #[test]
     fn test_to_str_radix() {
         let r = to_str_pairs();
-        foreach num_pair in r.iter() {
+        for num_pair in r.iter() {
             let &(ref n, ref rs) = num_pair;
-            foreach str_pair in rs.iter() {
+            for str_pair in rs.iter() {
                 let &(ref radix, ref str) = str_pair;
                 assert_eq!(&n.to_str_radix(*radix), str);
             }
@@ -1591,9 +1591,9 @@ fn test_to_str_radix() {
     #[test]
     fn test_from_str_radix() {
         let r = to_str_pairs();
-        foreach num_pair in r.iter() {
+        for num_pair in r.iter() {
             let &(ref n, ref rs) = num_pair;
-            foreach str_pair in rs.iter() {
+            for str_pair in rs.iter() {
                 let &(ref radix, ref str) = str_pair;
                 assert_eq!(n, &FromStrRadix::from_str_radix(*str, *radix).get());
             }
@@ -1608,7 +1608,7 @@ fn test_from_str_radix() {
     fn test_factor() {
         fn factor(n: uint) -> BigUint {
             let mut f= One::one::<BigUint>();
-            foreach i in range(2, n + 1) {
+            for 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);
@@ -1658,14 +1658,14 @@ fn check(inp_s: Sign, inp_n: uint, ans_s: Sign, ans_n: uint) {
     fn test_cmp() {
         let vs = [ &[2 as BigDigit], &[1, 1], &[2, 1], &[1, 1, 1] ];
         let mut nums = ~[];
-        foreach s in vs.rev_iter() {
+        for s in vs.rev_iter() {
             nums.push(BigInt::from_slice(Minus, *s));
         }
         nums.push(Zero::zero());
         nums.push_all_move(vs.map(|s| BigInt::from_slice(Plus, *s)));
 
-        foreach (i, ni) in nums.iter().enumerate() {
-            foreach (j0, nj) in nums.slice(i, nums.len()).iter().enumerate() {
+        for (i, ni) in nums.iter().enumerate() {
+            for (j0, nj) in nums.slice(i, nums.len()).iter().enumerate() {
                 let j = i + j0;
                 if i == j {
                     assert_eq!(ni.cmp(nj), Equal);
@@ -1769,7 +1769,7 @@ fn check(b: BigInt, u: uint) {
 
     #[test]
     fn test_add() {
-        foreach elm in sum_triples.iter() {
+        for elm in sum_triples.iter() {
             let (aVec, bVec, cVec) = *elm;
             let a = BigInt::from_slice(Plus, aVec);
             let b = BigInt::from_slice(Plus, bVec);
@@ -1788,7 +1788,7 @@ fn test_add() {
 
     #[test]
     fn test_sub() {
-        foreach elm in sum_triples.iter() {
+        for elm in sum_triples.iter() {
             let (aVec, bVec, cVec) = *elm;
             let a = BigInt::from_slice(Plus, aVec);
             let b = BigInt::from_slice(Plus, bVec);
@@ -1845,7 +1845,7 @@ fn test_sub() {
 
     #[test]
     fn test_mul() {
-        foreach elm in mul_triples.iter() {
+        for elm in mul_triples.iter() {
             let (aVec, bVec, cVec) = *elm;
             let a = BigInt::from_slice(Plus, aVec);
             let b = BigInt::from_slice(Plus, bVec);
@@ -1858,7 +1858,7 @@ fn test_mul() {
             assert!((-b) * a == -c);
         }
 
-        foreach elm in div_rem_quadruples.iter() {
+        for elm in div_rem_quadruples.iter() {
             let (aVec, bVec, cVec, dVec) = *elm;
             let a = BigInt::from_slice(Plus, aVec);
             let b = BigInt::from_slice(Plus, bVec);
@@ -1897,7 +1897,7 @@ fn check(a: &BigInt, b: &BigInt, d: &BigInt, m: &BigInt) {
             }
         }
 
-        foreach elm in mul_triples.iter() {
+        for elm in mul_triples.iter() {
             let (aVec, bVec, cVec) = *elm;
             let a = BigInt::from_slice(Plus, aVec);
             let b = BigInt::from_slice(Plus, bVec);
@@ -1907,7 +1907,7 @@ fn check(a: &BigInt, b: &BigInt, d: &BigInt, m: &BigInt) {
             if !b.is_zero() { check(&c, &b, &a, &Zero::zero()); }
         }
 
-        foreach elm in div_rem_quadruples.iter() {
+        for elm in div_rem_quadruples.iter() {
             let (aVec, bVec, cVec, dVec) = *elm;
             let a = BigInt::from_slice(Plus, aVec);
             let b = BigInt::from_slice(Plus, bVec);
@@ -1940,7 +1940,7 @@ fn check(a: &BigInt, b: &BigInt, q: &BigInt, r: &BigInt) {
             check_sub(&a.neg(), b, &q.neg(), &r.neg());
             check_sub(&a.neg(), &b.neg(), q, &r.neg());
         }
-        foreach elm in mul_triples.iter() {
+        for elm in mul_triples.iter() {
             let (aVec, bVec, cVec) = *elm;
             let a = BigInt::from_slice(Plus, aVec);
             let b = BigInt::from_slice(Plus, bVec);
@@ -1950,7 +1950,7 @@ fn check(a: &BigInt, b: &BigInt, q: &BigInt, r: &BigInt) {
             if !b.is_zero() { check(&c, &b, &a, &Zero::zero()); }
         }
 
-        foreach elm in div_rem_quadruples.iter() {
+        for elm in div_rem_quadruples.iter() {
             let (aVec, bVec, cVec, dVec) = *elm;
             let a = BigInt::from_slice(Plus, aVec);
             let b = BigInt::from_slice(Plus, bVec);
index 82b0808b788c0cb3f47206a6e8d311297de142e7..669dc1c1b45fa43fdd078694f937f13917749435 100644 (file)
@@ -239,14 +239,14 @@ fn test(c: Complex, ns: float) {
     fn test_scale_unscale() {
         assert_eq!(_05_05i.scale(2f), _1_1i);
         assert_eq!(_1_1i.unscale(2f), _05_05i);
-        foreach &c in all_consts.iter() {
+        for &c in all_consts.iter() {
             assert_eq!(c.scale(2f).unscale(2f), c);
         }
     }
 
     #[test]
     fn test_conj() {
-        foreach &c in all_consts.iter() {
+        for &c in all_consts.iter() {
             assert_eq!(c.conj(), Cmplx::new(c.re, -c.im));
             assert_eq!(c.conj().conj(), c);
         }
@@ -283,7 +283,7 @@ fn test(c: Complex) {
             let (r, theta) = c.to_polar();
             assert!((c - Cmplx::from_polar(&r, &theta)).norm() < 1e-6);
         }
-        foreach &c in all_consts.iter() { test(c); }
+        for &c in all_consts.iter() { test(c); }
     }
 
     mod arith {
@@ -296,7 +296,7 @@ fn test_add() {
             assert_eq!(_0_1i + _1_0i, _1_1i);
             assert_eq!(_1_0i + _neg1_1i, _0_1i);
 
-            foreach &c in all_consts.iter() {
+            for &c in all_consts.iter() {
                 assert_eq!(_0_0i + c, c);
                 assert_eq!(c + _0_0i, c);
             }
@@ -308,7 +308,7 @@ fn test_sub() {
             assert_eq!(_0_1i - _1_0i, _neg1_1i);
             assert_eq!(_0_1i - _neg1_1i, _1_0i);
 
-            foreach &c in all_consts.iter() {
+            for &c in all_consts.iter() {
                 assert_eq!(c - _0_0i, c);
                 assert_eq!(c - c, _0_0i);
             }
@@ -323,7 +323,7 @@ fn test_mul() {
             assert_eq!(_0_1i * _0_1i, -_1_0i);
             assert_eq!(_0_1i * _0_1i * _0_1i * _0_1i, _1_0i);
 
-            foreach &c in all_consts.iter() {
+            for &c in all_consts.iter() {
                 assert_eq!(c * _1_0i, c);
                 assert_eq!(_1_0i * c, c);
             }
@@ -331,7 +331,7 @@ fn test_mul() {
         #[test]
         fn test_div() {
             assert_eq!(_neg1_1i / _0_1i, _1_1i);
-            foreach &c in all_consts.iter() {
+            for &c in all_consts.iter() {
                 if c != Zero::zero() {
                     assert_eq!(c / c, _1_0i);
                 }
@@ -341,7 +341,7 @@ fn test_div() {
         fn test_neg() {
             assert_eq!(-_1_0i + _0_1i, _neg1_1i);
             assert_eq!((-_0_1i) * _0_1i, _1_0i);
-            foreach &c in all_consts.iter() {
+            for &c in all_consts.iter() {
                 assert_eq!(-(-c), c);
             }
         }
index af09ba42b807e03d151f4a3d1e4fb6e9119821c4..60dd36a3b886e1c90688b423645e5bbfb3b7f1c0 100644 (file)
@@ -500,7 +500,7 @@ fn test(s: &str) {
         }
 
         let xs = ["0 /1", "abc", "", "1/", "--1/2","3/2/1"];
-        foreach &s in xs.iter() {
+        for &s in xs.iter() {
             test(s);
         }
     }
@@ -540,7 +540,7 @@ fn test(s: &str) {
         }
 
         let xs = ["0 /1", "abc", "", "1/", "--1/2","3/2/1", "3/2"];
-        foreach &s in xs.iter() {
+        for &s in xs.iter() {
             test(s);
         }
     }
index 9873ab3d858dca972294008560242ddca071c635..696ecc881b7230c551d7b889489fdbcbe7d71e52 100644 (file)
@@ -206,7 +206,7 @@ fn extend(&mut self, iter: &mut Iter) {
         let len = self.capacity();
         self.reserve_at_least(len + lower);
 
-        foreach elem in *iter {
+        for elem in *iter {
             self.push(elem);
         }
     }
@@ -223,7 +223,7 @@ fn test_iterator() {
         let iterout = ~[9, 5, 3];
         let pq = PriorityQueue::from_vec(data);
         let mut i = 0;
-        foreach el in pq.iter() {
+        for el in pq.iter() {
             assert_eq!(*el, iterout[i]);
             i += 1;
         }
@@ -369,7 +369,7 @@ fn test_from_iter() {
 
         let mut q: PriorityQueue<uint> = xs.rev_iter().transform(|&x| x).collect();
 
-        foreach &x in xs.iter() {
+        for &x in xs.iter() {
             assert_eq!(q.pop(), x);
         }
     }
index f3f34a3becc0e8abbaa7c68145c6cd053b1493d6..89d23191a7634331bf95fa976995425d9b14a053 100644 (file)
@@ -38,7 +38,7 @@ fn len(&self) -> uint { self.nelts }
 impl<T> Mutable for RingBuf<T> {
     /// Clear the RingBuf, removing all values.
     fn clear(&mut self) {
-        foreach x in self.elts.mut_iter() { *x = None }
+        for x in self.elts.mut_iter() { *x = None }
         self.nelts = 0;
         self.lo = 0;
     }
@@ -277,7 +277,7 @@ fn grow<T>(nelts: uint, loptr: &mut uint, elts: &mut ~[Option<T>]) {
     elts.reserve(newlen);
 
     /* fill with None */
-    foreach _ in range(elts.len(), elts.capacity()) {
+    for _ in range(elts.len(), elts.capacity()) {
         elts.push(None);
     }
 
@@ -292,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
-        foreach i in range(0u, lo) {
+        for i in range(0u, lo) {
             elts.swap(i, nelts + i);
         }
     } else {                // B
-        foreach i in range(lo, nelts) {
+        for i in range(lo, nelts) {
             elts.swap(i, newlen - nelts + i);
         }
         *loptr += newlen - nelts;
@@ -333,7 +333,7 @@ fn from_iterator(iterator: &mut T) -> RingBuf<A> {
 
 impl<A, T: Iterator<A>> Extendable<A, T> for RingBuf<A> {
     fn extend(&mut self, iterator: &mut T) {
-        foreach elt in *iterator {
+        for elt in *iterator {
             self.push_back(elt);
         }
     }
@@ -461,21 +461,21 @@ fn test_parameterized<T:Clone + Eq>(a: T, b: T, c: T, d: T) {
     #[test]
     fn test_push_front_grow() {
         let mut deq = RingBuf::new();
-        foreach i in range(0u, 66) {
+        for i in range(0u, 66) {
             deq.push_front(i);
         }
         assert_eq!(deq.len(), 66);
 
-        foreach i in range(0u, 66) {
+        for i in range(0u, 66) {
             assert_eq!(*deq.get(i), 65 - i);
         }
 
         let mut deq = RingBuf::new();
-        foreach i in range(0u, 66) {
+        for i in range(0u, 66) {
             deq.push_back(i);
         }
 
-        foreach i in range(0u, 66) {
+        for i in range(0u, 66) {
             assert_eq!(*deq.get(i), i);
         }
     }
@@ -606,12 +606,12 @@ fn test_iter() {
         assert_eq!(d.iter().next(), None);
         assert_eq!(d.iter().size_hint(), (0, Some(0)));
 
-        foreach i in range(0, 5) {
+        for i in range(0, 5) {
             d.push_back(i);
         }
         assert_eq!(d.iter().collect::<~[&int]>(), ~[&0,&1,&2,&3,&4]);
 
-        foreach i in range(6, 9) {
+        for i in range(6, 9) {
             d.push_front(i);
         }
         assert_eq!(d.iter().collect::<~[&int]>(), ~[&8,&7,&6,&0,&1,&2,&3,&4]);
@@ -631,12 +631,12 @@ fn test_rev_iter() {
         let mut d = RingBuf::new();
         assert_eq!(d.rev_iter().next(), None);
 
-        foreach i in range(0, 5) {
+        for i in range(0, 5) {
             d.push_back(i);
         }
         assert_eq!(d.rev_iter().collect::<~[&int]>(), ~[&4,&3,&2,&1,&0]);
 
-        foreach i in range(6, 9) {
+        for i in range(6, 9) {
             d.push_front(i);
         }
         assert_eq!(d.rev_iter().collect::<~[&int]>(), ~[&4,&3,&2,&1,&0,&6,&7,&8]);
@@ -647,11 +647,11 @@ fn test_mut_iter() {
         let mut d = RingBuf::new();
         assert!(d.mut_iter().next().is_none());
 
-        foreach i in range(0u, 3) {
+        for i in range(0u, 3) {
             d.push_front(i);
         }
 
-        foreach (i, elt) in d.mut_iter().enumerate() {
+        for (i, elt) in d.mut_iter().enumerate() {
             assert_eq!(*elt, 2 - i);
             *elt = i;
         }
@@ -670,11 +670,11 @@ fn test_mut_rev_iter() {
         let mut d = RingBuf::new();
         assert!(d.mut_rev_iter().next().is_none());
 
-        foreach i in range(0u, 3) {
+        for i in range(0u, 3) {
             d.push_front(i);
         }
 
-        foreach (i, elt) in d.mut_rev_iter().enumerate() {
+        for (i, elt) in d.mut_rev_iter().enumerate() {
             assert_eq!(*elt, i);
             *elt = i;
         }
@@ -698,7 +698,7 @@ fn test_from_iterator() {
 
         let mut seq = iterator::Counter::new(0u, 2).take_(256);
         let deq: RingBuf<uint> = seq.collect();
-        foreach (i, &x) in deq.iter().enumerate() {
+        for (i, &x) in deq.iter().enumerate() {
             assert_eq!(2*i, x);
         }
         assert_eq!(deq.len(), 256);
index ad8f9297bfbbad9a9e79080809d778e2d57c947e..c44505694b13d497c9d20460a58a0b5f6f889979 100644 (file)
@@ -443,7 +443,7 @@ fn decode(d: &mut D) -> @mut T {
 impl<'self, S:Encoder,T:Encodable<S>> Encodable<S> for &'self [T] {
     fn encode(&self, s: &mut S) {
         do s.emit_seq(self.len()) |s| {
-            foreach (i, e) in self.iter().enumerate() {
+            for (i, e) in self.iter().enumerate() {
                 s.emit_seq_elt(i, |s| e.encode(s))
             }
         }
@@ -453,7 +453,7 @@ fn encode(&self, s: &mut S) {
 impl<S:Encoder,T:Encodable<S>> Encodable<S> for ~[T] {
     fn encode(&self, s: &mut S) {
         do s.emit_seq(self.len()) |s| {
-            foreach (i, e) in self.iter().enumerate() {
+            for (i, e) in self.iter().enumerate() {
                 s.emit_seq_elt(i, |s| e.encode(s))
             }
         }
@@ -473,7 +473,7 @@ fn decode(d: &mut D) -> ~[T] {
 impl<S:Encoder,T:Encodable<S>> Encodable<S> for @[T] {
     fn encode(&self, s: &mut S) {
         do s.emit_seq(self.len()) |s| {
-            foreach (i, e) in self.iter().enumerate() {
+            for (i, e) in self.iter().enumerate() {
                 s.emit_seq_elt(i, |s| e.encode(s))
             }
         }
@@ -667,7 +667,7 @@ impl<
 > Encodable<S> for DList<T> {
     fn encode(&self, s: &mut S) {
         do s.emit_seq(self.len()) |s| {
-            foreach (i, e) in self.iter().enumerate() {
+            for (i, e) in self.iter().enumerate() {
                 s.emit_seq_elt(i, |s| e.encode(s));
             }
         }
@@ -678,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| {
-            foreach i in range(0u, len) {
+            for i in range(0u, len) {
                 list.push_back(d.read_seq_elt(i, |d| Decodable::decode(d)));
             }
         }
@@ -692,7 +692,7 @@ impl<
 > Encodable<S> for RingBuf<T> {
     fn encode(&self, s: &mut S) {
         do s.emit_seq(self.len()) |s| {
-            foreach (i, e) in self.iter().enumerate() {
+            for (i, e) in self.iter().enumerate() {
                 s.emit_seq_elt(i, |s| e.encode(s));
             }
         }
@@ -703,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| {
-            foreach i in range(0u, len) {
+            for i in range(0u, len) {
                 deque.push_back(d.read_seq_elt(i, |d| Decodable::decode(d)));
             }
         }
@@ -719,7 +719,7 @@ impl<
     fn encode(&self, e: &mut E) {
         do e.emit_map(self.len()) |e| {
             let mut i = 0;
-            foreach (key, val) in self.iter() {
+            for (key, val) in self.iter() {
                 e.emit_map_elt_key(i, |e| key.encode(e));
                 e.emit_map_elt_val(i, |e| val.encode(e));
                 i += 1;
@@ -736,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);
-            foreach i in range(0u, len) {
+            for 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);
@@ -753,7 +753,7 @@ impl<
     fn encode(&self, s: &mut S) {
         do s.emit_seq(self.len()) |s| {
             let mut i = 0;
-            foreach e in self.iter() {
+            for e in self.iter() {
                 s.emit_seq_elt(i, |s| e.encode(s));
                 i += 1;
             }
@@ -768,7 +768,7 @@ impl<
     fn decode(d: &mut D) -> HashSet<T> {
         do d.read_seq |d, len| {
             let mut set = HashSet::with_capacity(len);
-            foreach i in range(0u, len) {
+            for i in range(0u, len) {
                 set.insert(d.read_seq_elt(i, |d| Decodable::decode(d)));
             }
             set
@@ -800,7 +800,7 @@ impl<
     fn decode(d: &mut D) -> TrieMap<V> {
         do d.read_map |d, len| {
             let mut map = TrieMap::new();
-            foreach i in range(0u, len) {
+            for 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);
@@ -827,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();
-            foreach i in range(0u, len) {
+            for i in range(0u, len) {
                 set.insert(d.read_seq_elt(i, |d| Decodable::decode(d)));
             }
             set
@@ -843,7 +843,7 @@ impl<
     fn encode(&self, e: &mut E) {
         do e.emit_map(self.len()) |e| {
             let mut i = 0;
-            foreach (key, val) in self.iter() {
+            for (key, val) in self.iter() {
                 e.emit_map_elt_key(i, |e| key.encode(e));
                 e.emit_map_elt_val(i, |e| val.encode(e));
                 i += 1;
@@ -860,7 +860,7 @@ impl<
     fn decode(d: &mut D) -> TreeMap<K, V> {
         do d.read_map |d, len| {
             let mut map = TreeMap::new();
-            foreach i in range(0u, len) {
+            for 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);
@@ -877,7 +877,7 @@ impl<
     fn encode(&self, s: &mut S) {
         do s.emit_seq(self.len()) |s| {
             let mut i = 0;
-            foreach e in self.iter() {
+            for e in self.iter() {
                 s.emit_seq_elt(i, |s| e.encode(s));
                 i += 1;
             }
@@ -892,7 +892,7 @@ impl<
     fn decode(d: &mut D) -> TreeSet<T> {
         do d.read_seq |d, len| {
             let mut set = TreeSet::new();
-            foreach i in range(0u, len) {
+            for i in range(0u, len) {
                 set.insert(d.read_seq_elt(i, |d| Decodable::decode(d)));
             }
             set
@@ -912,7 +912,7 @@ pub trait EncoderHelpers {
 impl<S:Encoder> EncoderHelpers for S {
     fn emit_from_vec<T>(&mut self, v: &[T], f: &fn(&mut S, &T)) {
         do self.emit_seq(v.len()) |this| {
-            foreach (i, e) in v.iter().enumerate() {
+            for (i, e) in v.iter().enumerate() {
                 do this.emit_seq_elt(i) |this| {
                     f(this, e)
                 }
index 8b8e3faaf9a24da4c140990e92cc0a5aa6f2faae..52e6c1fcc1c90400d6e4aea17ea3056bcd3ac05f 100644 (file)
@@ -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;
-        foreach i in range(0u, self.v.len()) {
+        for i in range(0u, self.v.len()) {
             match self.v[i] {
                 Some(_) => sz += 1,
                 None => {}
@@ -46,11 +46,6 @@ fn clear(&mut self) { self.v.clear() }
 }
 
 impl<V> Map<uint, V> for SmallIntMap<V> {
-    /// Return true if the map contains a value for the specified key
-    fn contains_key(&self, key: &uint) -> bool {
-        self.find(key).is_some()
-    }
-
     /// Return a reference to the value corresponding to the key
     fn find<'a>(&'a self, key: &uint) -> Option<&'a V> {
         if *key < self.v.len() {
@@ -123,7 +118,7 @@ pub fn new() -> SmallIntMap<V> { SmallIntMap{v: ~[]} }
 
     /// Visit all key-value pairs in order
     pub fn each<'a>(&'a self, it: &fn(&uint, &'a V) -> bool) -> bool {
-        foreach i in range(0u, self.v.len()) {
+        for i in range(0u, self.v.len()) {
             match self.v[i] {
               Some(ref elt) => if !it(&i, elt) { return false; },
               None => ()
@@ -144,7 +139,7 @@ pub fn each_value<'a>(&'a self, blk: &fn(value: &'a V) -> bool) -> bool {
 
     /// Iterate over the map and mutate the contained values
     pub fn mutate_values(&mut self, it: &fn(&uint, &mut V) -> bool) -> bool {
-        foreach i in range(0, self.v.len()) {
+        for i in range(0, self.v.len()) {
             match self.v[i] {
               Some(ref mut elt) => if !it(&i, elt) { return false; },
               None => ()
@@ -446,7 +441,7 @@ fn test_mut_iterator() {
         assert!(m.insert(6, 10));
         assert!(m.insert(10, 11));
 
-        foreach (k, v) in m.mut_iter() {
+        for (k, v) in m.mut_iter() {
             *v += k as int;
         }
 
@@ -488,7 +483,7 @@ fn test_mut_rev_iterator() {
         assert!(m.insert(6, 10));
         assert!(m.insert(10, 11));
 
-        foreach (k, v) in m.mut_rev_iter() {
+        for (k, v) in m.mut_rev_iter() {
             *v += k as int;
         }
 
@@ -506,7 +501,7 @@ fn test_consume() {
         let mut m = SmallIntMap::new();
         m.insert(1, ~2);
         let mut called = false;
-        foreach (k, v) in m.consume() {
+        for (k, v) in m.consume() {
             assert!(!called);
             called = true;
             assert_eq!(k, 1);
index ffcfc500b5e1775a13779d11a7314dac2c75c0ae..8090dd26ef20a88e79de83dc632eee747feae6b0 100644 (file)
@@ -470,7 +470,7 @@ fn merge_lo(&mut self, array: &mut [T], base1: uint, len1: uint,
         assert!(len1 != 0 && len2 != 0 && base1+len1 == base2);
 
         let mut tmp = ~[];
-        foreach i in range(base1, base1+len1) {
+        for i in range(base1, base1+len1) {
             tmp.push(array[i].clone());
         }
 
@@ -580,7 +580,7 @@ fn merge_hi(&mut self, array: &mut [T], base1: uint, len1: uint,
         assert!(len1 != 1 && len2 != 0 && base1 + len1 == base2);
 
         let mut tmp = ~[];
-        foreach i in range(base2, base2+len2) {
+        for i in range(base2, base2+len2) {
             tmp.push(array[i].clone());
         }
 
@@ -732,7 +732,7 @@ fn copy_vec<T:Clone>(dest: &mut [T],
                     from: &[T]) {
     assert!(s1+from.len() <= dest.len());
 
-    foreach (i, v) in from.iter().enumerate() {
+    for (i, v) in from.iter().enumerate() {
         dest[s1+i] = (*v).clone();
     }
 }
@@ -842,7 +842,7 @@ fn test_simple() {
         let immut_names = names;
 
         let pairs = vec::zip_slice(expected, immut_names);
-        foreach p in pairs.iter() {
+        for p in pairs.iter() {
             let (a, b) = *p;
             debug!("%d %d", a, b);
             assert_eq!(a, b);
@@ -1054,7 +1054,7 @@ fn makeRange(n: uint) -> ~[uint] {
 
     fn tabulate_unique(lo: uint, hi: uint) {
         fn isSorted<T:Ord>(arr: &[T]) {
-            foreach i in range(0u, arr.len() - 1) {
+            for i in range(0u, arr.len() - 1) {
                 if arr[i] > arr[i+1] {
                     fail!("Array not sorted");
                 }
@@ -1063,7 +1063,7 @@ fn isSorted<T:Ord>(arr: &[T]) {
 
         let mut rng = rand::rng();
 
-        foreach i in range(lo, hi) {
+        for i in range(lo, hi) {
             let n = 1 << i;
             let mut arr: ~[float] = do vec::from_fn(n) |_i| {
                 rng.gen()
@@ -1125,7 +1125,7 @@ fn isSorted<T:Ord>(arr: &[T]) {
 
     fn tabulate_managed(lo: uint, hi: uint) {
         fn isSorted<T:Ord>(arr: &[@T]) {
-            foreach i in range(0u, arr.len() - 1) {
+            for i in range(0u, arr.len() - 1) {
                 if arr[i] > arr[i+1] {
                     fail!("Array not sorted");
                 }
@@ -1134,7 +1134,7 @@ fn isSorted<T:Ord>(arr: &[@T]) {
 
         let mut rng = rand::rng();
 
-        foreach i in range(lo, hi) {
+        for i in range(lo, hi) {
             let n = 1 << i;
             let arr: ~[@float] = do vec::from_fn(n) |_i| {
                 @rng.gen()
index 69d0a343424a75a2c77ace571f84590aa7a40a74..68d5af43688a241f9ff827ff6ebe31253f3a1976 100644 (file)
@@ -167,7 +167,7 @@ fn var(self) -> f64 {
         } else {
             let mean = self.mean();
             let mut v = 0.0;
-            foreach s in self.iter() {
+            for s in self.iter() {
                 let x = *s - mean;
                 v += x*x;
             }
@@ -254,7 +254,7 @@ pub fn winsorize(samples: &mut [f64], pct: f64) {
     sort::tim_sort(tmp);
     let lo = percentile_of_sorted(tmp, pct);
     let hi = percentile_of_sorted(tmp, 100.0-pct);
-    foreach samp in samples.mut_iter() {
+    for samp in samples.mut_iter() {
         if *samp > hi {
             *samp = hi
         } else if *samp < lo {
index 276f9cad7c6d0ac8dfcf8a4559d3dd03ea8d5102..63e371899a9bdbf8ed6c34ed4dbca5ec09eac33f 100644 (file)
@@ -893,13 +893,13 @@ fn test_mutex_cond_broadcast_helper(num_waiters: uint) {
         }
 
         // wait until all children get in the mutex
-        foreach port in ports.iter() { let _ = port.recv(); }
+        for port in ports.iter() { let _ = port.recv(); }
         do m.lock_cond |cond| {
             let num_woken = cond.broadcast();
             assert_eq!(num_woken, num_waiters);
         }
         // wait until all children wake up
-        foreach port in ports.iter() { let _ = port.recv(); }
+        for port in ports.iter() { let _ = port.recv(); }
     }
     #[test]
     fn test_mutex_cond_broadcast() {
@@ -991,7 +991,7 @@ fn test_mutex_killed_broadcast() {
                     }
                 }
             }
-            foreach p in sibling_convos.iter() {
+            for p in sibling_convos.iter() {
                 let _ = p.recv(); // wait for sibling to get in the mutex
             }
             do m2.lock { }
@@ -1001,7 +1001,7 @@ fn test_mutex_killed_broadcast() {
         assert!(result.is_err());
         // child task must have finished by the time try returns
         let r = p.recv();
-        foreach p in r.iter() { p.recv(); } // wait on all its siblings
+        for p in r.iter() { p.recv(); } // wait on all its siblings
         do m.lock_cond |cond| {
             let woken = cond.broadcast();
             assert_eq!(woken, 0);
@@ -1253,13 +1253,13 @@ fn lock_cond(x: &RWLock, downgrade: bool, blk: &fn(c: &Condvar)) {
         }
 
         // wait until all children get in the mutex
-        foreach port in ports.iter() { let _ = port.recv(); }
+        for port in ports.iter() { let _ = port.recv(); }
         do lock_cond(x, dg2) |cond| {
             let num_woken = cond.broadcast();
             assert_eq!(num_woken, num_waiters);
         }
         // wait until all children wake up
-        foreach port in ports.iter() { let _ = port.recv(); }
+        for port in ports.iter() { let _ = port.recv(); }
     }
     #[test]
     fn test_rwlock_cond_broadcast() {
index ddb3c31ec0576a24baad02b4769cebba9d16a0f4..17588b93ec41e2036d6968f69a18106d304ae09c 100644 (file)
@@ -35,7 +35,7 @@ pub struct TaskPool<T> {
 #[unsafe_destructor]
 impl<T> Drop for TaskPool<T> {
     fn drop(&self) {
-        foreach channel in self.channels.iter() {
+        for channel in self.channels.iter() {
             channel.send(Quit);
         }
     }
index 79b260036962038df2e4e8c07be2e4e8f99b7f2e..cb1bde140568667078bbb4d98b08798ea26e1dd6 100644 (file)
@@ -19,7 +19,7 @@
 /// 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();
-    foreach _ in range(0u, 1000) {
+    for _ in range(0u, 1000) {
         let p = tmpdir.push(r.gen_str(16) + suffix);
         if os::make_dir(&p, 0x1c0) { // 700
             return Some(p);
index d95e5d8d6d8e3cba2dfc80605af5d6f29abfa018..a7cace2344643a0c08fd230a2e0bf0adb0f906a8 100644 (file)
@@ -102,11 +102,11 @@ pub fn expand(cap: &[u8], params: &[Param], vars: &mut Variables)
         Number(0), Number(0), Number(0), Number(0), Number(0),
         Number(0), Number(0), Number(0), Number(0),
     ];
-    foreach (dst, src) in mparams.mut_iter().zip(params.iter()) {
+    for (dst, src) in mparams.mut_iter().zip(params.iter()) {
         *dst = (*src).clone();
     }
 
-    foreach c in cap.iter().transform(|&x| x) {
+    for c in cap.iter().transform(|&x| x) {
         let cur = c as char;
         let mut old_state = state;
         match state {
@@ -701,7 +701,7 @@ fn test_param_stack_failure_conditions() {
         let mut varstruct = Variables::new();
         let vars = &mut varstruct;
         let caps = ["%d", "%c", "%s", "%Pa", "%l", "%!", "%~"];
-        foreach cap in caps.iter() {
+        for cap in caps.iter() {
             let res = expand(cap.as_bytes(), [], vars);
             assert!(res.is_err(),
                     "Op %s succeeded incorrectly with 0 stack entries", *cap);
@@ -711,7 +711,7 @@ fn test_param_stack_failure_conditions() {
                     "Op %s failed with 1 stack entry: %s", *cap, res.unwrap_err());
         }
         let caps = ["%+", "%-", "%*", "%/", "%m", "%&", "%|", "%A", "%O"];
-        foreach cap in caps.iter() {
+        for cap in caps.iter() {
             let res = expand(cap.as_bytes(), [], vars);
             assert!(res.is_err(),
                     "Binop %s succeeded incorrectly with 0 stack entries", *cap);
@@ -732,7 +732,7 @@ fn test_push_bad_param() {
     #[test]
     fn test_comparison_ops() {
         let v = [('<', [1u8, 0u8, 0u8]), ('=', [0u8, 1u8, 0u8]), ('>', [0u8, 0u8, 1u8])];
-        foreach &(op, bs) in v.iter() {
+        for &(op, bs) in v.iter() {
             let s = fmt!("%%{1}%%{2}%%%c%%d", op);
             let res = expand(s.as_bytes(), [], &mut Variables::new());
             assert!(res.is_ok(), res.unwrap_err());
index 869f7d9df2ba66a630c694f5acbbd641b99a3f82..426cacb62faad0eaf7731c39a3df36beb2cad8a5 100644 (file)
@@ -222,7 +222,7 @@ pub fn parse(file: @Reader, longnames: bool) -> Result<~TermInfo, ~str> {
 
     let mut bools_map = HashMap::new();
     if bools_bytes != 0 {
-        foreach i in range(0, bools_bytes) {
+        for 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 {
-        foreach i in range(0, numbers_count) {
+        for 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);
-        foreach _ in range(0, string_offsets_count) {
+        for _ in range(0, string_offsets_count) {
             string_offsets.push(file.read_le_u16());
         }
 
@@ -272,7 +272,7 @@ pub fn parse(file: @Reader, longnames: bool) -> Result<~TermInfo, ~str> {
             return Err(~"error: hit EOF before end of string table");
         }
 
-        foreach (i, v) in string_offsets.iter().enumerate() {
+        for (i, v) in string_offsets.iter().enumerate() {
             let offset = *v;
             if offset == 0xFFFF { // non-entry
                 loop;
index 175cf836c477d5e5540e2f98c514130f9849f068..f7999050804c523ab6636efe2eb41871c345fc27 100644 (file)
@@ -35,7 +35,7 @@ pub fn get_dbpath_for_term(term: &str) -> Option<~path> {
                 dirs_to_search.push(homedir.unwrap().push(".terminfo")); // ncurses compatability
             }
             match getenv("TERMINFO_DIRS") {
-                Some(dirs) => foreach i in dirs.split_iter(':') {
+                Some(dirs) => for i in dirs.split_iter(':') {
                     if i == "" {
                         dirs_to_search.push(path("/usr/share/terminfo"));
                     } else {
@@ -54,7 +54,7 @@ pub fn get_dbpath_for_term(term: &str) -> Option<~path> {
     };
 
     // Look for the terminal in all of the search directories
-    foreach p in dirs_to_search.iter() {
+    for p in dirs_to_search.iter() {
         let newp = ~p.push_many(&[str::from_char(first_char), term.to_owned()]);
         if os::path_exists(p) && os::path_exists(newp) {
             return Some(newp);
index fd5d3fb21b195102236eb49db4bf5d2ed5f32328..02481693eb9713e0c34de059e9490e30838332c5 100644 (file)
@@ -429,11 +429,11 @@ pub fn write_log(&self, test: &TestDesc, result: &TestResult) {
     pub fn write_failures(&self) {
         self.out.write_line("\nfailures:");
         let mut failures = ~[];
-        foreach f in self.failures.iter() {
+        for f in self.failures.iter() {
             failures.push(f.name.to_str());
         }
         sort::tim_sort(failures);
-        foreach name in failures.iter() {
+        for name in failures.iter() {
             self.out.write_line(fmt!("    %s", name.to_str()));
         }
     }
@@ -445,7 +445,7 @@ pub fn write_metric_diff(&self, diff: &MetricDiff) {
         let mut added = 0;
         let mut removed = 0;
 
-        foreach (k, v) in diff.iter() {
+        for (k, v) in diff.iter() {
             match *v {
                 LikelyNoise => noise += 1,
                 MetricAdded => {
@@ -565,7 +565,7 @@ fn callback(event: &TestEvent, st: &mut ConsoleTestState) {
                     TrIgnored => st.ignored += 1,
                     TrMetrics(mm) => {
                         let tname = test.name.to_str();
-                        foreach (k,v) in mm.iter() {
+                        for (k,v) in mm.iter() {
                             st.metrics.insert_metric(tname + "." + *k,
                                                      v.value, v.noise);
                         }
@@ -699,7 +699,7 @@ fn run_tests(opts: &TestOpts,
 
     // All benchmarks run at the end, in serial.
     // (this includes metric fns)
-    foreach b in filtered_benchs_and_metrics.consume_iter() {
+    for b in filtered_benchs_and_metrics.consume_iter() {
         callback(TeWait(b.desc.clone()));
         run_test(!opts.run_benchmarks, b, ch.clone());
         let (test, result) = p.recv();
@@ -887,7 +887,7 @@ pub fn save(&self, p: &Path) {
     pub fn compare_to_old(&self, old: &MetricMap,
                           noise_pct: Option<f64>) -> MetricDiff {
         let mut diff : MetricDiff = TreeMap::new();
-        foreach (k, vold) in old.iter() {
+        for (k, vold) in old.iter() {
             let r = match self.find(k) {
                 None => MetricRemoved,
                 Some(v) => {
@@ -924,7 +924,7 @@ pub fn compare_to_old(&self, old: &MetricMap,
             };
             diff.insert((*k).clone(), r);
         }
-        foreach (k, _) in self.iter() {
+        for (k, _) in self.iter() {
             if !diff.contains_key(k) {
                 diff.insert((*k).clone(), MetricAdded);
             }
@@ -990,7 +990,7 @@ impl BenchHarness {
     pub fn iter(&mut self, inner:&fn()) {
         self.ns_start = precise_time_ns();
         let k = self.iterations;
-        foreach _ in range(0u64, k) {
+        for _ in range(0u64, k) {
             inner();
         }
         self.ns_end = precise_time_ns();
@@ -1039,7 +1039,7 @@ pub fn auto_bench(&mut self, f: &fn(&mut BenchHarness)) -> stats::Summary {
         loop {
             let loop_start = precise_time_ns();
 
-            foreach p in samples.mut_iter() {
+            for p in samples.mut_iter() {
                 self.bench_n(n as u64, |x| f(x));
                 *p = self.ns_per_iter() as f64;
             };
@@ -1047,7 +1047,7 @@ pub fn auto_bench(&mut self, f: &fn(&mut BenchHarness)) -> stats::Summary {
             stats::winsorize(samples, 5.0);
             let summ = stats::Summary::new(samples);
 
-            foreach p in samples.mut_iter() {
+            for p in samples.mut_iter() {
                 self.bench_n(5 * n as u64, |x| f(x));
                 *p = self.ns_per_iter() as f64;
             };
@@ -1287,7 +1287,7 @@ pub fn sort_tests() {
         {
             fn testfn() { }
             let mut tests = ~[];
-            foreach name in names.iter() {
+            for name in names.iter() {
                 let test = TestDescAndFn {
                     desc: TestDesc {
                         name: DynTestName((*name).clone()),
@@ -1313,7 +1313,7 @@ fn testfn() { }
 
         let pairs = vec::zip(expected, filtered);
 
-        foreach p in pairs.iter() {
+        for p in pairs.iter() {
             match *p {
                 (ref a, ref b) => {
                     assert!(*a == b.desc.name.to_str());
index 9cc5d3ba6cca73b70cede4f5909aa33ae28b5adf..52feb18c7581a4a8d846d5fdbb73c7b573fc95a0 100644 (file)
@@ -257,7 +257,7 @@ pub fn rfc3339(&self) -> ~str {
 priv fn do_strptime(s: &str, format: &str) -> Result<Tm, ~str> {
     fn match_str(s: &str, pos: uint, needle: &str) -> bool {
         let mut i = pos;
-        foreach ch in needle.byte_iter() {
+        for ch in needle.byte_iter() {
             if s[i] != ch {
                 return false;
             }
@@ -1040,7 +1040,7 @@ fn test(s: &str, format: &str) -> bool {
             ~"Friday",
             ~"Saturday"
         ];
-        foreach day in days.iter() {
+        for day in days.iter() {
             assert!(test(*day, "%A"));
         }
 
@@ -1053,7 +1053,7 @@ fn test(s: &str, format: &str) -> bool {
             ~"Fri",
             ~"Sat"
         ];
-        foreach day in days.iter() {
+        for day in days.iter() {
             assert!(test(*day, "%a"));
         }
 
@@ -1071,7 +1071,7 @@ fn test(s: &str, format: &str) -> bool {
             ~"November",
             ~"December"
         ];
-        foreach day in months.iter() {
+        for day in months.iter() {
             assert!(test(*day, "%B"));
         }
 
@@ -1089,7 +1089,7 @@ fn test(s: &str, format: &str) -> bool {
             ~"Nov",
             ~"Dec"
         ];
-        foreach day in months.iter() {
+        for day in months.iter() {
             assert!(test(*day, "%b"));
         }
 
index 82c7bf6caf17d1061bbdfc7971e2f7ca40692126..1736e62aee96b1d63a9a73cf331ca8e7b3f6d0e1 100644 (file)
@@ -47,7 +47,7 @@ fn eq(&self, other: &TreeMap<K, V>) -> bool {
         } else {
             let mut x = self.iter();
             let mut y = other.iter();
-            foreach _ in range(0u, self.len()) {
+            for _ in range(0u, self.len()) {
                 if x.next().unwrap() != y.next().unwrap() {
                     return false
                 }
@@ -65,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());
-    foreach _ in range(0u, num::min(a_len, b_len)) {
+    for _ 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; }
@@ -105,11 +105,6 @@ fn clear(&mut self) {
 }
 
 impl<K: TotalOrd, V> Map<K, V> for TreeMap<K, V> {
-    /// Return true if the map contains a value for the specified key
-    fn contains_key(&self, key: &K) -> bool {
-        self.find(key).is_some()
-    }
-
     /// Return a reference to the value corresponding to the key
     fn find<'a>(&'a self, key: &K) -> Option<&'a V> {
         let mut current: &'a Option<~TreeNode<K, V>> = &self.root;
@@ -674,7 +669,7 @@ fn remove<K: TotalOrd, V>(node: &mut Option<~TreeNode<K, V>>,
     fn heir_swap<K: TotalOrd, V>(node: &mut ~TreeNode<K, V>,
                                  child: &mut Option<~TreeNode<K, V>>) {
         // *could* be done without recursion, but it won't borrow check
-        foreach x in child.mut_iter() {
+        for x in child.mut_iter() {
             if x.right.is_some() {
                 heir_swap(node, &mut x.right);
             } else {
@@ -729,18 +724,18 @@ fn heir_swap<K: TotalOrd, V>(node: &mut ~TreeNode<K, V>,
                 save.level -= 1;
 
                 if right_level > save.level {
-                    foreach x in save.right.mut_iter() { x.level = save.level }
+                    for x in save.right.mut_iter() { x.level = save.level }
                 }
 
                 skew(save);
 
-                foreach right in save.right.mut_iter() {
+                for right in save.right.mut_iter() {
                     skew(right);
-                    foreach x in right.right.mut_iter() { skew(x) }
+                    for x in right.right.mut_iter() { skew(x) }
                 }
 
                 split(save);
-                foreach x in save.right.mut_iter() { split(x) }
+                for x in save.right.mut_iter() { split(x) }
             }
 
             return ret;
@@ -763,7 +758,7 @@ fn from_iterator(iter: &mut T) -> TreeMap<K, V> {
 impl<K: TotalOrd, V, T: Iterator<(K, V)>> Extendable<(K, V), T> for TreeMap<K, V> {
     #[inline]
     fn extend(&mut self, iter: &mut T) {
-        foreach (k, v) in *iter {
+        for (k, v) in *iter {
             self.insert(k, v);
         }
     }
@@ -780,7 +775,7 @@ pub fn from_iterator(iter: &mut Iter) -> TreeSet<T> {
 impl<T: TotalOrd, Iter: Iterator<T>> Extendable<T, Iter> for TreeSet<T> {
     #[inline]
     fn extend(&mut self, iter: &mut Iter) {
-        foreach elem in *iter {
+        for elem in *iter {
             self.insert(elem);
         }
     }
@@ -863,13 +858,13 @@ fn u8_map() {
     fn check_equal<K: Eq + TotalOrd, V: Eq>(ctrl: &[(K, V)],
                                             map: &TreeMap<K, V>) {
         assert_eq!(ctrl.is_empty(), map.is_empty());
-        foreach x in ctrl.iter() {
+        for x in ctrl.iter() {
             let &(ref k, ref v) = x;
             assert!(map.find(k).unwrap() == v)
         }
-        foreach (map_k, map_v) in map.iter() {
+        for (map_k, map_v) in map.iter() {
             let mut found = false;
-            foreach x in ctrl.iter() {
+            for x in ctrl.iter() {
                 let &(ref ctrl_k, ref ctrl_v) = x;
                 if *map_k == *ctrl_k {
                     assert!(*map_v == *ctrl_v);
@@ -983,7 +978,7 @@ fn test_iterator() {
         assert!(m.insert(1, 2));
 
         let mut n = 0;
-        foreach (k, v) in m.iter() {
+        for (k, v) in m.iter() {
             assert_eq!(*k, n);
             assert_eq!(*v, n * 2);
             n += 1;
@@ -1091,7 +1086,7 @@ fn test_lazy_iterator() {
                         (&x5, &y5)];
         let mut i = 0;
 
-        foreach x in b {
+        for x in b {
             assert_eq!(expected[i], x);
             i += 1;
 
@@ -1100,7 +1095,7 @@ fn test_lazy_iterator() {
             }
         }
 
-        foreach x in b {
+        for x in b {
             assert_eq!(expected[i], x);
             i += 1;
         }
@@ -1112,7 +1107,7 @@ fn test_from_iter() {
 
         let map: TreeMap<int, int> = xs.iter().transform(|&x| x).collect();
 
-        foreach &(k, v) in xs.iter() {
+        for &(k, v) in xs.iter() {
             assert_eq!(map.find(&k), Some(&v));
         }
     }
@@ -1260,7 +1255,7 @@ fn test_iterator() {
         assert!(m.insert(1));
 
         let mut n = 0;
-        foreach x in m.iter() {
+        for x in m.iter() {
             printfln!(x);
             assert_eq!(*x, n);
             n += 1
@@ -1290,8 +1285,8 @@ fn check(a: &[int], b: &[int], expected: &[int],
         let mut set_a = TreeSet::new();
         let mut set_b = TreeSet::new();
 
-        foreach x in a.iter() { assert!(set_a.insert(*x)) }
-        foreach y in b.iter() { assert!(set_b.insert(*y)) }
+        for x in a.iter() { assert!(set_a.insert(*x)) }
+        for y in b.iter() { assert!(set_b.insert(*y)) }
 
         let mut i = 0;
         do f(&set_a, &set_b) |x| {
@@ -1413,7 +1408,7 @@ fn test_from_iter() {
 
         let set: TreeSet<int> = xs.iter().transform(|&x| x).collect();
 
-        foreach x in xs.iter() {
+        for x in xs.iter() {
             assert!(set.contains(x));
         }
     }
index 9b4bf9d0ad4d8ba7e962351275bd2e11e2858240..523c3521f866519fa2c8e188fe5752f9b2bbebb1 100644 (file)
@@ -206,10 +206,10 @@ pub fn encode_form_urlencoded(m: &HashMap<~str, ~[~str]>) -> ~str {
     let mut out = ~"";
     let mut first = true;
 
-    foreach (key, values) in m.iter() {
+    for (key, values) in m.iter() {
         let key = encode_plus(*key);
 
-        foreach value in values.iter() {
+        for value in values.iter() {
             if first {
                 first = false;
             } else {
@@ -331,7 +331,7 @@ fn userinfo_to_str(userinfo: &UserInfo) -> ~str {
 fn query_from_str(rawquery: &str) -> Query {
     let mut query: Query = ~[];
     if !rawquery.is_empty() {
-        foreach p in rawquery.split_iter('&') {
+        for p in rawquery.split_iter('&') {
             let (k, v) = split_char_first(p, '=');
             query.push((decode_component(k), decode_component(v)));
         };
@@ -341,7 +341,7 @@ fn query_from_str(rawquery: &str) -> Query {
 
 pub fn query_to_str(query: &Query) -> ~str {
     let mut strvec = ~[];
-    foreach kv in query.iter() {
+    for kv in query.iter() {
         match kv {
             &(ref k, ref v) => {
                 strvec.push(fmt!("%s=%s",
@@ -356,7 +356,7 @@ pub fn query_to_str(query: &Query) -> ~str {
 
 // returns the scheme and the rest of the url, or a parsing error
 pub fn get_scheme(rawurl: &str) -> Result<(~str, ~str), ~str> {
-    foreach (i,c) in rawurl.iter().enumerate() {
+    for (i,c) in rawurl.iter().enumerate() {
         match c {
           'A' .. 'Z' | 'a' .. 'z' => loop,
           '0' .. '9' | '+' | '-' | '.' => {
@@ -418,7 +418,7 @@ enum State {
     let mut begin = 2;
     let mut end = len;
 
-    foreach (i,c) in rawurl.iter().enumerate() {
+    for (i,c) in rawurl.iter().enumerate() {
         if i < 2 { loop; } // ignore the leading //
 
         // deal with input class first
@@ -563,7 +563,7 @@ fn get_path(rawurl: &str, authority: bool) ->
     Result<(~str, ~str), ~str> {
     let len = rawurl.len();
     let mut end = len;
-    foreach (i,c) in rawurl.iter().enumerate() {
+    for (i,c) in rawurl.iter().enumerate() {
         match c {
           'A' .. 'Z' | 'a' .. 'z' | '0' .. '9' | '&' |'\'' | '(' | ')' | '.'
           | '@' | ':' | '%' | '/' | '+' | '!' | '*' | ',' | ';' | '='
index d28407a984a019b8f4bb9183a8e93f38c59dd808..0256519abb7e835c257cd29943140cfdfa4aeb42 100644 (file)
@@ -286,7 +286,7 @@ fn is_fresh(&self, cat: &str, kind: &str,
     }
 
     fn all_fresh(&self, cat: &str, map: &WorkMap) -> bool {
-        foreach (k, v) in map.iter() {
+        for (k, v) in map.iter() {
             if ! self.is_fresh(cat, k.kind, k.name, *v) {
                 return false;
             }
index 0d2148c4a12337718cca2f49895112e65bb7e4d4..1ac8146bb589aab17141eddb25a67090331fe0d4 100644 (file)
@@ -215,7 +215,7 @@ fn usage() {
         \n"
     );
 
-    foreach command in COMMANDS.iter() {
+    for command in COMMANDS.iter() {
         let padding = " ".repeat(INDENT - command.cmd.len());
         printfln!("    %s%s%s", command.cmd, padding, command.usage_line);
     }
@@ -240,7 +240,7 @@ pub fn main() {
 
     if !args.is_empty() {
         let r = find_cmd(*args.head());
-        foreach command in r.iter() {
+        for command in r.iter() {
             let result = do_command(command, args.tail());
             match result {
                 Valid(exit_code) => unsafe { exit(exit_code.to_i32()) },
index 3d02d50b49125b0315ef1f9bddf1efe28a6063c2..0f7e1413bc53ed711d0a49e92d23b8acc6d030ca 100644 (file)
@@ -143,7 +143,7 @@ pub fn exec(sess: Session,
 
             let cstore = sess.cstore;
             let r = cstore::get_used_crate_files(cstore);
-            foreach cratepath in r.iter() {
+            for cratepath in r.iter() {
                 let path = cratepath.to_str();
 
                 debug!("linking: %s", path);
@@ -510,7 +510,7 @@ fn provided_link_metas(sess: Session, c: &ast::Crate) ->
         let mut cmh_items = ~[];
         let linkage_metas = attr::find_linkage_metas(c.attrs);
         attr::require_unique_names(sess.diagnostic(), linkage_metas);
-        foreach meta in linkage_metas.iter() {
+        for meta in linkage_metas.iter() {
             match meta.name_str_pair() {
                 Some((n, value)) if "name" == n => name = Some(value),
                 Some((n, value)) if "vers" == n => vers = Some(value),
@@ -550,7 +550,7 @@ fn hash(symbol_hasher: &mut hash::State, m: &@ast::MetaItem) {
               }
               ast::MetaList(name, ref mis) => {
                 write_string(symbol_hasher, len_and_str(name));
-                foreach m_ in mis.iter() {
+                for m_ in mis.iter() {
                     hash(symbol_hasher, m_);
                 }
               }
@@ -558,11 +558,11 @@ fn hash(symbol_hasher: &mut hash::State, m: &@ast::MetaItem) {
         }
 
         symbol_hasher.reset();
-        foreach m in cmh_items.iter() {
+        for m in cmh_items.iter() {
             hash(symbol_hasher, m);
         }
 
-        foreach dh in dep_hashes.iter() {
+        for dh in dep_hashes.iter() {
             write_string(symbol_hasher, len_and_str(*dh));
         }
 
@@ -668,7 +668,7 @@ pub fn get_symbol_hash(ccx: &mut CrateContext, t: ty::t) -> @str {
 // gas accepts the following characters in symbols: a-z, A-Z, 0-9, ., _, $
 pub fn sanitize(s: &str) -> ~str {
     let mut result = ~"";
-    foreach c in s.iter() {
+    for c in s.iter() {
         match c {
             // Escape these with $ sequences
             '@' => result.push_str("$SP$"),
@@ -715,7 +715,7 @@ pub fn mangle(sess: Session, ss: path) -> ~str {
 
     let mut n = ~"_ZN"; // Begin name-sequence.
 
-    foreach s in ss.iter() {
+    for s in ss.iter() {
         match *s {
             path_name(s) | path_mod(s) => {
                 let sani = sanitize(sess.str_of(s));
@@ -908,7 +908,7 @@ fn unlib(config: @session::config, stem: ~str) -> ~str {
 
     let cstore = sess.cstore;
     let r = cstore::get_used_crate_files(cstore);
-    foreach cratepath in r.iter() {
+    for cratepath in r.iter() {
         if cratepath.filetype() == Some(~".rlib") {
             args.push(cratepath.to_str());
             loop;
@@ -920,12 +920,12 @@ fn unlib(config: @session::config, stem: ~str) -> ~str {
     }
 
     let ula = cstore::get_used_link_args(cstore);
-    foreach arg in ula.iter() { args.push(arg.to_owned()); }
+    for arg in ula.iter() { args.push(arg.to_owned()); }
 
     // Add all the link args for external crates.
     do cstore::iter_crate_data(cstore) |crate_num, _| {
         let link_args = csearch::get_link_args_for_crate(cstore, crate_num);
-        foreach link_arg in link_args.consume_iter() {
+        for link_arg in link_args.consume_iter() {
             args.push(link_arg);
         }
     }
@@ -938,13 +938,13 @@ fn unlib(config: @session::config, stem: ~str) -> ~str {
     // to be found at compile time so it is still entirely up to outside
     // forces to make sure that library can be found at runtime.
 
-    foreach path in sess.opts.addl_lib_search_paths.iter() {
+    for path in sess.opts.addl_lib_search_paths.iter() {
         args.push(~"-L" + path.to_str());
     }
 
     // The names of the extern libraries
     let used_libs = cstore::get_used_libraries(cstore);
-    foreach l in used_libs.iter() { args.push(~"-l" + *l); }
+    for l in used_libs.iter() { args.push(~"-l" + *l); }
 
     if *sess.building_library {
         args.push(lib_cmd);
index eb70a811fe00b4ac31961d551909d13fd30cabcb..c5b60c654daec15d514bd366b5c4c469e2d91106 100644 (file)
@@ -98,7 +98,6 @@ pub fn create_standard_passes(level: OptLevel) -> ~[~str] {
         passes.push(~"sroa");
         passes.push(~"domtree");
         passes.push(~"early-cse");
-        passes.push(~"simplify-libcalls");
         passes.push(~"lazy-value-info");
         passes.push(~"jump-threading");
         passes.push(~"correlated-propagation");
@@ -165,7 +164,7 @@ pub fn create_standard_passes(level: OptLevel) -> ~[~str] {
 }
 
 pub fn populate_pass_manager(sess: Session, pm: &mut PassManager, pass_list:&[~str]) {
-    foreach nm in pass_list.iter() {
+    for nm in pass_list.iter() {
         match create_pass(*nm) {
             Some(p) => pm.add_pass(p),
             None    => sess.warn(fmt!("Unknown pass %s", *nm))
@@ -190,15 +189,15 @@ pub fn list_passes() {
     io::println("\nAvailable Passes:");
 
     io::println("\nAnalysis Passes:");
-    foreach &(name, desc) in analysis_passes.iter() {
+    for &(name, desc) in analysis_passes.iter() {
         printfln!("    %-30s -- %s", name, desc);
     }
     io::println("\nTransformation Passes:");
-    foreach &(name, desc) in transform_passes.iter() {
+    for &(name, desc) in transform_passes.iter() {
         printfln!("    %-30s -- %s", name, desc);
     }
     io::println("\nUtility Passes:");
-    foreach &(name, desc) in utility_passes.iter() {
+    for &(name, desc) in utility_passes.iter() {
         printfln!("    %-30s -- %s", name, desc);
     }
 }
@@ -316,7 +315,7 @@ pub fn list_passes() {
 fn passes_exist() {
     let mut failed = ~[];
     unsafe { llvm::LLVMInitializePasses(); }
-    foreach &(name,_) in analysis_passes.iter() {
+    for &(name,_) in analysis_passes.iter() {
         let pass = create_pass(name);
         if !pass.is_some() {
             failed.push(name);
@@ -324,7 +323,7 @@ fn passes_exist() {
             unsafe { llvm::LLVMDestroyPass(pass.get()) }
         }
     }
-    foreach &(name,_) in transform_passes.iter() {
+    for &(name,_) in transform_passes.iter() {
         let pass = create_pass(name);
         if !pass.is_some() {
             failed.push(name);
@@ -332,7 +331,7 @@ fn passes_exist() {
             unsafe { llvm::LLVMDestroyPass(pass.get()) }
         }
     }
-    foreach &(name,_) in utility_passes.iter() {
+    for &(name,_) in utility_passes.iter() {
         let pass = create_pass(name);
         if !pass.is_some() {
             failed.push(name);
@@ -343,7 +342,7 @@ fn passes_exist() {
 
     if failed.len() > 0 {
         io::println("Some passes don't exist:");
-        foreach &n in failed.iter() {
+        for &n in failed.iter() {
             printfln!("    %s", n);
         }
         fail!();
index 22ef2e2278c4db7933b4f211b4ace835c69e1c01..571721ed40cee8357f94c34c9f8810263e2fcd73 100644 (file)
@@ -63,7 +63,7 @@ fn get_rpaths(os: session::os,
     debug!("sysroot: %s", sysroot.to_str());
     debug!("output: %s", output.to_str());
     debug!("libs:");
-    foreach libpath in libs.iter() {
+    for libpath in libs.iter() {
         debug!("    %s", libpath.to_str());
     }
     debug!("target_triple: %s", target_triple);
@@ -82,7 +82,7 @@ fn get_rpaths(os: session::os,
 
     fn log_rpaths(desc: &str, rpaths: &[Path]) {
         debug!("%s rpaths:", desc);
-        foreach rpath in rpaths.iter() {
+        for rpath in rpaths.iter() {
             debug!("    %s", rpath.to_str());
         }
     }
@@ -149,7 +149,7 @@ pub fn get_relative_to(abs1: &Path, abs2: &Path) -> Path {
     }
 
     let mut path = ~[];
-    foreach _ in range(start_idx, len1 - 1) { path.push(~".."); };
+    for _ in range(start_idx, len1 - 1) { path.push(~".."); };
 
     path.push_all(split2.slice(start_idx, len2 - 1));
 
@@ -182,7 +182,7 @@ pub fn get_install_prefix_rpath(target_triple: &str) -> Path {
 pub fn minimize_rpaths(rpaths: &[Path]) -> ~[Path] {
     let mut set = HashSet::new();
     let mut minimized = ~[];
-    foreach rpath in rpaths.iter() {
+    for rpath in rpaths.iter() {
         if set.insert(rpath.to_str()) {
             minimized.push(rpath.clone());
         }
index f4fb65c2a836c52b624ec5ca6e3e7b6279d3c4d3..1c983057dba0fea980ca8d745a5401104040f5ed 100644 (file)
@@ -508,7 +508,7 @@ fn ann_identified_post(node: pprust::ann_node) {
 }
 
 pub fn get_os(triple: &str) -> Option<session::os> {
-    foreach &(name, os) in os_names.iter() {
+    for &(name, os) in os_names.iter() {
         if triple.contains(name) { return Some(os) }
     }
     None
@@ -522,7 +522,7 @@ pub fn get_os(triple: &str) -> Option<session::os> {
     ("freebsd", session::os_freebsd)];
 
 pub fn get_arch(triple: &str) -> Option<abi::Architecture> {
-    foreach &(arch, abi) in architecture_abis.iter() {
+    for &(arch, abi) in architecture_abis.iter() {
         if triple.contains(arch) { return Some(abi) }
     }
     None
@@ -611,7 +611,7 @@ pub fn build_session_options(binary: @str,
                        lint::deny, lint::forbid];
     let mut lint_opts = ~[];
     let lint_dict = lint::get_lint_dict();
-    foreach level in lint_levels.iter() {
+    for level in lint_levels.iter() {
         let level_name = lint::level_to_str(*level);
 
         // FIXME: #4318 Instead of to_ascii and to_str_ascii, could use
@@ -620,7 +620,7 @@ pub fn build_session_options(binary: @str,
         let level_short = level_short.to_ascii().to_upper().to_str_ascii();
         let flags = vec::append(getopts::opt_strs(matches, level_short),
                                 getopts::opt_strs(matches, level_name));
-        foreach lint_name in flags.iter() {
+        for lint_name in flags.iter() {
             let lint_name = lint_name.replace("-", "_");
             match lint_dict.find_equiv(&lint_name) {
               None => {
@@ -637,9 +637,9 @@ pub fn build_session_options(binary: @str,
     let mut debugging_opts = 0u;
     let debug_flags = getopts::opt_strs(matches, "Z");
     let debug_map = session::debugging_opts_map();
-    foreach debug_flag in debug_flags.iter() {
+    for debug_flag in debug_flags.iter() {
         let mut this_bit = 0u;
-        foreach tuple in debug_map.iter() {
+        for tuple in debug_map.iter() {
             let (name, bit) = match *tuple { (ref a, _, b) => (a, b) };
             if name == debug_flag { this_bit = bit; break; }
         }
index 2730858d498bbcdf0bd3387e20ee518eba499b52..8ca68251cb8910265e3b0fa7f22e271908188cc7 100644 (file)
@@ -380,7 +380,7 @@ fn is_extra(cx: &TestCtxt) -> bool {
 fn mk_test_descs(cx: &TestCtxt) -> @ast::expr {
     debug!("building test vector from %u tests", cx.testfns.len());
     let mut descs = ~[];
-    foreach test in cx.testfns.iter() {
+    for test in cx.testfns.iter() {
         descs.push(mk_test_desc_and_fn_rec(cx, test));
     }
 
index 98f32af2f30aa1a41bacd1904c137e2016804437..dfca804939e6d747018bbc28856a3c12572ac02c 100644 (file)
@@ -59,35 +59,37 @@ pub enum Linkage {
 
 #[deriving(Clone)]
 pub enum Attribute {
-    ZExtAttribute = 1,
-    SExtAttribute = 2,
-    NoReturnAttribute = 4,
-    InRegAttribute = 8,
-    StructRetAttribute = 16,
-    NoUnwindAttribute = 32,
-    NoAliasAttribute = 64,
-    ByValAttribute = 128,
-    NestAttribute = 256,
-    ReadNoneAttribute = 512,
-    ReadOnlyAttribute = 1024,
-    NoInlineAttribute = 2048,
-    AlwaysInlineAttribute = 4096,
-    OptimizeForSizeAttribute = 8192,
-    StackProtectAttribute = 16384,
-    StackProtectReqAttribute = 32768,
-    // 31 << 16
-    AlignmentAttribute = 2031616,
-    NoCaptureAttribute = 2097152,
-    NoRedZoneAttribute = 4194304,
-    NoImplicitFloatAttribute = 8388608,
-    NakedAttribute = 16777216,
-    InlineHintAttribute = 33554432,
-    // 7 << 26
-    StackAttribute = 469762048,
-    ReturnsTwiceAttribute = 536870912,
-    // 1 << 30
-    UWTableAttribute = 1073741824,
-    NonLazyBindAttribute = 2147483648,
+    ZExtAttribute = 1 << 0,
+    SExtAttribute = 1 << 1,
+    NoReturnAttribute = 1 << 2,
+    InRegAttribute = 1 << 3,
+    StructRetAttribute = 1 << 4,
+    NoUnwindAttribute = 1 << 5,
+    NoAliasAttribute = 1 << 6,
+    ByValAttribute = 1 << 7,
+    NestAttribute = 1 << 8,
+    ReadNoneAttribute = 1 << 9,
+    ReadOnlyAttribute = 1 << 10,
+    NoInlineAttribute = 1 << 11,
+    AlwaysInlineAttribute = 1 << 12,
+    OptimizeForSizeAttribute = 1 << 13,
+    StackProtectAttribute = 1 << 14,
+    StackProtectReqAttribute = 1 << 15,
+    AlignmentAttribute = 31 << 16,
+    NoCaptureAttribute = 1 << 21,
+    NoRedZoneAttribute = 1 << 22,
+    NoImplicitFloatAttribute = 1 << 23,
+    NakedAttribute = 1 << 24,
+    InlineHintAttribute = 1 << 25,
+    StackAttribute = 7 << 26,
+    ReturnsTwiceAttribute = 1 << 29,
+    UWTableAttribute = 1 << 30,
+    NonLazyBindAttribute = 1 << 31,
+
+    // Not added to LLVM yet, so may need to stay updated if LLVM changes.
+    // FIXME(#8199): if this changes, be sure to change the relevant constant
+    //               down below
+    // FixedStackSegment = 1 << 41,
 }
 
 // enum for the LLVM IntPredicate type
@@ -1541,7 +1543,8 @@ pub fn LLVMBuildAtomicRMW(B: BuilderRef,
                                   Op: AtomicBinOp,
                                   LHS: ValueRef,
                                   RHS: ValueRef,
-                                  Order: AtomicOrdering)
+                                  Order: AtomicOrdering,
+                                  SingleThreaded: Bool)
                                   -> ValueRef;
 
         pub fn LLVMBuildAtomicFence(B: BuilderRef, Order: AtomicOrdering);
@@ -2106,6 +2109,28 @@ pub fn ConstFCmp(Pred: RealPredicate, V1: ValueRef, V2: ValueRef) -> ValueRef {
         llvm::LLVMConstFCmp(Pred as c_ushort, V1, V2)
     }
 }
+
+pub fn SetFunctionAttribute(Fn: ValueRef, attr: Attribute) {
+    unsafe {
+        let attr = attr as u64;
+        let lower = attr & 0xffffffff;
+        let upper = (attr >> 32) & 0xffffffff;
+        llvm::LLVMAddFunctionAttr(Fn, lower as c_uint, upper as c_uint);
+    }
+}
+
+// FIXME(#8199): this shouldn't require this hackery. On i686
+//               (FixedStackSegment as u64) will return 0 instead of 1 << 41.
+//               Furthermore, if we use a match of any sort then an LLVM
+//               assertion is generated!
+pub fn SetFixedStackSegmentAttribute(Fn: ValueRef) {
+    unsafe {
+        let attr = 1u64 << 41;
+        let lower = attr & 0xffffffff;
+        let upper = (attr >> 32) & 0xffffffff;
+        llvm::LLVMAddFunctionAttr(Fn, lower as c_uint, upper as c_uint);
+    }
+}
 /* Memory-managed object interface to type handles. */
 
 pub struct TypeNames {
index 644f4a78349ba04ae2acdaa34711283ab6599a7b..d8f142288243508b1c03c4f08e2ae4f7ba5c4a97 100644 (file)
@@ -65,7 +65,7 @@ struct cache_entry {
 
 fn dump_crates(crate_cache: &[cache_entry]) {
     debug!("resolved crates:");
-    foreach entry in crate_cache.iter() {
+    for entry in crate_cache.iter() {
         debug!("cnum: %?", entry.cnum);
         debug!("span: %?", entry.span);
         debug!("hash: %?", entry.hash);
@@ -97,7 +97,7 @@ fn warn_if_multiple_versions(e: @mut Env,
         if matches.len() != 1u {
             diag.handler().warn(
                 fmt!("using multiple versions of crate `%s`", name));
-            foreach match_ in matches.iter() {
+            for match_ in matches.iter() {
                 diag.span_note(match_.span, "used here");
                 let attrs = ~[
                     attr::mk_attr(attr::mk_list_item(@"link",
@@ -125,7 +125,7 @@ struct Env {
 fn visit_crate(e: &Env, c: &ast::Crate) {
     let cstore = e.cstore;
 
-    foreach a in c.attrs.iter().filter(|m| "link_args" == m.name()) {
+    for a in c.attrs.iter().filter(|m| "link_args" == m.name()) {
         match a.value_str() {
           Some(ref linkarg) => {
             cstore::add_used_link_args(cstore, *linkarg);
@@ -194,7 +194,7 @@ fn visit_item(e: &Env, i: @ast::item) {
             ast::anonymous => { /* do nothing */ }
         }
 
-        foreach m in link_args.iter() {
+        for m in link_args.iter() {
             match m.value_str() {
                 Some(linkarg) => {
                     cstore::add_used_link_args(cstore, linkarg);
@@ -223,7 +223,7 @@ fn metas_with_ident(ident: @str, metas: ~[@ast::MetaItem])
 
 fn existing_match(e: &Env, metas: &[@ast::MetaItem], hash: &str)
                -> Option<int> {
-    foreach c in e.crate_cache.iter() {
+    for c in e.crate_cache.iter() {
         if loader::metadata_matches(*c.metas, metas)
             && (hash.is_empty() || c.hash.as_slice() == hash) {
             return Some(c.cnum);
@@ -306,7 +306,7 @@ fn resolve_crate_deps(e: @mut Env, cdata: @~[u8]) -> cstore::cnum_map {
     // numbers
     let mut cnum_map = HashMap::new();
     let r = decoder::get_crate_deps(cdata);
-    foreach dep in r.iter() {
+    for dep in r.iter() {
         let extrn_cnum = dep.cnum;
         let cname = dep.name;
         let cname_str = token::ident_to_str(&dep.name);
index 9a681bf6a0771bacf0f237e59c138deb8407c23d..33623a40cfb2ac6a1f34b2b743b892dfb454444a 100644 (file)
@@ -84,7 +84,7 @@ pub fn have_crate_data(cstore: &CStore, cnum: ast::CrateNum) -> bool {
 
 pub fn iter_crate_data(cstore: &CStore,
                        i: &fn(ast::CrateNum, @crate_metadata)) {
-    foreach (&k, &v) in cstore.metas.iter() {
+    for (&k, &v) in cstore.metas.iter() {
         i(k, v);
     }
 }
@@ -114,7 +114,7 @@ pub fn get_used_libraries<'a>(cstore: &'a CStore) -> &'a [@str] {
 }
 
 pub fn add_used_link_args(cstore: &mut CStore, args: &str) {
-    foreach s in args.split_iter(' ') {
+    for s in args.split_iter(' ') {
         cstore.used_link_args.push(s.to_managed());
     }
 }
@@ -148,7 +148,7 @@ struct crate_hash {
 pub fn get_dep_hashes(cstore: &CStore) -> ~[@str] {
     let mut result = ~[];
 
-    foreach (_, &cnum) in cstore.extern_mod_crate_map.iter() {
+    for (_, &cnum) in cstore.extern_mod_crate_map.iter() {
         let cdata = cstore::get_crate_data(cstore, cnum);
         let hash = decoder::get_crate_hash(cdata.data);
         let vers = decoder::get_crate_vers(cdata.data);
@@ -165,7 +165,7 @@ pub fn get_dep_hashes(cstore: &CStore) -> ~[@str] {
     };
 
     debug!("sorted:");
-    foreach x in sorted.iter() {
+    for x in sorted.iter() {
         debug!("  hash[%s]: %s", x.name, x.hash);
     }
 
index 4824fe55f1d1707dc52bdb53392a1dcaf6d92432..c3097d1aa66577c85ff5d71324ccf208e85c4c6c 100644 (file)
@@ -761,7 +761,7 @@ pub fn get_enum_variants(intr: @ident_interner, cdata: cmd, id: ast::NodeId,
     let mut infos: ~[@ty::VariantInfo] = ~[];
     let variant_ids = enum_variant_ids(item, cdata);
     let mut disr_val = 0;
-    foreach did in variant_ids.iter() {
+    for did in variant_ids.iter() {
         let item = find_item(did.node, items);
         let ctor_ty = item_type(ast::def_id { crate: cdata.cnum, node: id},
                                 item, tcx, cdata);
@@ -974,7 +974,7 @@ pub fn get_static_methods_if_impl(intr: @ident_interner,
     };
 
     let mut static_impl_methods = ~[];
-    foreach impl_method_id in impl_method_ids.iter() {
+    for impl_method_id in impl_method_ids.iter() {
         let impl_method_doc = lookup_item(impl_method_id.node, cdata.data);
         let family = item_family(impl_method_doc);
         match family {
@@ -1171,7 +1171,7 @@ fn list_meta_items(intr: @ident_interner,
                    meta_items: ebml::Doc,
                    out: @io::Writer) {
     let r = get_meta_items(meta_items);
-    foreach mi in r.iter() {
+    for mi in r.iter() {
         out.write_str(fmt!("%s\n", pprust::meta_item_to_str(*mi, intr)));
     }
 }
@@ -1181,7 +1181,7 @@ fn list_crate_attributes(intr: @ident_interner, md: ebml::Doc, hash: &str,
     out.write_str(fmt!("=Crate Attributes (%s)=\n", hash));
 
     let r = get_attributes(md);
-    foreach attr in r.iter() {
+    for attr in r.iter() {
         out.write_str(fmt!("%s\n", pprust::attribute_to_str(attr, intr)));
     }
 
@@ -1224,7 +1224,7 @@ fn list_crate_deps(data: @~[u8], out: @io::Writer) {
     out.write_str("=External Dependencies=\n");
 
     let r = get_crate_deps(data);
-    foreach dep in r.iter() {
+    for dep in r.iter() {
         out.write_str(
             fmt!("%d %s-%s-%s\n",
                  dep.cnum, token::ident_to_str(&dep.name), dep.hash, dep.vers));
index 74a3ba57543a5fc0f54e07893ac68bc7e9ed314e..d847d8511265344aed7f2a593543663b6ea136d1 100644 (file)
@@ -120,7 +120,7 @@ fn encode_region_param(ecx: &EncodeContext,
                        ebml_w: &mut writer::Encoder,
                        it: @ast::item) {
     let opt_rp = ecx.tcx.region_paramd_items.find(&it.id);
-    foreach rp in opt_rp.iter() {
+    for rp in opt_rp.iter() {
         ebml_w.start_tag(tag_region_param);
         rp.encode(ebml_w);
         ebml_w.end_tag();
@@ -193,7 +193,7 @@ fn encode_ty_type_param_defs(ebml_w: &mut writer::Encoder,
         tcx: ecx.tcx,
         abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)
     };
-    foreach param in params.iter() {
+    for param in params.iter() {
         ebml_w.start_tag(tag);
         tyencode::enc_type_param_def(ebml_w.writer, ty_str_ctxt, param);
         ebml_w.end_tag();
@@ -250,7 +250,7 @@ fn encode_type(ecx: &EncodeContext,
 fn encode_transformed_self_ty(ecx: &EncodeContext,
                               ebml_w: &mut writer::Encoder,
                               opt_typ: Option<ty::t>) {
-    foreach &typ in opt_typ.iter() {
+    for &typ in opt_typ.iter() {
         ebml_w.start_tag(tag_item_method_transformed_self_ty);
         write_type(ecx, ebml_w, typ);
         ebml_w.end_tag();
@@ -327,7 +327,7 @@ fn encode_enum_variant_info(ecx: &EncodeContext,
     let mut i = 0;
     let vi = ty::enum_variants(ecx.tcx,
                                ast::def_id { crate: LOCAL_CRATE, node: id });
-    foreach variant in variants.iter() {
+    for variant in variants.iter() {
         let def_id = local_def(variant.node.id);
         index.push(entry {val: variant.node.id, pos: ebml_w.writer.tell()});
         ebml_w.start_tag(tag_items_data_item);
@@ -375,7 +375,7 @@ fn encode_path_elt(ecx: &EncodeContext,
 
     ebml_w.start_tag(tag_path);
     ebml_w.wr_tagged_u32(tag_path_len, (path.len() + 1) as u32);
-    foreach pe in path.iter() {
+    for pe in path.iter() {
         encode_path_elt(ecx, ebml_w, *pe);
     }
     encode_path_elt(ecx, ebml_w, name);
@@ -405,8 +405,8 @@ fn encode_reexported_static_base_methods(ecx: &EncodeContext,
                                          -> bool {
     match ecx.tcx.inherent_impls.find(&exp.def_id) {
         Some(implementations) => {
-            foreach &base_impl in implementations.iter() {
-                foreach &m in base_impl.methods.iter() {
+            for &base_impl in implementations.iter() {
+                for &m in base_impl.methods.iter() {
                     if m.explicit_self == ast::sty_static {
                         encode_reexported_static_method(ecx, ebml_w, exp,
                                                         m.def_id, m.ident);
@@ -426,7 +426,7 @@ fn encode_reexported_static_trait_methods(ecx: &EncodeContext,
                                           -> bool {
     match ecx.tcx.trait_methods_cache.find(&exp.def_id) {
         Some(methods) => {
-            foreach &m in methods.iter() {
+            for &m in methods.iter() {
                 if m.explicit_self == ast::sty_static {
                     encode_reexported_static_method(ecx, ebml_w, exp,
                                                     m.def_id, m.ident);
@@ -486,7 +486,7 @@ fn each_auxiliary_node_id(item: @item, callback: &fn(NodeId) -> bool)
     let mut continue = true;
     match item.node {
         item_enum(ref enum_def, _) => {
-            foreach variant in enum_def.variants.iter() {
+            for variant in enum_def.variants.iter() {
                 continue = callback(variant.node.id);
                 if !continue {
                     break
@@ -518,7 +518,7 @@ fn encode_reexports(ecx: &EncodeContext,
     match ecx.reexports2.find(&id) {
         Some(ref exports) => {
             debug!("(encoding info for module) found reexports for %d", id);
-            foreach exp in exports.iter() {
+            for exp in exports.iter() {
                 debug!("(encoding info for module) reexport '%s' for %d",
                        exp.name, id);
                 ebml_w.start_tag(tag_items_data_item_reexport);
@@ -553,7 +553,7 @@ fn encode_info_for_mod(ecx: &EncodeContext,
     debug!("(encoding info for module) encoding info for module ID %d", id);
 
     // Encode info about all the module children.
-    foreach item in md.items.iter() {
+    for item in md.items.iter() {
         ebml_w.start_tag(tag_mod_child);
         ebml_w.wr_str(def_to_str(local_def(item.id)));
         ebml_w.end_tag();
@@ -664,7 +664,7 @@ fn encode_method_sort(ebml_w: &mut writer::Encoder, sort: char) {
 
 fn encode_provided_source(ebml_w: &mut writer::Encoder,
                           source_opt: Option<def_id>) {
-    foreach source in source_opt.iter() {
+    for source in source_opt.iter() {
         ebml_w.start_tag(tag_item_method_provided_source);
         let s = def_to_str(*source);
         ebml_w.writer.write(s.as_bytes());
@@ -685,7 +685,7 @@ fn encode_info_for_struct(ecx: &EncodeContext,
     let tcx = ecx.tcx;
      /* We encode both private and public fields -- need to include
         private fields to get the offsets right */
-    foreach field in fields.iter() {
+    for field in fields.iter() {
         let (nm, vis) = match field.node.kind {
             named_field(nm, vis) => (nm, vis),
             unnamed_field => (special_idents::unnamed_field, inherited)
@@ -772,7 +772,7 @@ fn encode_info_for_method(ecx: &EncodeContext,
 
     encode_path(ecx, ebml_w, impl_path, ast_map::path_name(m.ident));
 
-    foreach ast_method in ast_method_opt.iter() {
+    for ast_method in ast_method_opt.iter() {
         let num_params = tpt.generics.type_param_defs.len();
         if num_params > 0u || is_default_impl
             || should_inline(ast_method.attrs) {
@@ -882,7 +882,7 @@ fn add_to_index_(item: @item, ebml_w: &writer::Encoder,
         encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident));
 
         // Encode all the items in this module.
-        foreach foreign_item in fm.items.iter() {
+        for foreign_item in fm.items.iter() {
             ebml_w.start_tag(tag_mod_child);
             ebml_w.wr_str(def_to_str(local_def(foreign_item.id)));
             ebml_w.end_tag();
@@ -909,7 +909,7 @@ fn add_to_index_(item: @item, ebml_w: &writer::Encoder,
         encode_family(ebml_w, 't');
         encode_bounds_and_type(ebml_w, ecx, &lookup_item_type(tcx, def_id));
         encode_name(ecx, ebml_w, item.ident);
-        foreach v in (*enum_definition).variants.iter() {
+        for v in (*enum_definition).variants.iter() {
             encode_variant_id(ebml_w, local_def(v.node.id));
         }
         (ecx.encode_inlined_item)(ecx, ebml_w, path, ii_item(item));
@@ -950,7 +950,7 @@ fn add_to_index_(item: @item, ebml_w: &writer::Encoder,
         /* Encode def_ids for each field and method
          for methods, write all the stuff get_trait_method
         needs to know*/
-        foreach f in struct_def.fields.iter() {
+        for f in struct_def.fields.iter() {
             match f.node.kind {
                 named_field(ident, vis) => {
                    ebml_w.start_tag(tag_item_field);
@@ -1010,13 +1010,13 @@ fn add_to_index_(item: @item, ebml_w: &writer::Encoder,
             }
             _ => {}
         }
-        foreach method in imp.methods.iter() {
+        for method in imp.methods.iter() {
             ebml_w.start_tag(tag_item_impl_method);
             let s = def_to_str(method.def_id);
             ebml_w.writer.write(s.as_bytes());
             ebml_w.end_tag();
         }
-        foreach ast_trait_ref in opt_trait.iter() {
+        for ast_trait_ref in opt_trait.iter() {
             let trait_ref = ty::node_id_to_trait_ref(
                 tcx, ast_trait_ref.ref_id);
             encode_trait_ref(ebml_w, ecx, trait_ref, tag_item_trait_ref);
@@ -1035,7 +1035,7 @@ fn add_to_index_(item: @item, ebml_w: &writer::Encoder,
         // appear first in the impl structure, in the same order they do
         // in the ast. This is a little sketchy.
         let num_implemented_methods = ast_methods.len();
-        foreach (i, m) in imp.methods.iter().enumerate() {
+        for (i, m) in imp.methods.iter().enumerate() {
             let ast_method = if i < num_implemented_methods {
                 Some(ast_methods[i])
             } else { None };
@@ -1063,7 +1063,7 @@ fn add_to_index_(item: @item, ebml_w: &writer::Encoder,
         encode_trait_ref(ebml_w, ecx, trait_def.trait_ref, tag_item_trait_ref);
         encode_name(ecx, ebml_w, item.ident);
         encode_attributes(ebml_w, item.attrs);
-        foreach &method_def_id in ty::trait_method_def_ids(tcx, def_id).iter() {
+        for &method_def_id in ty::trait_method_def_ids(tcx, def_id).iter() {
             ebml_w.start_tag(tag_item_trait_method);
             encode_def_id(ebml_w, method_def_id);
             ebml_w.end_tag();
@@ -1073,7 +1073,7 @@ fn add_to_index_(item: @item, ebml_w: &writer::Encoder,
             ebml_w.end_tag();
         }
         encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident));
-        foreach ast_trait_ref in super_traits.iter() {
+        for ast_trait_ref in super_traits.iter() {
             let trait_ref = ty::node_id_to_trait_ref(ecx.tcx, ast_trait_ref.ref_id);
             encode_trait_ref(ebml_w, ecx, trait_ref, tag_item_super_trait_ref);
         }
@@ -1081,7 +1081,7 @@ fn add_to_index_(item: @item, ebml_w: &writer::Encoder,
 
         // Now output the method info for each method.
         let r = ty::trait_method_def_ids(tcx, def_id);
-        foreach (i, &method_def_id) in r.iter().enumerate() {
+        for (i, &method_def_id) in r.iter().enumerate() {
             assert_eq!(method_def_id.crate, ast::LOCAL_CRATE);
 
             let method_ty = ty::method(tcx, method_def_id);
@@ -1257,14 +1257,14 @@ fn create_index<T:Clone + Hash + IterBytes + 'static>(
                 index: ~[entry<T>])
                 -> ~[@~[entry<T>]] {
     let mut buckets: ~[@mut ~[entry<T>]] = ~[];
-    foreach _ in range(0u, 256u) { buckets.push(@mut ~[]); };
-    foreach elt in index.iter() {
+    for _ in range(0u, 256u) { buckets.push(@mut ~[]); };
+    for elt in index.iter() {
         let h = elt.val.hash() as uint;
         buckets[h % 256].push((*elt).clone());
     }
 
     let mut buckets_frozen = ~[];
-    foreach bucket in buckets.iter() {
+    for bucket in buckets.iter() {
         buckets_frozen.push(@/*bad*/(**bucket).clone());
     }
     return buckets_frozen;
@@ -1278,10 +1278,10 @@ fn encode_index<T:'static>(
     ebml_w.start_tag(tag_index);
     let mut bucket_locs: ~[uint] = ~[];
     ebml_w.start_tag(tag_index_buckets);
-    foreach bucket in buckets.iter() {
+    for bucket in buckets.iter() {
         bucket_locs.push(ebml_w.writer.tell());
         ebml_w.start_tag(tag_index_buckets_bucket);
-        foreach elt in (**bucket).iter() {
+        for elt in (**bucket).iter() {
             ebml_w.start_tag(tag_index_buckets_bucket_elt);
             assert!(elt.pos < 0xffff_ffff);
             writer.write_be_u32(elt.pos as u32);
@@ -1292,7 +1292,7 @@ fn encode_index<T:'static>(
     }
     ebml_w.end_tag();
     ebml_w.start_tag(tag_index_table);
-    foreach pos in bucket_locs.iter() {
+    for pos in bucket_locs.iter() {
         assert!(*pos < 0xffff_ffff);
         writer.write_be_u32(*pos as u32);
     }
@@ -1338,7 +1338,7 @@ fn encode_meta_item(ebml_w: &mut writer::Encoder, mi: @MetaItem) {
         ebml_w.start_tag(tag_meta_item_name);
         ebml_w.writer.write(name.as_bytes());
         ebml_w.end_tag();
-        foreach inner_item in items.iter() {
+        for inner_item in items.iter() {
             encode_meta_item(ebml_w, *inner_item);
         }
         ebml_w.end_tag();
@@ -1348,7 +1348,7 @@ fn encode_meta_item(ebml_w: &mut writer::Encoder, mi: @MetaItem) {
 
 fn encode_attributes(ebml_w: &mut writer::Encoder, attrs: &[Attribute]) {
     ebml_w.start_tag(tag_attributes);
-    foreach attr in attrs.iter() {
+    for attr in attrs.iter() {
         ebml_w.start_tag(tag_attribute);
         encode_meta_item(ebml_w, attr.node.value);
         ebml_w.end_tag();
@@ -1378,7 +1378,7 @@ fn synthesize_link_attr(ecx: &EncodeContext, items: ~[@MetaItem]) ->
 
         let mut meta_items = ~[name_item, vers_item];
 
-        foreach &mi in items.iter().filter(|mi| "name" != mi.name() && "vers" != mi.name()) {
+        for &mi in items.iter().filter(|mi| "name" != mi.name() && "vers" != mi.name()) {
             meta_items.push(mi);
         }
         let link_item = attr::mk_list_item(@"link", meta_items);
@@ -1388,7 +1388,7 @@ fn synthesize_link_attr(ecx: &EncodeContext, items: ~[@MetaItem]) ->
 
     let mut attrs = ~[];
     let mut found_link_attr = false;
-    foreach attr in crate.attrs.iter() {
+    for attr in crate.attrs.iter() {
         attrs.push(
             if "link" != attr.name()  {
                 *attr
@@ -1430,7 +1430,7 @@ fn get_ordered_deps(ecx: &EncodeContext, cstore: &cstore::CStore)
 
         // Sanity-check the crate numbers
         let mut expected_cnum = 1;
-        foreach n in deps.iter() {
+        for n in deps.iter() {
             assert_eq!(n.cnum, expected_cnum);
             expected_cnum += 1;
         }
@@ -1444,7 +1444,7 @@ fn get_ordered_deps(ecx: &EncodeContext, cstore: &cstore::CStore)
     // but is enough to get transitive crate dependencies working.
     ebml_w.start_tag(tag_crate_deps);
     let r = get_ordered_deps(ecx, cstore);
-    foreach dep in r.iter() {
+    for dep in r.iter() {
         encode_crate_dep(ecx, ebml_w, *dep);
     }
     ebml_w.end_tag();
@@ -1454,7 +1454,7 @@ fn encode_lang_items(ecx: &EncodeContext, ebml_w: &mut writer::Encoder) {
     ebml_w.start_tag(tag_lang_items);
 
     do ecx.tcx.lang_items.each_item |def_id, i| {
-        foreach id in def_id.iter() {
+        for id in def_id.iter() {
             if id.crate == LOCAL_CRATE {
                 ebml_w.start_tag(tag_lang_items_item);
 
@@ -1479,7 +1479,7 @@ fn encode_link_args(ecx: &EncodeContext, ebml_w: &mut writer::Encoder) {
     ebml_w.start_tag(tag_link_args);
 
     let link_args = cstore::get_used_link_args(ecx.cstore);
-    foreach link_arg in link_args.iter() {
+    for link_arg in link_args.iter() {
         ebml_w.start_tag(tag_link_args_arg);
         ebml_w.writer.write_str(link_arg.to_str());
         ebml_w.end_tag();
@@ -1493,7 +1493,7 @@ fn encode_misc_info(ecx: &EncodeContext,
                     ebml_w: &mut writer::Encoder) {
     ebml_w.start_tag(tag_misc_info);
     ebml_w.start_tag(tag_misc_info_crate_items);
-    foreach &item in crate.module.items.iter() {
+    for &item in crate.module.items.iter() {
         ebml_w.start_tag(tag_mod_child);
         ebml_w.wr_str(def_to_str(local_def(item.id)));
         ebml_w.end_tag();
@@ -1630,7 +1630,7 @@ pub fn encode_metadata(parms: EncodeParams, crate: &Crate) -> ~[u8] {
     ecx.stats.total_bytes = *wr.pos;
 
     if (tcx.sess.meta_stats()) {
-        foreach e in wr.bytes.iter() {
+        for e in wr.bytes.iter() {
             if *e == 0 {
                 ecx.stats.zero_bytes += 1;
             }
index 765bf35b2b7a6b86e39092527226f7de0d387378..2422be3960b44e7af38f90d20f90e7d3be1fd49c 100644 (file)
@@ -91,7 +91,7 @@ pub fn search<T>(filesearch: @FileSearch, pick: pick<T>) -> Option<T> {
     do filesearch.for_each_lib_search_path() |lib_search_path| {
         debug!("searching %s", lib_search_path.to_str());
         let r = os::list_dir_path(lib_search_path);
-        foreach path in r.iter() {
+        for path in r.iter() {
             debug!("testing %s", path.to_str());
             let maybe_picked = pick(path);
             if maybe_picked.is_some() {
index 8b41277a3dab70f613c58df24c0dbcdf892f4e29..058be7cc5581169459fe4988b0fbe999e62887d0 100644 (file)
@@ -129,7 +129,7 @@ fn find_library_crate_aux(
             cx.diag.span_err(
                     cx.span, fmt!("multiple matching crates for `%s`", crate_name));
                 cx.diag.handler().note("candidates:");
-                foreach pair in matches.iter() {
+                for pair in matches.iter() {
                     let ident = pair.first();
                     let data = pair.second();
                     cx.diag.handler().note(fmt!("path: %s", ident));
@@ -143,7 +143,7 @@ fn find_library_crate_aux(
 }
 
 pub fn crate_name_from_metas(metas: &[@ast::MetaItem]) -> @str {
-    foreach m in metas.iter() {
+    for m in metas.iter() {
         match m.name_str_pair() {
             Some((name, s)) if "name" == name => { return s; }
             _ => {}
@@ -156,7 +156,7 @@ pub fn note_linkage_attrs(intr: @ident_interner,
                           diag: @span_handler,
                           attrs: ~[ast::Attribute]) {
     let r = attr::find_linkage_metas(attrs);
-    foreach mi in r.iter() {
+    for mi in r.iter() {
         diag.handler().note(fmt!("meta: %s", pprust::meta_item_to_str(*mi,intr)));
     }
 }
index f8fae5ce26b5076f8def6fc00ef8a97220fe1aed..ec50f564385c3a9d3f777d0f9073f2f785deef79 100644 (file)
@@ -123,7 +123,7 @@ fn enc_substs(w: @io::Writer, cx: @ctxt, substs: &ty::substs) {
     enc_region_substs(w, cx, &substs.regions);
     do enc_opt(w, substs.self_ty) |t| { enc_ty(w, cx, t) }
     w.write_char('[');
-    foreach t in substs.tps.iter() { enc_ty(w, cx, *t); }
+    for t in substs.tps.iter() { enc_ty(w, cx, *t); }
     w.write_char(']');
 }
 
@@ -134,7 +134,7 @@ fn enc_region_substs(w: @io::Writer, cx: @ctxt, substs: &ty::RegionSubsts) {
         }
         ty::NonerasedRegions(ref regions) => {
             w.write_char('n');
-            foreach &r in regions.iter() {
+            for &r in regions.iter() {
                 enc_region(w, cx, r);
             }
             w.write_char('.');
@@ -288,7 +288,7 @@ fn enc_sty(w: @io::Writer, cx: @ctxt, st: &ty::sty) {
       }
       ty::ty_tup(ref ts) => {
         w.write_str(&"T[");
-        foreach t in ts.iter() { enc_ty(w, cx, *t); }
+        for t in ts.iter() { enc_ty(w, cx, *t); }
         w.write_char(']');
       }
       ty::ty_box(mt) => { w.write_char('@'); enc_mt(w, cx, mt); }
@@ -405,7 +405,7 @@ fn enc_closure_ty(w: @io::Writer, cx: @ctxt, ft: &ty::ClosureTy) {
 
 fn enc_fn_sig(w: @io::Writer, cx: @ctxt, fsig: &ty::FnSig) {
     w.write_char('[');
-    foreach ty in fsig.inputs.iter() {
+    for ty in fsig.inputs.iter() {
         enc_ty(w, cx, *ty);
     }
     w.write_char(']');
@@ -423,7 +423,7 @@ fn enc_bounds(w: @io::Writer, cx: @ctxt, bs: &ty::ParamBounds) {
         true
     };
 
-    foreach &tp in bs.trait_bounds.iter() {
+    for &tp in bs.trait_bounds.iter() {
         w.write_char('I');
         enc_trait_ref(w, cx, tp);
     }
index 902ff02e5d3b760afbbe5869be77ce5d2701f090..34f4425a871ddbe7ed2503b9d2f896c617928b9a 100644 (file)
@@ -854,7 +854,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
 
     {
         let r = tcx.def_map.find(&id);
-        foreach def in r.iter() {
+        for def in r.iter() {
             do ebml_w.tag(c::tag_table_def) |ebml_w| {
                 ebml_w.id(id);
                 do ebml_w.tag(c::tag_table_val) |ebml_w| {
@@ -866,7 +866,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
 
     {
         let r = tcx.node_types.find(&(id as uint));
-        foreach &ty in r.iter() {
+        for &ty in r.iter() {
             do ebml_w.tag(c::tag_table_node_type) |ebml_w| {
                 ebml_w.id(id);
                 do ebml_w.tag(c::tag_table_val) |ebml_w| {
@@ -878,7 +878,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
 
     {
         let r = tcx.node_type_substs.find(&id);
-        foreach tys in r.iter() {
+        for tys in r.iter() {
             do ebml_w.tag(c::tag_table_node_type_subst) |ebml_w| {
                 ebml_w.id(id);
                 do ebml_w.tag(c::tag_table_val) |ebml_w| {
@@ -890,7 +890,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
 
     {
         let r = tcx.freevars.find(&id);
-        foreach &fv in r.iter() {
+        for &fv in r.iter() {
             do ebml_w.tag(c::tag_table_freevars) |ebml_w| {
                 ebml_w.id(id);
                 do ebml_w.tag(c::tag_table_val) |ebml_w| {
@@ -905,7 +905,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
     let lid = ast::def_id { crate: ast::LOCAL_CRATE, node: id };
     {
         let r = tcx.tcache.find(&lid);
-        foreach &tpbt in r.iter() {
+        for &tpbt in r.iter() {
             do ebml_w.tag(c::tag_table_tcache) |ebml_w| {
                 ebml_w.id(id);
                 do ebml_w.tag(c::tag_table_val) |ebml_w| {
@@ -917,7 +917,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
 
     {
         let r = tcx.ty_param_defs.find(&id);
-        foreach &type_param_def in r.iter() {
+        for &type_param_def in r.iter() {
             do ebml_w.tag(c::tag_table_param_defs) |ebml_w| {
                 ebml_w.id(id);
                 do ebml_w.tag(c::tag_table_val) |ebml_w| {
@@ -929,7 +929,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
 
     {
         let r = maps.method_map.find(&id);
-        foreach &mme in r.iter() {
+        for &mme in r.iter() {
             do ebml_w.tag(c::tag_table_method_map) |ebml_w| {
                 ebml_w.id(id);
                 do ebml_w.tag(c::tag_table_val) |ebml_w| {
@@ -941,7 +941,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
 
     {
         let r = maps.vtable_map.find(&id);
-        foreach &dr in r.iter() {
+        for &dr in r.iter() {
             do ebml_w.tag(c::tag_table_vtable_map) |ebml_w| {
                 ebml_w.id(id);
                 do ebml_w.tag(c::tag_table_val) |ebml_w| {
@@ -953,7 +953,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
 
     {
         let r = tcx.adjustments.find(&id);
-        foreach adj in r.iter() {
+        for adj in r.iter() {
             do ebml_w.tag(c::tag_table_adjustments) |ebml_w| {
                 ebml_w.id(id);
                 do ebml_w.tag(c::tag_table_val) |ebml_w| {
@@ -965,7 +965,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
 
     {
         let r = maps.capture_map.find(&id);
-        foreach &cap_vars in r.iter() {
+        for &cap_vars in r.iter() {
             do ebml_w.tag(c::tag_table_capture_map) |ebml_w| {
                 ebml_w.id(id);
                 do ebml_w.tag(c::tag_table_val) |ebml_w| {
@@ -1054,7 +1054,7 @@ fn read_ty(&mut self, xcx: @ExtendedDecodeContext) -> ty::t {
 
         fn type_string(doc: ebml::Doc) -> ~str {
             let mut str = ~"";
-            foreach i in range(doc.start, doc.end) {
+            for i in range(doc.start, doc.end) {
                 str.push_char(doc.data[i] as char);
             }
             str
index f6cc102938aaa59f8cc1a2e19e91d97f46a7e227..646840f1e306361c535ac52145440b06b0d691fb 100644 (file)
@@ -116,7 +116,7 @@ pub fn each_in_scope_restriction(&self,
 
         do self.each_in_scope_loan(scope_id) |loan| {
             let mut ret = true;
-            foreach restr in loan.restrictions.iter() {
+            for restr in loan.restrictions.iter() {
                 if restr.loan_path == loan_path {
                     if !op(loan, restr) {
                         ret = false;
@@ -152,16 +152,16 @@ pub fn check_for_conflicting_loans(&self, scope_id: ast::NodeId) {
         debug!("new_loan_indices = %?", new_loan_indices);
 
         do self.each_issued_loan(scope_id) |issued_loan| {
-            foreach &new_loan_index in new_loan_indices.iter() {
+            for &new_loan_index in new_loan_indices.iter() {
                 let new_loan = &self.all_loans[new_loan_index];
                 self.report_error_if_loans_conflict(issued_loan, new_loan);
             }
             true
         };
 
-        foreach i in range(0u, new_loan_indices.len()) {
+        for i in range(0u, new_loan_indices.len()) {
             let old_loan = &self.all_loans[new_loan_indices[i]];
-            foreach j in range(i+1, new_loan_indices.len()) {
+            for 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);
             }
@@ -211,7 +211,7 @@ pub fn report_error_if_loan_conflicts_with_restriction(&self,
         };
         debug!("illegal_if=%?", illegal_if);
 
-        foreach restr in loan1.restrictions.iter() {
+        for restr in loan1.restrictions.iter() {
             if !restr.set.intersects(illegal_if) { loop; }
             if restr.loan_path != loan2.loan_path { loop; }
 
@@ -652,7 +652,7 @@ fn check_captured_variables(this: CheckLoanCtxt,
                                 closure_id: ast::NodeId,
                                 span: span) {
         let cap_vars = this.bccx.capture_map.get(&closure_id);
-        foreach cap_var in cap_vars.iter() {
+        for cap_var in cap_vars.iter() {
             let var_id = ast_util::def_id_of_def(cap_var.def).node;
             let var_path = @LpVar(var_id);
             this.check_if_path_is_moved(closure_id, span,
@@ -713,7 +713,7 @@ fn check_loans_in_expr<'a>(expr: @ast::expr,
               let cmt = this.bccx.cat_expr_unadjusted(expr);
               debug!("path cmt=%s", cmt.repr(this.tcx()));
               let r = opt_loan_path(cmt);
-              foreach &lp in r.iter() {
+              for &lp in r.iter() {
                   this.check_if_path_is_moved(expr.id, expr.span, MovedInUse, lp);
               }
           }
index 7c24b30743d21590895e8086612f7aa64f0d9122..54a5c09a0e9792e38b35be8383e6e24fd4906103 100644 (file)
@@ -70,7 +70,7 @@ pub fn gather_captures(bccx: @BorrowckCtxt,
                        move_data: &mut MoveData,
                        closure_expr: @ast::expr) {
     let captured_vars = bccx.capture_map.get(&closure_expr.id);
-    foreach captured_var in captured_vars.iter() {
+    for captured_var in captured_vars.iter() {
         match captured_var.mode {
             moves::CapMove => {
                 let fvar_id = ast_util::def_id_of_def(captured_var.def).node;
index a4d177becdddeac1eaef754ecdc78c3e2a6069b4..b970a6585f6cd0b09d957bc22f7af454327079bf 100644 (file)
@@ -189,7 +189,7 @@ fn gather_loans_in_expr(ex: @ast::expr,
 
     {
         let r = ex.get_callee_id();
-        foreach callee_id in r.iter() {
+        for callee_id in r.iter() {
             this.id_range.add(*callee_id);
         }
     }
@@ -197,7 +197,7 @@ fn gather_loans_in_expr(ex: @ast::expr,
     // If this expression is borrowed, have to ensure it remains valid:
     {
         let r = tcx.adjustments.find(&ex.id);
-        foreach &adjustments in r.iter() {
+        for &adjustments in r.iter() {
             this.guarantee_adjustments(ex, *adjustments);
         }
     }
@@ -240,8 +240,8 @@ fn gather_loans_in_expr(ex: @ast::expr,
 
       ast::expr_match(ex_v, ref arms) => {
         let cmt = this.bccx.cat_expr(ex_v);
-        foreach arm in arms.iter() {
-            foreach pat in arm.pats.iter() {
+        for arm in arms.iter() {
+            for pat in arm.pats.iter() {
                 this.gather_pat(cmt, *pat, Some((arm.body.id, ex.id)));
             }
         }
@@ -619,7 +619,7 @@ fn gather_fn_arg_patterns(&mut self,
          */
 
         let mc_ctxt = self.bccx.mc_ctxt();
-        foreach arg in decl.inputs.iter() {
+        for arg in decl.inputs.iter() {
             let arg_ty = ty::node_id_to_type(self.tcx(), arg.pat.id);
 
             let arg_cmt = mc_ctxt.cat_rvalue(
index 9e4e85c3a5e536edcf034b9da5c1f49b82375b60..ad32eb0c805e4d4369f343e734257af37da0e15d 100644 (file)
@@ -139,7 +139,7 @@ fn restrict(&self,
                 // static errors. For example, if there is code like
                 //
                 //    let v = @mut ~[1, 2, 3];
-                //    foreach e in v.iter() {
+                //    for e in v.iter() {
                 //        v.push(e + 1);
                 //    }
                 //
@@ -151,7 +151,7 @@ fn restrict(&self,
                 //
                 //    let v = @mut ~[1, 2, 3];
                 //    let w = v;
-                //    foreach e in v.iter() {
+                //    for e in v.iter() {
                 //        w.push(e + 1);
                 //    }
                 //
@@ -164,7 +164,7 @@ fn restrict(&self,
                 //    }
                 //    ...
                 //    let v: &V = ...;
-                //    foreach e in v.get_list().iter() {
+                //    for e in v.get_list().iter() {
                 //        v.get_list().push(e + 1);
                 //    }
                 match opt_loan_path(cmt_base) {
index afebae207bd2e533b27431e47ac313a166eb2d3d..3db90ed5d74948981544249b1e153be66905128b 100644 (file)
@@ -139,7 +139,7 @@ fn borrowck_fn(fk: &oldvisit::fn_kind,
                                      LoanDataFlowOperator,
                                      id_range,
                                      all_loans.len());
-            foreach (loan_idx, loan) in all_loans.iter().enumerate() {
+            for (loan_idx, loan) in all_loans.iter().enumerate() {
                 loan_dfcx.add_gen(loan.gen_scope, loan_idx);
                 loan_dfcx.add_kill(loan.kill_scope, loan_idx);
             }
index 9285c1e1f64e401304811f1d78a6bd32b4220e62..164139ad733bfdff7eda9c4ceb2da7a38afffd0e 100644 (file)
@@ -372,22 +372,22 @@ fn add_gen_kills(&self,
          * killed by scoping. See `doc.rs` for more details.
          */
 
-        foreach (i, move) in self.moves.iter().enumerate() {
+        for (i, move) in self.moves.iter().enumerate() {
             dfcx_moves.add_gen(move.id, i);
         }
 
-        foreach (i, assignment) in self.var_assignments.iter().enumerate() {
+        for (i, assignment) in self.var_assignments.iter().enumerate() {
             dfcx_assign.add_gen(assignment.id, i);
             self.kill_moves(assignment.path, assignment.id, dfcx_moves);
         }
 
-        foreach assignment in self.path_assignments.iter() {
+        for assignment in self.path_assignments.iter() {
             self.kill_moves(assignment.path, assignment.id, dfcx_moves);
         }
 
         // Kill all moves related to a variable `x` when it goes out
         // of scope:
-        foreach path in self.paths.iter() {
+        for path in self.paths.iter() {
             match *path.loan_path {
                 LpVar(id) => {
                     let kill_id = tcx.region_maps.encl_scope(id);
@@ -399,7 +399,7 @@ fn add_gen_kills(&self,
         }
 
         // Kill all assignments when the variable goes out of scope:
-        foreach (assignment_index, assignment) in self.var_assignments.iter().enumerate() {
+        for (assignment_index, assignment) in self.var_assignments.iter().enumerate() {
             match *self.path(assignment.path).loan_path {
                 LpVar(id) => {
                     let kill_id = tcx.region_maps.encl_scope(id);
@@ -559,7 +559,7 @@ pub fn each_move_of(&self,
                     ret = false;
                 }
             } else {
-                foreach &loan_path_index in opt_loan_path_index.iter() {
+                for &loan_path_index in opt_loan_path_index.iter() {
                     let cont = do self.move_data.each_base_path(moved_path) |p| {
                         if p == loan_path_index {
                             // Scenario 3: some extension of `loan_path`
index c1a44cc56da2342b0f1f3df86cb51fa3b6ca1a06..f34b28e1642fca9f0f3e7977832824d8f3cee8ec 100644 (file)
@@ -53,7 +53,7 @@ pub fn construct(tcx: ty::ctxt,
 impl CFGBuilder {
     fn block(&mut self, blk: &ast::Block, pred: CFGIndex) -> CFGIndex {
         let mut stmts_exit = pred;
-        foreach &stmt in blk.stmts.iter() {
+        for &stmt in blk.stmts.iter() {
             stmts_exit = self.stmt(stmt, stmts_exit);
         }
 
@@ -151,7 +151,7 @@ fn pats_any(&mut self,
             self.pat(pats[0], pred)
         } else {
             let collect = self.add_dummy_node([]);
-            foreach &pat in pats.iter() {
+            for &pat in pats.iter() {
                 let pat_exit = self.pat(pat, pred);
                 self.add_contained_edge(pat_exit, collect);
             }
@@ -297,7 +297,7 @@ fn expr(&mut self, expr: @ast::expr, pred: CFGIndex) -> CFGIndex {
 
                 let expr_exit = self.add_node(expr.id, []);
                 let mut guard_exit = discr_exit;
-                foreach arm in arms.iter() {
+                for arm in arms.iter() {
                     guard_exit = self.opt_expr(arm.guard, guard_exit); // 2
                     let pats_exit = self.pats_any(arm.pats, guard_exit); // 3
                     let body_exit = self.block(&arm.body, pats_exit);    // 4
@@ -396,7 +396,6 @@ fn expr(&mut self, expr: @ast::expr, pred: CFGIndex) -> CFGIndex {
             }
 
             ast::expr_addr_of(_, e) |
-            ast::expr_loop_body(e) |
             ast::expr_do_body(e) |
             ast::expr_cast(e, _) |
             ast::expr_unary(_, _, e) |
@@ -460,7 +459,7 @@ fn add_node(&mut self, id: ast::NodeId, preds: &[CFGIndex]) -> CFGIndex {
         assert!(!self.exit_map.contains_key(&id));
         let node = self.graph.add_node(CFGNodeData {id: id});
         self.exit_map.insert(id, node);
-        foreach &pred in preds.iter() {
+        for &pred in preds.iter() {
             self.add_contained_edge(pred, node);
         }
         node
@@ -498,7 +497,7 @@ fn find_scope(&self,
             Some(_) => {
                 match self.tcx.def_map.find(&expr.id) {
                     Some(&ast::def_label(loop_id)) => {
-                        foreach l in self.loop_scopes.iter() {
+                        for l in self.loop_scopes.iter() {
                             if l.loop_id == loop_id {
                                 return *l;
                             }
index 9416eb365b319c3b7997ccfdcce95de8813b8df5..f9ef6dabcd64cfc32eb97d514879a14b6e6342f0 100644 (file)
@@ -47,8 +47,8 @@ pub fn check_item(sess: Session,
         check_item_recursion(sess, ast_map, def_map, it);
       }
       item_enum(ref enum_definition, _) => {
-        foreach var in (*enum_definition).variants.iter() {
-            foreach ex in var.node.disr_expr.iter() {
+        for var in (*enum_definition).variants.iter() {
+            for ex in var.node.disr_expr.iter() {
                 (v.visit_expr)(*ex, (true, v));
             }
         }
index 0dabb304fbcb4b44e1d9a9d2260668585af6db11..fb12f97c50cb0156e25425ee174e8565d5470f98 100644 (file)
@@ -45,14 +45,6 @@ pub fn check_crate(tcx: ty::ctxt, crate: &Crate) {
                                          can_ret: false
                                       }, v));
               }
-              expr_loop_body(@expr {node: expr_fn_block(_, ref b), _}) => {
-                let sigil = ty::ty_closure_sigil(ty::expr_ty(tcx, e));
-                let blk = (sigil == BorrowedSigil);
-                (v.visit_block)(b, (Context {
-                                         in_loop: true,
-                                         can_ret: blk
-                                     }, v));
-              }
               expr_break(_) => {
                 if !cx.in_loop {
                     tcx.sess.span_err(e.span, "`break` outside of loop");
index 5cacbd2ec3fd43726754248352637b8afde0c0d4..4de096428f26ff4f806047bafaa379fe2697ab4b 100644 (file)
@@ -57,7 +57,7 @@ pub fn check_expr(cx: @MatchCheckCtxt,
     match ex.node {
       expr_match(scrut, ref arms) => {
         // First, check legality of move bindings.
-        foreach arm in arms.iter() {
+        for arm in arms.iter() {
             check_legality_of_move_bindings(cx,
                                             arm.guard.is_some(),
                                             arm.pats);
@@ -102,8 +102,8 @@ pub fn check_expr(cx: @MatchCheckCtxt,
 // Check for unreachable patterns
 pub fn check_arms(cx: &MatchCheckCtxt, arms: &[arm]) {
     let mut seen = ~[];
-    foreach arm in arms.iter() {
-        foreach pat in arm.pats.iter() {
+    for arm in arms.iter() {
+        for pat in arm.pats.iter() {
 
             // Check that we do not match against a static NaN (#6804)
             let pat_matches_nan: &fn(@pat) -> bool = |p| {
@@ -246,7 +246,7 @@ pub fn is_useful(cx: &MatchCheckCtxt, m: &matrix, v: &[@pat]) -> useful {
                 }
               }
               ty::ty_enum(eid, _) => {
-                foreach va in (*ty::enum_variants(cx.tcx, eid)).iter() {
+                for va in (*ty::enum_variants(cx.tcx, eid)).iter() {
                     match is_useful_specialized(cx, m, v, variant(va.id),
                                                 va.args.len(), left_ty) {
                       not_useful => (),
@@ -264,7 +264,7 @@ pub fn is_useful(cx: &MatchCheckCtxt, m: &matrix, v: &[@pat]) -> useful {
                     _ => max_len
                   }
                 };
-                foreach n in iterator::range(0u, max_len + 1) {
+                for 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,
@@ -368,16 +368,16 @@ pub fn missing_ctor(cx: &MatchCheckCtxt,
     match ty::get(left_ty).sty {
       ty::ty_box(_) | ty::ty_uniq(_) | ty::ty_rptr(*) | ty::ty_tup(_) |
       ty::ty_struct(*) => {
-        foreach r in m.iter() {
+        for r in m.iter() {
             if !is_wild(cx, r[0]) { return None; }
         }
         return Some(single);
       }
       ty::ty_enum(eid, _) => {
         let mut found = ~[];
-        foreach r in m.iter() {
+        for r in m.iter() {
             let r = pat_ctor_id(cx, r[0]);
-            foreach id in r.iter() {
+            for id in r.iter() {
                 if !found.contains(id) {
                     found.push(*id);
                 }
@@ -385,7 +385,7 @@ pub fn missing_ctor(cx: &MatchCheckCtxt,
         }
         let variants = ty::enum_variants(cx.tcx, eid);
         if found.len() != (*variants).len() {
-            foreach v in (*variants).iter() {
+            for v in (*variants).iter() {
                 if !found.iter().any(|x| x == &(variant(v.id))) {
                     return Some(variant(v.id));
                 }
@@ -397,7 +397,7 @@ pub fn missing_ctor(cx: &MatchCheckCtxt,
       ty::ty_bool => {
         let mut true_found = false;
         let mut false_found = false;
-        foreach r in m.iter() {
+        for r in m.iter() {
             match pat_ctor_id(cx, r[0]) {
               None => (),
               Some(val(const_bool(true))) => true_found = true,
@@ -437,7 +437,7 @@ pub fn missing_ctor(cx: &MatchCheckCtxt,
         let mut found_slice = false;
         let mut next = 0;
         let mut missing = None;
-        foreach &(length, slice) in sorted_vec_lens.iter() {
+        for &(length, slice) in sorted_vec_lens.iter() {
             if length != next {
                 missing = Some(next);
                 break;
@@ -783,7 +783,7 @@ pub fn check_fn(cx: &MatchCheckCtxt,
                 (s, v): ((),
                          oldvisit::vt<()>)) {
     oldvisit::visit_fn(kind, decl, body, sp, id, (s, v));
-    foreach input in decl.inputs.iter() {
+    for input in decl.inputs.iter() {
         if is_refutable(cx, input.pat) {
             cx.tcx.sess.span_err(input.pat.span,
                                  "refutable pattern in function argument");
@@ -836,7 +836,7 @@ pub fn check_legality_of_move_bindings(cx: &MatchCheckCtxt,
     let def_map = tcx.def_map;
     let mut by_ref_span = None;
     let mut any_by_move = false;
-    foreach pat in pats.iter() {
+    for pat in pats.iter() {
         do pat_bindings(def_map, *pat) |bm, id, span, _path| {
             match bm {
                 bind_by_ref(_) => {
@@ -873,7 +873,7 @@ pub fn check_legality_of_move_bindings(cx: &MatchCheckCtxt,
     };
 
     if !any_by_move { return; } // pointless micro-optimization
-    foreach pat in pats.iter() {
+    for pat in pats.iter() {
         do walk_pat(*pat) |p| {
             if pat_is_binding(def_map, p) {
                 match p.node {
index 3e8cce061f13220c100ce40ab7fc3add7f395970..330e44893f04a733d137714bc0819cef65396943 100644 (file)
@@ -176,7 +176,7 @@ pub fn lookup_variant_by_id(tcx: ty::ctxt,
                             variant_def: ast::def_id)
                        -> Option<@expr> {
     fn variant_expr(variants: &[ast::variant], id: ast::NodeId) -> Option<@expr> {
-        foreach variant in variants.iter() {
+        for variant in variants.iter() {
             if variant.node.id == id {
                 return variant.node.disr_expr;
             }
index 634fa73f6aaba396dd120c0927cf0bf807f425de..008add975d490abf8193c37c184fa7e49fdd55a2 100644 (file)
@@ -82,19 +82,8 @@ struct PropagationContext<'self, O> {
     changed: bool
 }
 
-#[deriving(Eq)]
-enum LoopKind {
-    /// A `while` or `loop` loop
-    TrueLoop,
-
-    /// A `for` "loop" (i.e., really a func call where `break`, `return`,
-    /// and `loop` all essentially perform an early return from the closure)
-    ForLoop
-}
-
 struct LoopScope<'self> {
     loop_id: ast::NodeId,
-    loop_kind: LoopKind,
     break_bits: ~[uint]
 }
 
@@ -266,10 +255,10 @@ fn each_bit(&self,
                 f: &fn(uint) -> bool) -> bool {
         //! Helper for iterating over the bits in a bit set.
 
-        foreach (word_index, &word) in words.iter().enumerate() {
+        for (word_index, &word) in words.iter().enumerate() {
             if word != 0 {
                 let base_index = word_index * uint::bits;
-                foreach offset in range(0u, uint::bits) {
+                for offset in range(0u, uint::bits) {
                     let bit = 1 << offset;
                     if (word & bit) != 0 {
                         // NB: we round up the total number of bits
@@ -391,7 +380,7 @@ fn walk_block(&mut self,
 
         self.merge_with_entry_set(blk.id, in_out);
 
-        foreach &stmt in blk.stmts.iter() {
+        for &stmt in blk.stmts.iter() {
             self.walk_stmt(stmt, in_out, loop_scopes);
         }
 
@@ -509,10 +498,9 @@ fn walk_expr(&mut self,
 
                     loop_scopes.push(LoopScope {
                         loop_id: expr.id,
-                        loop_kind: ForLoop,
                         break_bits: reslice(in_out).to_owned()
                     });
-                    foreach input in decl.inputs.iter() {
+                    for input in decl.inputs.iter() {
                         self.walk_pat(input.pat, func_bits, loop_scopes);
                     }
                     self.walk_block(body, func_bits, loop_scopes);
@@ -574,7 +562,6 @@ fn walk_expr(&mut self,
                 let mut body_bits = reslice(in_out).to_owned();
                 loop_scopes.push(LoopScope {
                     loop_id: expr.id,
-                    loop_kind: TrueLoop,
                     break_bits: reslice(in_out).to_owned()
                 });
                 self.walk_block(blk, body_bits, loop_scopes);
@@ -599,7 +586,6 @@ fn walk_expr(&mut self,
                 self.reset(in_out);
                 loop_scopes.push(LoopScope {
                     loop_id: expr.id,
-                    loop_kind: TrueLoop,
                     break_bits: reslice(in_out).to_owned()
                 });
                 self.walk_block(blk, body_bits, loop_scopes);
@@ -631,7 +617,7 @@ fn walk_expr(&mut self,
                 // together the bits from each arm:
                 self.reset(in_out);
 
-                foreach arm in arms.iter() {
+                for arm in arms.iter() {
                     // in_out reflects the discr and all guards to date
                     self.walk_opt_expr(arm.guard, guards, loop_scopes);
 
@@ -646,20 +632,6 @@ fn walk_expr(&mut self,
 
             ast::expr_ret(o_e) => {
                 self.walk_opt_expr(o_e, in_out, loop_scopes);
-
-                // is this a return from a `for`-loop closure?
-                match loop_scopes.iter().position(|s| s.loop_kind == ForLoop) {
-                    Some(i) => {
-                        // if so, add the in_out bits to the state
-                        // upon exit. Remember that we cannot count
-                        // upon the `for` loop function not to invoke
-                        // the closure again etc.
-                        self.break_from_to(expr, &mut loop_scopes[i], in_out);
-                    }
-
-                    None => {}
-                }
-
                 self.reset(in_out);
             }
 
@@ -671,22 +643,8 @@ fn walk_expr(&mut self,
 
             ast::expr_again(label) => {
                 let scope = self.find_scope(expr, label, loop_scopes);
-
-                match scope.loop_kind {
-                    TrueLoop => {
-                        self.pop_scopes(expr, scope, in_out);
-                        self.add_to_entry_set(scope.loop_id, reslice(in_out));
-                    }
-
-                    ForLoop => {
-                        // If this `loop` construct is looping back to a `for`
-                        // loop, then `loop` is really just a return from the
-                        // closure. Therefore, we treat it the same as `break`.
-                        // See case for `expr_fn_block` for more details.
-                        self.break_from_to(expr, scope, in_out);
-                    }
-                }
-
+                self.pop_scopes(expr, scope, in_out);
+                self.add_to_entry_set(scope.loop_id, reslice(in_out));
                 self.reset(in_out);
             }
 
@@ -706,7 +664,7 @@ fn walk_expr(&mut self,
             }
 
             ast::expr_struct(_, ref fields, with_expr) => {
-                foreach field in fields.iter() {
+                for field in fields.iter() {
                     self.walk_expr(field.expr, in_out, loop_scopes);
                 }
                 self.walk_opt_expr(with_expr, in_out, loop_scopes);
@@ -756,7 +714,6 @@ fn walk_expr(&mut self,
             }
 
             ast::expr_addr_of(_, e) |
-            ast::expr_loop_body(e) |
             ast::expr_do_body(e) |
             ast::expr_cast(e, _) |
             ast::expr_unary(_, _, e) |
@@ -767,10 +724,10 @@ fn walk_expr(&mut self,
             }
 
             ast::expr_inline_asm(ref inline_asm) => {
-                foreach &(_, expr) in inline_asm.inputs.iter() {
+                for &(_, expr) in inline_asm.inputs.iter() {
                     self.walk_expr(expr, in_out, loop_scopes);
                 }
-                foreach &(_, expr) in inline_asm.outputs.iter() {
+                for &(_, expr) in inline_asm.outputs.iter() {
                     self.walk_expr(expr, in_out, loop_scopes);
                 }
             }
@@ -838,7 +795,7 @@ fn walk_exprs(&mut self,
                   exprs: &[@ast::expr],
                   in_out: &mut [uint],
                   loop_scopes: &mut ~[LoopScope]) {
-        foreach &expr in exprs.iter() {
+        for &expr in exprs.iter() {
             self.walk_expr(expr, in_out, loop_scopes);
         }
     }
@@ -847,7 +804,7 @@ fn walk_opt_expr(&mut self,
                      opt_expr: Option<@ast::expr>,
                      in_out: &mut [uint],
                      loop_scopes: &mut ~[LoopScope]) {
-        foreach &expr in opt_expr.iter() {
+        for &expr in opt_expr.iter() {
             self.walk_expr(expr, in_out, loop_scopes);
         }
     }
@@ -901,7 +858,7 @@ fn walk_pat_alternatives(&mut self,
         // alternatives, so we must treat this like an N-way select
         // statement.
         let initial_state = reslice(in_out).to_owned();
-        foreach &pat in pats.iter() {
+        for &pat in pats.iter() {
             let mut temp = initial_state.clone();
             self.walk_pat(pat, temp, loop_scopes);
             join_bits(&self.dfcx.oper, temp, in_out);
@@ -949,7 +906,7 @@ fn is_method_call(&self, expr: @ast::expr) -> bool {
 
     fn reset(&mut self, bits: &mut [uint]) {
         let e = if self.dfcx.oper.initial_value() {uint::max_value} else {0};
-        foreach b in bits.mut_iter() { *b = e; }
+        for b in bits.mut_iter() { *b = e; }
     }
 
     fn add_to_entry_set(&mut self, id: ast::NodeId, pred_bits: &[uint]) {
@@ -997,9 +954,9 @@ fn bits_to_str(words: &[uint]) -> ~str {
 
     // Note: this is a little endian printout of bytes.
 
-    foreach &word in words.iter() {
+    for &word in words.iter() {
         let mut v = word;
-        foreach _ in range(0u, uint::bytes) {
+        for _ in range(0u, uint::bytes) {
             result.push_char(sep);
             result.push_str(fmt!("%02x", v & 0xFF));
             v >>= 8;
@@ -1026,7 +983,7 @@ fn bitwise(out_vec: &mut [uint],
            op: &fn(uint, uint) -> uint) -> bool {
     assert_eq!(out_vec.len(), in_vec.len());
     let mut changed = false;
-    foreach i in range(0u, out_vec.len()) {
+    for 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;
index 469c1c2f93efed77ed3e62fcb23c91e7c5ad3d56..1bf5c944fabb00e0b8c5c34756d37f98ffb7b62a 100644 (file)
@@ -138,7 +138,7 @@ fn configure_main(ctxt: @mut EntryContext) {
                                    but you have one or more functions named 'main' that are not \
                                    defined at the crate level. Either move the definition or \
                                    attach the `#[main]` attribute to override this behavior.");
-                foreach &(_, span) in this.non_main_fns.iter() {
+                for &(_, span) in this.non_main_fns.iter() {
                     this.session.span_note(span, "here is a function named 'main'");
                 }
             }
index ae4bf596eb4e2bc7a65ea7ee53d9fbd0f9567164..28d24b169ca4ab187752b60505645de2dc7f3cfc 100644 (file)
@@ -247,7 +247,7 @@ pub fn iterate_until_fixed_point(&self,
         while changed {
             changed = false;
             iteration += 1;
-            foreach (i, edge) in self.edges.iter().enumerate() {
+            for (i, edge) in self.edges.iter().enumerate() {
                 changed |= op(iteration, EdgeIndex(i), edge);
             }
         }
index c604c3835bfe105d1e89eac2875ffd80eadfae4a..3bdf0c0f6dcb84c32db21792a769cb9c923b17a4 100644 (file)
@@ -238,7 +238,7 @@ fn check_fn(
     // Check kinds on free variables:
     do with_appropriate_checker(cx, fn_id) |chk| {
         let r = freevars::get_freevars(cx.tcx, fn_id);
-        foreach fv in r.iter() {
+        for fv in r.iter() {
             chk(cx, *fv);
         }
     }
@@ -256,7 +256,7 @@ pub fn check_expr(e: @expr, (cx, v): (Context, oldvisit::vt<Context>)) {
     };
     {
         let r = cx.tcx.node_type_substs.find(&type_parameter_id);
-        foreach ts in r.iter() {
+        for ts in r.iter() {
             let type_param_defs = match e.node {
               expr_path(_) => {
                 let did = ast_util::def_id_of_def(cx.tcx.def_map.get_copy(&e.id));
@@ -280,7 +280,7 @@ pub fn check_expr(e: @expr, (cx, v): (Context, oldvisit::vt<Context>)) {
                       ts.repr(cx.tcx),
                       type_param_defs.repr(cx.tcx));
             }
-            foreach (&ty, type_param_def) in ts.iter().zip(type_param_defs.iter()) {
+            for (&ty, type_param_def) in ts.iter().zip(type_param_defs.iter()) {
                 check_typaram_bounds(cx, type_parameter_id, e.span, ty, type_param_def)
             }
         }
@@ -318,11 +318,11 @@ fn check_ty(aty: &Ty, (cx, v): (Context, oldvisit::vt<Context>)) {
     match aty.node {
       ty_path(_, _, id) => {
           let r = cx.tcx.node_type_substs.find(&id);
-          foreach ts in r.iter() {
+          for ts in r.iter() {
               let did = ast_util::def_id_of_def(cx.tcx.def_map.get_copy(&id));
               let type_param_defs =
                   ty::lookup_item_type(cx.tcx, did).generics.type_param_defs;
-              foreach (&ty, type_param_def) in ts.iter().zip(type_param_defs.iter()) {
+              for (&ty, type_param_def) in ts.iter().zip(type_param_defs.iter()) {
                   check_typaram_bounds(cx, aty.id, aty.span, ty, type_param_def)
               }
           }
index e9c9bcf37de67bbdf12dfe4c7466d0a6bdc9ac24..0dfad430f4d656389ecb175cf347e41c67f510ad 100644 (file)
@@ -412,7 +412,7 @@ pub fn collect_local_language_items(&mut self) {
         let this: *mut LanguageItemCollector = &mut *self;
         visit_crate(self.crate, ((), mk_simple_visitor(@SimpleVisitor {
             visit_item: |item| {
-                foreach attribute in item.attrs.iter() {
+                for attribute in item.attrs.iter() {
                     unsafe {
                         (*this).match_and_collect_meta_item(
                             local_def(item.id),
index f867790ca13d9b0f3088a451bcb82a2fb7541054..bbcb40df77528f13b1deed76e89cdc6a29abc305 100644 (file)
@@ -286,7 +286,7 @@ enum LintSource {
  */
 pub fn get_lint_dict() -> LintDict {
     let mut map = HashMap::new();
-    foreach &(k, v) in lint_table.iter() {
+    for &(k, v) in lint_table.iter() {
         map.insert(k, v);
     }
     return map;
@@ -354,7 +354,7 @@ fn set_level(&mut self, lint: lint, level: level, src: LintSource) {
     }
 
     fn lint_to_str(&self, lint: lint) -> &'static str {
-        foreach (k, v) in self.dict.iter() {
+        for (k, v) in self.dict.iter() {
             if v.lint == lint {
                 return *k;
             }
@@ -390,7 +390,7 @@ fn span_lint(&self, lint: lint, span: span, msg: &str) {
             allow => fail!(),
         }
 
-        foreach &span in note.iter() {
+        for &span in note.iter() {
             self.tcx.sess.span_note(span, "lint level defined here");
         }
     }
@@ -474,7 +474,7 @@ fn process(@mut self, n: AttributedNode) {
         // pair instead of just one visitor.
         match n {
             Item(it) => {
-                foreach visitor in self.visitors.iter() {
+                for visitor in self.visitors.iter() {
                     match *visitor {
                         OldVisitor(orig, stopping) => {
                             (orig.visit_item)(it, (self, stopping));
@@ -486,7 +486,7 @@ fn process(@mut self, n: AttributedNode) {
                 }
             }
             Crate(c) => {
-                foreach visitor in self.visitors.iter() {
+                for visitor in self.visitors.iter() {
                     match *visitor {
                         OldVisitor(_, stopping) => {
                             oldvisit::visit_crate(c, (self, stopping))
@@ -501,7 +501,7 @@ fn process(@mut self, n: AttributedNode) {
             // item_stopping_visitor has overridden visit_fn(&fk_method(... ))
             // to be a no-op, so manually invoke visit_fn.
             Method(m) => {
-                foreach visitor in self.visitors.iter() {
+                for visitor in self.visitors.iter() {
                     match *visitor {
                         OldVisitor(orig, stopping) => {
                             let fk = oldvisit::fk_method(m.ident,
@@ -536,9 +536,9 @@ pub fn each_lint(sess: session::Session,
                  attrs: &[ast::Attribute],
                  f: &fn(@ast::MetaItem, level, @str) -> bool) -> bool {
     let xs = [allow, warn, deny, forbid];
-    foreach &level in xs.iter() {
+    for &level in xs.iter() {
         let level_name = level_to_str(level);
-        foreach attr in attrs.iter().filter(|m| level_name == m.name()) {
+        for attr in attrs.iter().filter(|m| level_name == m.name()) {
             let meta = attr.node.value;
             let metas = match meta.node {
                 ast::MetaList(_, ref metas) => metas,
@@ -547,7 +547,7 @@ pub fn each_lint(sess: session::Session,
                     loop;
                 }
             };
-            foreach meta in metas.iter() {
+            for meta in metas.iter() {
                 match meta.node {
                     ast::MetaWord(lintname) => {
                         if !f(*meta, level, lintname) {
@@ -751,7 +751,7 @@ fn check_ty(cx: &Context, ty: &ast::Ty) {
     }
 
     fn check_foreign_fn(cx: &Context, decl: &ast::fn_decl) {
-        foreach input in decl.inputs.iter() {
+        for input in decl.inputs.iter() {
             check_ty(cx, &input.ty);
         }
         check_ty(cx, &decl.output)
@@ -759,7 +759,7 @@ fn check_foreign_fn(cx: &Context, decl: &ast::fn_decl) {
 
     match it.node {
       ast::item_foreign_mod(ref nmod) if !nmod.abis.is_intrinsic() => {
-        foreach ni in nmod.items.iter() {
+        for ni in nmod.items.iter() {
             match ni.node {
                 ast::foreign_item_fn(ref decl, _) => {
                     check_foreign_fn(cx, decl);
@@ -801,7 +801,7 @@ fn check_type_for_lint(cx: &Context, lint: lint, span: span, ty: ty::t) {
 
 fn check_type(cx: &Context, span: span, ty: ty::t) {
     let xs = [managed_heap_memory, owned_heap_memory, heap_memory];
-    foreach lint in xs.iter() {
+    for lint in xs.iter() {
         check_type_for_lint(cx, *lint, span, ty);
     }
 }
@@ -820,7 +820,7 @@ fn check_item_heap(cx: &Context, it: &ast::item) {
     // If it's a struct, we also have to check the fields' types
     match it.node {
         ast::item_struct(struct_def, _) => {
-            foreach struct_field in struct_def.fields.iter() {
+            for struct_field in struct_def.fields.iter() {
                 check_type(cx, struct_field.span,
                            ty::node_id_to_type(cx.tcx,
                                                struct_field.node.id));
@@ -892,7 +892,7 @@ fn check_case(cx: &Context, sort: &str, ident: ast::ident, span: span) {
         }
         ast::item_enum(ref enum_definition, _) => {
             check_case(cx, "type", it.ident, it.span);
-            foreach variant in enum_definition.variants.iter() {
+            for variant in enum_definition.variants.iter() {
                 check_case(cx, "variant", variant.node.name, variant.span);
             }
         }
@@ -955,7 +955,7 @@ fn check_pat(cx: &Context, p: @ast::pat) {
     }
 
     fn visit_fn_decl(cx: &Context, fd: &ast::fn_decl) {
-        foreach arg in fd.inputs.iter() {
+        for arg in fd.inputs.iter() {
             if arg.is_mutbl {
                 check_pat(cx, arg.pat);
             }
@@ -994,7 +994,7 @@ fn lint_session(cx: @mut Context) -> @visit::Visitor<()> {
         match cx.tcx.sess.lints.pop(&id) {
             None => {},
             Some(l) => {
-                foreach (lint, span, msg) in l.consume_iter() {
+                for (lint, span, msg) in l.consume_iter() {
                     cx.span_lint(lint, span, msg)
                 }
             }
@@ -1094,7 +1094,7 @@ fn check_attrs(cx: @mut Context,
                 ast::item_struct(sdef, _) if it.vis == ast::public => {
                     check_attrs(cx, it.attrs, it.span,
                                 "missing documentation for a struct");
-                    foreach field in sdef.fields.iter() {
+                    for field in sdef.fields.iter() {
                         match field.node.kind {
                             ast::named_field(_, vis) if vis != ast::private => {
                                 check_attrs(cx, field.node.attrs, field.span,
@@ -1137,12 +1137,12 @@ pub fn check_crate(tcx: ty::ctxt, crate: @ast::Crate) {
     };
 
     // Install defaults.
-    foreach (_, spec) in cx.dict.iter() {
+    for (_, spec) in cx.dict.iter() {
         cx.set_level(spec.lint, spec.default, Default);
     }
 
     // Install command-line options, overriding defaults.
-    foreach &(lint, level) in tcx.sess.opts.lint_opts.iter() {
+    for &(lint, level) in tcx.sess.opts.lint_opts.iter() {
         cx.set_level(lint, level, CommandLine);
     }
 
@@ -1211,8 +1211,8 @@ pub fn check_crate(tcx: ty::ctxt, crate: @ast::Crate) {
 
     // If we missed any lints added to the session, then there's a bug somewhere
     // in the iteration code.
-    foreach (id, v) in tcx.sess.lints.iter() {
-        foreach t in v.iter() {
+    for (id, v) in tcx.sess.lints.iter() {
+        for t in v.iter() {
             match *t {
                 (lint, span, ref msg) =>
                     tcx.sess.span_bug(span, fmt!("unprocessed lint %? at %s: \
index 7794a37d7e21e8140b12435a18d58d3e009f4e9b..0387f344796e26b4f9c58cd05edabe2571262e2d 100644 (file)
@@ -360,7 +360,7 @@ fn visit_fn(fk: &oldvisit::fn_kind,
         debug!("creating fn_maps: %x", transmute(&*fn_maps));
     }
 
-    foreach arg in decl.inputs.iter() {
+    for arg in decl.inputs.iter() {
         do pat_util::pat_bindings(this.tcx.def_map, arg.pat)
                 |_bm, arg_id, _x, path| {
             debug!("adding argument %d", arg_id);
@@ -436,7 +436,7 @@ fn visit_local(local: @Local, (this, vt): (@mut IrMaps, vt<@mut IrMaps>)) {
 
 fn visit_arm(arm: &arm, (this, vt): (@mut IrMaps, vt<@mut IrMaps>)) {
     let def_map = this.tcx.def_map;
-    foreach pat in arm.pats.iter() {
+    for pat in arm.pats.iter() {
         do pat_util::pat_bindings(def_map, *pat) |bm, p_id, sp, path| {
             debug!("adding local variable %d from match with bm %?",
                    p_id, bm);
@@ -475,7 +475,7 @@ fn visit_expr(expr: @expr, (this, vt): (@mut IrMaps, vt<@mut IrMaps>)) {
         // construction site.
         let cvs = this.capture_map.get(&expr.id);
         let mut call_caps = ~[];
-        foreach cv in cvs.iter() {
+        for cv in cvs.iter() {
             match moves::moved_variable_node_id_from_def(cv.def) {
               Some(rv) => {
                 let cv_ln = this.add_live_node(FreeVarNode(cv.span));
@@ -512,7 +512,7 @@ fn visit_expr(expr: @expr, (this, vt): (@mut IrMaps, vt<@mut IrMaps>)) {
       // otherwise, live nodes are not required:
       expr_index(*) | expr_field(*) | expr_vstore(*) | expr_vec(*) |
       expr_call(*) | expr_method_call(*) | expr_tup(*) | expr_log(*) |
-      expr_binary(*) | expr_addr_of(*) | expr_loop_body(*) |
+      expr_binary(*) | expr_addr_of(*) |
       expr_do_body(*) | expr_cast(*) | expr_unary(*) | expr_break(_) |
       expr_again(_) | expr_lit(_) | expr_ret(*) | expr_block(*) |
       expr_assign(*) | expr_assign_op(*) | expr_mac(*) |
@@ -710,7 +710,7 @@ pub fn assigned_on_exit(&self, ln: LiveNode, var: Variable)
 
     pub fn indices(&self, ln: LiveNode, op: &fn(uint)) {
         let node_base_idx = self.idx(ln, Variable(0));
-        foreach var_idx in range(0u, self.ir.num_vars) {
+        for var_idx in range(0u, self.ir.num_vars) {
             op(node_base_idx + var_idx)
         }
     }
@@ -721,7 +721,7 @@ pub fn indices2(&self,
                     op: &fn(uint, uint)) {
         let node_base_idx = self.idx(ln, Variable(0u));
         let succ_base_idx = self.idx(succ_ln, Variable(0u));
-        foreach var_idx in range(0u, self.ir.num_vars) {
+        for var_idx in range(0u, self.ir.num_vars) {
             op(node_base_idx + var_idx, succ_base_idx + var_idx);
         }
     }
@@ -731,7 +731,7 @@ pub fn write_vars(&self,
                       ln: LiveNode,
                       test: &fn(uint) -> LiveNode) {
         let node_base_idx = self.idx(ln, Variable(0));
-        foreach var_idx in range(0u, self.ir.num_vars) {
+        for 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 @@ pub fn compute(&self, decl: &fn_decl, body: &Block) -> LiveNode {
         // hack to skip the loop unless debug! is enabled:
         debug!("^^ liveness computation results for body %d (entry=%s)",
                {
-                   foreach ln_idx in range(0u, self.ir.num_live_nodes) {
+                   for ln_idx in range(0u, self.ir.num_live_nodes) {
                        debug!("%s", self.ln_str(LiveNode(ln_idx)));
                    }
                    body.id
@@ -1084,7 +1084,7 @@ pub fn propagate_through_expr(&self, expr: @expr, succ: LiveNode)
             let ln = self.live_node(expr.id, expr.span);
             self.init_empty(ln, succ);
             let mut first_merge = true;
-            foreach arm in arms.iter() {
+            for arm in arms.iter() {
                 let body_succ =
                     self.propagate_through_block(&arm.body, succ);
                 let guard_succ =
@@ -1209,7 +1209,6 @@ pub fn propagate_through_expr(&self, expr: @expr, succ: LiveNode)
           }
 
           expr_addr_of(_, e) |
-          expr_loop_body(e) |
           expr_do_body(e) |
           expr_cast(e, _) |
           expr_unary(_, _, e) |
@@ -1461,12 +1460,12 @@ fn check_expr(expr: @expr, (this, vt): (@Liveness, vt<@Liveness>)) {
       }
 
       expr_inline_asm(ref ia) => {
-        foreach &(_, input) in ia.inputs.iter() {
+        for &(_, input) in ia.inputs.iter() {
           (vt.visit_expr)(input, (this, vt));
         }
 
         // Output operands must be lvalues
-        foreach &(_, out) in ia.outputs.iter() {
+        for &(_, out) in ia.outputs.iter() {
           match out.node {
             expr_addr_of(_, inner) => {
               this.check_lvalue(inner, vt);
@@ -1483,7 +1482,7 @@ fn check_expr(expr: @expr, (this, vt): (@Liveness, vt<@Liveness>)) {
       expr_call(*) | expr_method_call(*) | expr_if(*) | expr_match(*) |
       expr_while(*) | expr_loop(*) | expr_index(*) | expr_field(*) |
       expr_vstore(*) | expr_vec(*) | expr_tup(*) | expr_log(*) |
-      expr_binary(*) | expr_loop_body(*) | expr_do_body(*) |
+      expr_binary(*) | expr_do_body(*) |
       expr_cast(*) | expr_unary(*) | expr_ret(*) | expr_break(*) |
       expr_again(*) | expr_lit(_) | expr_block(*) |
       expr_mac(*) | expr_addr_of(*) | expr_struct(*) | expr_repeat(*) |
@@ -1606,7 +1605,7 @@ pub fn should_warn(&self, var: Variable) -> Option<@str> {
     }
 
     pub fn warn_about_unused_args(&self, decl: &fn_decl, entry_ln: LiveNode) {
-        foreach arg in decl.inputs.iter() {
+        for arg in decl.inputs.iter() {
             do pat_util::pat_bindings(self.tcx.def_map, arg.pat)
                     |_bm, p_id, sp, _n| {
                 let var = self.variable(p_id, sp);
@@ -1631,7 +1630,7 @@ pub fn warn_about_unused(&self,
                              -> bool {
         if !self.used_on_entry(ln, var) {
             let r = self.should_warn(var);
-            foreach name in r.iter() {
+            for name in r.iter() {
 
                 // annoying: for parameters in funcs like `fn(x: int)
                 // {ret}`, there is only one node, so asking about
@@ -1664,7 +1663,7 @@ pub fn warn_about_dead_assign(&self,
                                   var: Variable) {
         if self.live_on_exit(ln, var).is_none() {
             let r = self.should_warn(var);
-            foreach name in r.iter() {
+            for name in r.iter() {
                 self.tcx.sess.add_lint(dead_assignment, id, sp,
                     fmt!("value assigned to `%s` is never read", *name));
             }
index 010ac66b30d5066fde8543e4e095f9356c6e6851..6c5209cf504a6ad977d0931134e6a35e6a43157c 100644 (file)
@@ -375,7 +375,7 @@ pub fn cat_expr(&self, expr: @ast::expr) -> cmt {
     pub fn cat_expr_autoderefd(&self, expr: @ast::expr, autoderefs: uint)
                                -> cmt {
         let mut cmt = self.cat_expr_unadjusted(expr);
-        foreach deref in range(1u, autoderefs + 1) {
+        for deref in range(1u, autoderefs + 1) {
             cmt = self.cat_deref(expr, cmt, deref);
         }
         return cmt;
@@ -423,7 +423,7 @@ pub fn cat_expr_unadjusted(&self, expr: @ast::expr) -> cmt {
 
           ast::expr_addr_of(*) | ast::expr_call(*) |
           ast::expr_assign(*) | ast::expr_assign_op(*) |
-          ast::expr_fn_block(*) | ast::expr_ret(*) | ast::expr_loop_body(*) |
+          ast::expr_fn_block(*) | ast::expr_ret(*) |
           ast::expr_do_body(*) | ast::expr_unary(*) |
           ast::expr_method_call(*) | ast::expr_cast(*) | ast::expr_vstore(*) |
           ast::expr_vec(*) | ast::expr_tup(*) | ast::expr_if(*) |
@@ -906,7 +906,7 @@ pub fn cat_pattern(&self,
                         }
                     };
 
-                    foreach (i, &subpat) in subpats.iter().enumerate() {
+                    for (i, &subpat) in subpats.iter().enumerate() {
                         let subpat_ty = self.pat_ty(subpat); // see (*)
 
                         let subcmt =
@@ -919,7 +919,7 @@ pub fn cat_pattern(&self,
                 }
                 Some(&ast::def_fn(*)) |
                 Some(&ast::def_struct(*)) => {
-                    foreach (i, &subpat) in subpats.iter().enumerate() {
+                    for (i, &subpat) in subpats.iter().enumerate() {
                         let subpat_ty = self.pat_ty(subpat); // see (*)
                         let cmt_field =
                             self.cat_imm_interior(
@@ -929,7 +929,7 @@ pub fn cat_pattern(&self,
                     }
                 }
                 Some(&ast::def_static(*)) => {
-                    foreach &subpat in subpats.iter() {
+                    for &subpat in subpats.iter() {
                         self.cat_pattern(cmt, subpat, |x,y| op(x,y));
                     }
                 }
@@ -951,7 +951,7 @@ pub fn cat_pattern(&self,
 
           ast::pat_struct(_, ref field_pats, _) => {
             // {f1: p1, ..., fN: pN}
-            foreach fp in field_pats.iter() {
+            for fp in field_pats.iter() {
                 let field_ty = self.pat_ty(fp.pat); // see (*)
                 let cmt_field = self.cat_field(pat, cmt, fp.ident, field_ty);
                 self.cat_pattern(cmt_field, fp.pat, |x,y| op(x,y));
@@ -960,7 +960,7 @@ pub fn cat_pattern(&self,
 
           ast::pat_tup(ref subpats) => {
             // (p1, ..., pN)
-            foreach (i, &subpat) in subpats.iter().enumerate() {
+            for (i, &subpat) in subpats.iter().enumerate() {
                 let subpat_ty = self.pat_ty(subpat); // see (*)
                 let subcmt =
                     self.cat_imm_interior(
@@ -979,15 +979,15 @@ pub fn cat_pattern(&self,
 
           ast::pat_vec(ref before, slice, ref after) => {
               let elt_cmt = self.cat_index(pat, cmt, 0);
-              foreach &before_pat in before.iter() {
+              for &before_pat in before.iter() {
                   self.cat_pattern(elt_cmt, before_pat, |x,y| op(x,y));
               }
-              foreach &slice_pat in slice.iter() {
+              for &slice_pat in slice.iter() {
                   let slice_ty = self.pat_ty(slice_pat);
                   let slice_cmt = self.cat_rvalue_node(pat, slice_ty);
                   self.cat_pattern(slice_cmt, slice_pat, |x,y| op(x,y));
               }
-              foreach &after_pat in after.iter() {
+              for &after_pat in after.iter() {
                   self.cat_pattern(elt_cmt, after_pat, |x,y| op(x,y));
               }
           }
@@ -1076,7 +1076,7 @@ pub fn field_mutbl(tcx: ty::ctxt,
     match ty::get(base_ty).sty {
       ty::ty_struct(did, _) => {
         let r = ty::lookup_struct_fields(tcx, did);
-        foreach fld in r.iter() {
+        for fld in r.iter() {
             if fld.ident == f_name {
                 return Some(ast::m_imm);
             }
@@ -1086,7 +1086,7 @@ pub fn field_mutbl(tcx: ty::ctxt,
         match tcx.def_map.get_copy(&node_id) {
           ast::def_variant(_, variant_id) => {
             let r = ty::lookup_struct_fields(tcx, variant_id);
-            foreach fld in r.iter() {
+            for fld in r.iter() {
                 if fld.ident == f_name {
                     return Some(ast::m_imm);
                 }
index 06588f228556734ff5d73e715b4b750dcdc839ab..0c553843cd1b2dd713eaec618d30ea25da345679 100644 (file)
@@ -231,7 +231,7 @@ fn compute_modes_for_local<'a>(local: @Local,
                                (cx, v): (VisitContext,
                                          vt<VisitContext>)) {
     cx.use_pat(local.pat);
-    foreach &init in local.init.iter() {
+    for &init in local.init.iter() {
         cx.use_expr(init, Read, v);
     }
 }
@@ -243,7 +243,7 @@ fn compute_modes_for_fn(fk: &oldvisit::fn_kind,
                         id: NodeId,
                         (cx, v): (VisitContext,
                                   vt<VisitContext>)) {
-    foreach a in decl.inputs.iter() {
+    for a in decl.inputs.iter() {
         cx.use_pat(a.pat);
     }
     oldvisit::visit_fn(fk, decl, body, span, id, (cx, v));
@@ -258,7 +258,7 @@ fn compute_modes_for_expr(expr: @expr,
 
 impl VisitContext {
     pub fn consume_exprs(&self, exprs: &[@expr], visitor: vt<VisitContext>) {
-        foreach expr in exprs.iter() {
+        for expr in exprs.iter() {
             self.consume_expr(*expr, visitor);
         }
     }
@@ -289,11 +289,11 @@ pub fn consume_block(&self, blk: &Block, visitor: vt<VisitContext>) {
 
         debug!("consume_block(blk.id=%?)", blk.id);
 
-        foreach stmt in blk.stmts.iter() {
+        for stmt in blk.stmts.iter() {
             (visitor.visit_stmt)(*stmt, (*self, visitor));
         }
 
-        foreach tail_expr in blk.expr.iter() {
+        for tail_expr in blk.expr.iter() {
             self.consume_expr(*tail_expr, visitor);
         }
     }
@@ -329,7 +329,7 @@ pub fn use_expr(&self,
                     Move => {
                         let def = self.tcx.def_map.get_copy(&expr.id);
                         let r = moved_variable_node_id_from_def(def);
-                        foreach &id in r.iter() {
+                        for &id in r.iter() {
                             self.move_maps.moved_variables_set.insert(id);
                         }
                     }
@@ -393,11 +393,11 @@ pub fn use_expr(&self,
             }
 
             expr_struct(_, ref fields, opt_with) => {
-                foreach field in fields.iter() {
+                for field in fields.iter() {
                     self.consume_expr(field.expr, visitor);
                 }
 
-                foreach with_expr in opt_with.iter() {
+                for with_expr in opt_with.iter() {
                     // If there are any fields whose type is move-by-default,
                     // then `with` is consumed, otherwise it is only read
                     let with_ty = ty::expr_ty(self.tcx, *with_expr);
@@ -436,7 +436,7 @@ pub fn use_expr(&self,
             expr_if(cond_expr, ref then_blk, opt_else_expr) => {
                 self.consume_expr(cond_expr, visitor);
                 self.consume_block(then_blk, visitor);
-                foreach else_expr in opt_else_expr.iter() {
+                for else_expr in opt_else_expr.iter() {
                     self.consume_expr(*else_expr, visitor);
                 }
             }
@@ -444,7 +444,7 @@ pub fn use_expr(&self,
             expr_match(discr, ref arms) => {
                 // We must do this first so that `arms_have_by_move_bindings`
                 // below knows which bindings are moves.
-                foreach arm in arms.iter() {
+                for arm in arms.iter() {
                     self.consume_arm(arm, visitor);
                 }
 
@@ -511,7 +511,7 @@ pub fn use_expr(&self,
             }
 
             expr_ret(ref opt_expr) => {
-                foreach expr in opt_expr.iter() {
+                for expr in opt_expr.iter() {
                     self.consume_expr(*expr, visitor);
                 }
             }
@@ -541,13 +541,12 @@ pub fn use_expr(&self,
                 self.consume_expr(count, visitor);
             }
 
-            expr_loop_body(base) |
             expr_do_body(base) => {
                 self.use_expr(base, comp_mode, visitor);
             }
 
             expr_fn_block(ref decl, ref body) => {
-                foreach a in decl.inputs.iter() {
+                for a in decl.inputs.iter() {
                     self.use_pat(a.pat);
                 }
                 let cap_vars = self.compute_captures(expr.id);
@@ -581,7 +580,7 @@ pub fn use_overloaded_operator(&self,
 
         // for overloaded operatrs, we are always passing in a
         // borrowed pointer, so it's always read mode:
-        foreach arg_expr in arg_exprs.iter() {
+        for arg_expr in arg_exprs.iter() {
             self.use_expr(*arg_expr, Read, visitor);
         }
 
@@ -589,11 +588,11 @@ pub fn use_overloaded_operator(&self,
     }
 
     pub fn consume_arm(&self, arm: &arm, visitor: vt<VisitContext>) {
-        foreach pat in arm.pats.iter() {
+        for pat in arm.pats.iter() {
             self.use_pat(*pat);
         }
 
-        foreach guard in arm.guard.iter() {
+        for guard in arm.guard.iter() {
             self.consume_expr(*guard, visitor);
         }
 
@@ -640,7 +639,7 @@ pub fn use_fn_args(&self,
                        arg_exprs: &[@expr],
                        visitor: vt<VisitContext>) {
         //! Uses the argument expressions.
-        foreach arg_expr in arg_exprs.iter() {
+        for arg_expr in arg_exprs.iter() {
             self.use_fn_arg(*arg_expr, visitor);
         }
     }
@@ -655,8 +654,8 @@ pub fn arms_have_by_move_bindings(&self,
                                       arms: &[arm])
                                       -> Option<@pat> {
         let mut ret = None;
-        foreach arm in arms.iter() {
-            foreach &pat in arm.pats.iter() {
+        for arm in arms.iter() {
+            for &pat in arm.pats.iter() {
                 let cont = do ast_util::walk_pat(pat) |p| {
                     if moves_map.contains(&p.id) {
                         ret = Some(p);
index e858ec26304f419e23a768bb00ad1ef2e9e78cec..76d1d0b05ffbc62364479d2433f295f6f2710828 100644 (file)
@@ -50,7 +50,7 @@ pub fn check_crate<'mm>(tcx: ty::ctxt,
                 *count += 1;
             }
             item_impl(_, _, _, ref methods) => {
-                foreach method in methods.iter() {
+                for method in methods.iter() {
                     privileged_items.push(method.id);
                     *count += 1;
                 }
@@ -58,7 +58,7 @@ pub fn check_crate<'mm>(tcx: ty::ctxt,
                 *count += 1;
             }
             item_foreign_mod(ref foreign_mod) => {
-                foreach foreign_item in foreign_mod.items.iter() {
+                for foreign_item in foreign_mod.items.iter() {
                     privileged_items.push(foreign_item.id);
                     *count += 1;
                 }
@@ -70,7 +70,7 @@ pub fn check_crate<'mm>(tcx: ty::ctxt,
     // Adds items that are privileged to this scope.
     let add_privileged_items: @fn(&[@ast::item]) -> uint = |items| {
         let mut count = 0;
-        foreach &item in items.iter() {
+        for &item in items.iter() {
             add_privileged_item(item, &mut count);
         }
         count
@@ -206,7 +206,7 @@ pub fn check_crate<'mm>(tcx: ty::ctxt,
     let check_field: @fn(span: span, id: ast::def_id, ident: ast::ident) =
             |span, id, ident| {
         let fields = ty::lookup_struct_fields(tcx, id);
-        foreach field in fields.iter() {
+        for field in fields.iter() {
             if field.ident != ident { loop; }
             if field.vis == private {
                 tcx.sess.span_err(span, fmt!("field `%s` is private",
@@ -357,7 +357,7 @@ pub fn check_crate<'mm>(tcx: ty::ctxt,
         visit_block: |block, (method_map, visitor)| {
             // Gather up all the privileged items.
             let mut n_added = 0;
-            foreach stmt in block.stmts.iter() {
+            for stmt in block.stmts.iter() {
                 match stmt.node {
                     stmt_decl(decl, _) => {
                         match decl.node {
@@ -430,7 +430,7 @@ pub fn check_crate<'mm>(tcx: ty::ctxt,
                         ty_struct(id, _) => {
                             if id.crate != LOCAL_CRATE ||
                                     !privileged_items.iter().any(|x| x == &(id.node)) {
-                                foreach field in (*fields).iter() {
+                                for field in (*fields).iter() {
                                         debug!("(privacy checking) checking \
                                                 field in struct literal");
                                     check_field(expr.span, id, field.ident);
@@ -442,7 +442,7 @@ pub fn check_crate<'mm>(tcx: ty::ctxt,
                                     !privileged_items.iter().any(|x| x == &(id.node)) {
                                 match tcx.def_map.get_copy(&expr.id) {
                                     def_variant(_, variant_id) => {
-                                        foreach field in (*fields).iter() {
+                                        for field in (*fields).iter() {
                                                 debug!("(privacy checking) \
                                                         checking field in \
                                                         struct variant \
@@ -494,7 +494,7 @@ struct variant \
                         ty_struct(id, _) => {
                             if id.crate != LOCAL_CRATE ||
                                     !privileged_items.iter().any(|x| x == &(id.node)) {
-                                foreach field in fields.iter() {
+                                for field in fields.iter() {
                                         debug!("(privacy checking) checking \
                                                 struct pattern");
                                     check_field(pattern.span, id, field.ident);
@@ -506,7 +506,7 @@ struct variant \
                                     !privileged_items.iter().any(|x| x == &enum_id.node) {
                                 match tcx.def_map.find(&pattern.id) {
                                     Some(&def_variant(_, variant_id)) => {
-                                        foreach field in fields.iter() {
+                                        for field in fields.iter() {
                                             debug!("(privacy checking) \
                                                     checking field in \
                                                     struct variant pattern");
index 761a34b72e534ab40bf0b573cc676ef6db95d9b0..33a8960baee5bb595212726b1b4d8b9ec7f6eb61 100644 (file)
@@ -134,7 +134,7 @@ fn mark_public_symbols(&self, crate: @Crate) {
                     }
                     item_enum(ref enum_def, _) => {
                         if privacy_context == PublicContext {
-                            foreach variant in enum_def.variants.iter() {
+                            for variant in enum_def.variants.iter() {
                                 reachable_symbols.insert(variant.node.id);
                             }
                         }
@@ -153,7 +153,7 @@ fn mark_public_symbols(&self, crate: @Crate) {
                         };
 
                         // Mark all public methods as reachable.
-                        foreach &method in methods.iter() {
+                        for &method in methods.iter() {
                             if should_be_considered_public(method) {
                                 reachable_symbols.insert(method.id);
                             }
@@ -162,7 +162,7 @@ fn mark_public_symbols(&self, crate: @Crate) {
                         if generics_require_inlining(generics) {
                             // If the impl itself has generics, add all public
                             // symbols to the worklist.
-                            foreach &method in methods.iter() {
+                            for &method in methods.iter() {
                                 if should_be_considered_public(method) {
                                     worklist.push(method.id)
                                 }
@@ -170,7 +170,7 @@ fn mark_public_symbols(&self, crate: @Crate) {
                         } else {
                             // Otherwise, add only public methods that have
                             // generics to the worklist.
-                            foreach method in methods.iter() {
+                            for method in methods.iter() {
                                 let generics = &method.generics;
                                 let attrs = &method.attrs;
                                 if generics_require_inlining(generics) ||
@@ -184,7 +184,7 @@ fn mark_public_symbols(&self, crate: @Crate) {
                     item_trait(_, _, ref trait_methods) => {
                         // Mark all provided methods as reachable.
                         if privacy_context == PublicContext {
-                            foreach trait_method in trait_methods.iter() {
+                            for trait_method in trait_methods.iter() {
                                 match *trait_method {
                                     provided(method) => {
                                         reachable_symbols.insert(method.id);
@@ -390,7 +390,7 @@ fn propagate(&self) {
     // this properly would result in the necessity of computing *type*
     // reachability, which might result in a compile time loss.
     fn mark_destructors_reachable(&self) {
-        foreach (_, destructor_def_id) in self.tcx.destructor_for_type.iter() {
+        for (_, destructor_def_id) in self.tcx.destructor_for_type.iter() {
             if destructor_def_id.crate == LOCAL_CRATE {
                 self.reachable_symbols.insert(destructor_def_id.node);
             }
index 3aa2f3278b985a4b93cd8ef10ddaa6e3ce99098f..2d121209118f8dc28bb8ac69ec3eb6063035cce2 100644 (file)
@@ -198,7 +198,7 @@ pub fn sub_free_region(&self, sub: FreeRegion, sup: FreeRegion) -> bool {
         while i < queue.len() {
             match self.free_region_map.find(&queue[i]) {
                 Some(parents) => {
-                    foreach parent in parents.iter() {
+                    for parent in parents.iter() {
                         if *parent == sup {
                             return true;
                         }
@@ -318,7 +318,7 @@ fn ancestors_of(this: &RegionMaps, scope: ast::NodeId)
 fn parent_to_expr(cx: Context, child_id: ast::NodeId, sp: span) {
     debug!("region::parent_to_expr(span=%?)",
            cx.sess.codemap.span_to_str(sp));
-    foreach parent_id in cx.parent.iter() {
+    for parent_id in cx.parent.iter() {
         cx.region_maps.record_parent(child_id, *parent_id);
     }
 }
@@ -718,7 +718,7 @@ fn determine_rp_in_fn(fk: &oldvisit::fn_kind,
                                       oldvisit::vt<@mut DetermineRpCtxt>)) {
     do cx.with(cx.item_id, false) {
         do cx.with_ambient_variance(rv_contravariant) {
-            foreach a in decl.inputs.iter() {
+            for a in decl.inputs.iter() {
                 (visitor.visit_ty)(&a.ty, (cx, visitor));
             }
         }
@@ -830,7 +830,7 @@ fn determine_rp_in_ty(ty: &ast::Ty,
       ast::ty_path(ref path, _, _) => {
         // type parameters are---for now, anyway---always invariant
         do cx.with_ambient_variance(rv_invariant) {
-            foreach tp in path.types.iter() {
+            for tp in path.types.iter() {
                 (visitor.visit_ty)(tp, (cx, visitor));
             }
         }
@@ -843,7 +843,7 @@ fn determine_rp_in_ty(ty: &ast::Ty,
         do cx.with(cx.item_id, false) {
             // parameters are contravariant
             do cx.with_ambient_variance(rv_contravariant) {
-                foreach a in decl.inputs.iter() {
+                for a in decl.inputs.iter() {
                     (visitor.visit_ty)(&a.ty, (cx, visitor));
                 }
             }
@@ -923,7 +923,7 @@ pub fn determine_rp_in_crate(sess: Session,
             match cx.dep_map.find(&c_id) {
               None => {}
               Some(deps) => {
-                foreach dep in deps.iter() {
+                for dep in deps.iter() {
                     let v = add_variance(dep.ambient_variance, c_variance);
                     cx.add_rp(dep.id, v);
                 }
@@ -935,7 +935,7 @@ pub fn determine_rp_in_crate(sess: Session,
     debug!("%s", {
         debug!("Region variance results:");
         let region_paramd_items = cx.region_paramd_items;
-        foreach (&key, &value) in region_paramd_items.iter() {
+        for (&key, &value) in region_paramd_items.iter() {
             debug!("item %? (%s) is parameterized with variance %?",
                    key,
                    ast_map::node_id_to_str(ast_map, key,
index 5a70f251aca461aa8726fac7193ab9463cf92ef8..60ecff39d8554baa1597e657794e9196272e248b 100644 (file)
@@ -1037,7 +1037,7 @@ pub fn add_child(@mut self,
                              self.session.str_of(name)));
                     {
                         let r = child.span_for_namespace(ns);
-                        foreach sp in r.iter() {
+                        for sp in r.iter() {
                             self.session.span_note(*sp,
                                  fmt!("first definition of %s `%s` here",
                                       namespace_error_to_str(duplicate_type),
@@ -1057,7 +1057,7 @@ pub fn block_needs_anonymous_module(@mut self, block: &Block) -> bool {
         }
 
         // Check each statement.
-        foreach statement in block.stmts.iter() {
+        for statement in block.stmts.iter() {
             match statement.node {
                 stmt_decl(declaration, _) => {
                     match declaration.node {
@@ -1179,7 +1179,7 @@ pub fn build_reduced_graph_for_item(@mut self,
                 name_bindings.define_type
                     (privacy, def_ty(local_def(item.id)), sp);
 
-                foreach variant in (*enum_definition).variants.iter() {
+                for variant in (*enum_definition).variants.iter() {
                     self.build_reduced_graph_for_variant(
                         variant,
                         local_def(item.id),
@@ -1264,7 +1264,7 @@ pub fn build_reduced_graph_for_item(@mut self,
                         };
 
                         // For each method...
-                        foreach method in methods.iter() {
+                        for method in methods.iter() {
                             // Add the method to the module.
                             let ident = method.ident;
                             let (method_name_bindings, _) =
@@ -1316,7 +1316,7 @@ pub fn build_reduced_graph_for_item(@mut self,
 
                 // Add the names of all the methods to the trait info.
                 let mut method_names = HashMap::new();
-                foreach method in methods.iter() {
+                for method in methods.iter() {
                     let ty_m = trait_method_to_ty_method(method);
 
                     let ident = ty_m.ident;
@@ -1353,7 +1353,7 @@ pub fn build_reduced_graph_for_item(@mut self,
                 }
 
                 let def_id = local_def(item.id);
-                foreach (name, _) in method_names.iter() {
+                for (name, _) in method_names.iter() {
                     if !self.method_map.contains_key(name) {
                         self.method_map.insert(*name, HashSet::new());
                     }
@@ -1422,7 +1422,7 @@ pub fn build_reduced_graph_for_view_item(@mut self,
         let privacy = visibility_to_privacy(view_item.vis);
         match view_item.node {
             view_item_use(ref view_paths) => {
-                foreach view_path in view_paths.iter() {
+                for view_path in view_paths.iter() {
                     // Extract and intern the module part of the path. For
                     // globs and lists, the path is found directly in the AST;
                     // for simple paths we have to munge the path a little.
@@ -1433,7 +1433,7 @@ pub fn build_reduced_graph_for_view_item(@mut self,
                             let path_len = full_path.idents.len();
                             assert!(path_len != 0);
 
-                            foreach (i, ident) in full_path.idents.iter().enumerate() {
+                            for (i, ident) in full_path.idents.iter().enumerate() {
                                 if i != path_len - 1 {
                                     module_path.push(*ident);
                                 }
@@ -1442,7 +1442,7 @@ pub fn build_reduced_graph_for_view_item(@mut self,
 
                         view_path_glob(ref module_ident_path, _) |
                         view_path_list(ref module_ident_path, _, _) => {
-                            foreach ident in module_ident_path.idents.iter() {
+                            for ident in module_ident_path.idents.iter() {
                                 module_path.push(*ident);
                             }
                         }
@@ -1463,7 +1463,7 @@ pub fn build_reduced_graph_for_view_item(@mut self,
                                                         id);
                         }
                         view_path_list(_, ref source_idents, _) => {
-                            foreach source_ident in source_idents.iter() {
+                            for source_ident in source_idents.iter() {
                                 let name = source_ident.node.name;
                                 let subclass = @SingleImport(name, name);
                                 self.build_import_directive(
@@ -1657,7 +1657,7 @@ pub fn handle_external_def(@mut self,
               let method_def_ids =
                 get_trait_method_def_ids(self.session.cstore, def_id);
               let mut interned_method_names = HashSet::new();
-              foreach &method_def_id in method_def_ids.iter() {
+              for &method_def_id in method_def_ids.iter() {
                   let (method_name, explicit_self) =
                       get_method_name_and_explicit_self(self.session.cstore,
                                                         method_def_id);
@@ -1672,7 +1672,7 @@ trait method '%s'",
                       interned_method_names.insert(method_name);
                   }
               }
-              foreach name in interned_method_names.iter() {
+              for name in interned_method_names.iter() {
                   if !self.method_map.contains_key(name) {
                       self.method_map.insert(*name, HashSet::new());
                   }
@@ -1741,7 +1741,7 @@ pub fn build_reduced_graph_for_external_crate(@mut self,
             // need to.
 
             let mut current_module = root;
-            foreach ident_str in pieces.iter() {
+            for ident_str in pieces.iter() {
                 let ident = self.session.ident_of(*ident_str);
                 // Create or reuse a graph node for the child.
                 let (child_name_bindings, new_parent) =
@@ -1861,7 +1861,7 @@ pub fn build_reduced_graph_for_external_crate(@mut self,
                                     // Add each static method to the module.
                                     let new_parent = ModuleReducedGraphParent(
                                         type_module);
-                                    foreach static_method_info in static_methods.iter() {
+                                    for static_method_info in static_methods.iter() {
                                         let ident = static_method_info.ident;
                                         debug!("(building reduced graph for \
                                                  external crate) creating \
@@ -1993,7 +1993,7 @@ pub fn resolve_imports_for_module_subtree(@mut self,
                self.module_to_str(module_));
         self.resolve_imports_for_module(module_);
 
-        foreach (_, &child_node) in module_.children.iter() {
+        for (_, &child_node) in module_.children.iter() {
             match child_node.get_module_if_available() {
                 None => {
                     // Nothing to do.
@@ -2004,7 +2004,7 @@ pub fn resolve_imports_for_module_subtree(@mut self,
             }
         }
 
-        foreach (_, &child_module) in module_.anonymous_children.iter() {
+        for (_, &child_module) in module_.anonymous_children.iter() {
             self.resolve_imports_for_module_subtree(child_module);
         }
     }
@@ -2048,7 +2048,7 @@ pub fn resolve_imports_for_module(@mut self, module: @mut Module) {
     pub fn idents_to_str(@mut self, idents: &[ident]) -> ~str {
         let mut first = true;
         let mut result = ~"";
-        foreach ident in idents.iter() {
+        for ident in idents.iter() {
             if first {
                 first = false
             } else {
@@ -2447,7 +2447,7 @@ pub fn resolve_glob_import(@mut self,
         assert_eq!(containing_module.glob_count, 0);
 
         // Add all resolved imports from the containing module.
-        foreach (ident, target_import_resolution) in containing_module.import_resolutions.iter() {
+        for (ident, target_import_resolution) in containing_module.import_resolutions.iter() {
 
             debug!("(resolving glob import) writing module resolution \
                     %? into `%s`",
@@ -2531,12 +2531,12 @@ pub fn resolve_glob_import(@mut self,
         };
 
         // Add all children from the containing module.
-        foreach (&ident, name_bindings) in containing_module.children.iter() {
+        for (&ident, name_bindings) in containing_module.children.iter() {
             merge_import_resolution(ident, *name_bindings);
         }
 
         // Add external module children from the containing module.
-        foreach (&ident, module) in containing_module.external_module_children.iter() {
+        for (&ident, module) in containing_module.external_module_children.iter() {
             let name_bindings =
                 @mut Resolver::create_name_bindings_from_module(*module);
             merge_import_resolution(ident, name_bindings);
@@ -3108,7 +3108,7 @@ pub fn report_unresolved_imports(@mut self, module_: @mut Module) {
         }
 
         // Descend into children and anonymous children.
-        foreach (_, &child_node) in module_.children.iter() {
+        for (_, &child_node) in module_.children.iter() {
             match child_node.get_module_if_available() {
                 None => {
                     // Continue.
@@ -3119,7 +3119,7 @@ pub fn report_unresolved_imports(@mut self, module_: @mut Module) {
             }
         }
 
-        foreach (_, &module_) in module_.anonymous_children.iter() {
+        for (_, &module_) in module_.anonymous_children.iter() {
             self.report_unresolved_imports(module_);
         }
     }
@@ -3167,7 +3167,7 @@ pub fn record_exports_for_module_subtree(@mut self,
 
         self.record_exports_for_module(module_);
 
-        foreach (_, &child_name_bindings) in module_.children.iter() {
+        for (_, &child_name_bindings) in module_.children.iter() {
             match child_name_bindings.get_module_if_available() {
                 None => {
                     // Nothing to do.
@@ -3178,7 +3178,7 @@ pub fn record_exports_for_module_subtree(@mut self,
             }
         }
 
-        foreach (_, &child_module) in module_.anonymous_children.iter() {
+        for (_, &child_module) in module_.anonymous_children.iter() {
             self.record_exports_for_module_subtree(child_module);
         }
     }
@@ -3228,14 +3228,14 @@ pub fn add_exports_of_namebindings(@mut self,
     pub fn add_exports_for_module(@mut self,
                                   exports2: &mut ~[Export2],
                                   module_: @mut Module) {
-        foreach (ident, importresolution) in module_.import_resolutions.iter() {
+        for (ident, importresolution) in module_.import_resolutions.iter() {
             if importresolution.privacy != Public {
                 debug!("(computing exports) not reexporting private `%s`",
                        self.session.str_of(*ident));
                 loop;
             }
             let xs = [TypeNS, ValueNS];
-            foreach ns in xs.iter() {
+            for ns in xs.iter() {
                 match importresolution.target_for_namespace(*ns) {
                     Some(target) => {
                         debug!("(computing exports) maybe reexport '%s'",
@@ -3483,8 +3483,8 @@ pub fn resolve_item(@mut self, item: @item, visitor: ResolveVisitor) {
             // enum item: resolve all the variants' discrs,
             // then resolve the ty params
             item_enum(ref enum_def, ref generics) => {
-                foreach variant in (*enum_def).variants.iter() {
-                    foreach dis_expr in variant.node.disr_expr.iter() {
+                for variant in (*enum_def).variants.iter() {
+                    for dis_expr in variant.node.disr_expr.iter() {
                         // resolve the discriminator expr
                         // as a constant
                         self.with_constant_rib(|| {
@@ -3541,11 +3541,11 @@ pub fn resolve_item(@mut self, item: @item, visitor: ResolveVisitor) {
                                                  visitor);
 
                     // Resolve derived traits.
-                    foreach trt in traits.iter() {
+                    for trt in traits.iter() {
                         self.resolve_trait_reference(item.id, trt, visitor, TraitDerivation);
                     }
 
-                    foreach method in (*methods).iter() {
+                    for method in (*methods).iter() {
                         // Create a new rib for the method-specific type
                         // parameters.
                         //
@@ -3565,7 +3565,7 @@ pub fn resolve_item(@mut self, item: @item, visitor: ResolveVisitor) {
                                     &ty_m.generics.ty_params,
                                     visitor);
 
-                                foreach argument in ty_m.decl.inputs.iter() {
+                                for argument in ty_m.decl.inputs.iter() {
                                     self.resolve_type(&argument.ty, visitor);
                                 }
 
@@ -3602,7 +3602,7 @@ pub fn resolve_item(@mut self, item: @item, visitor: ResolveVisitor) {
 
             item_foreign_mod(ref foreign_module) => {
                 do self.with_scope(Some(item.ident)) {
-                    foreach foreign_item in foreign_module.items.iter() {
+                    for foreign_item in foreign_module.items.iter() {
                         match foreign_item.node {
                             foreign_item_fn(_, ref generics) => {
                                 self.with_type_parameter_rib(
@@ -3658,7 +3658,7 @@ pub fn with_type_parameter_rib(@mut self,
                 let function_type_rib = @Rib(rib_kind);
                 self.type_ribs.push(function_type_rib);
 
-                foreach (index, type_parameter) in generics.ty_params.iter().enumerate() {
+                for (index, type_parameter) in generics.ty_params.iter().enumerate() {
                     let name = type_parameter.ident;
                     debug!("with_type_parameter_rib: %d %d", node_id,
                            type_parameter.id);
@@ -3749,7 +3749,7 @@ pub fn resolve_function(@mut self,
                     // Nothing to do.
                 }
                 Some(declaration) => {
-                    foreach argument in declaration.inputs.iter() {
+                    for argument in declaration.inputs.iter() {
                         let binding_mode = ArgumentIrrefutableMode;
                         let mutability =
                             if argument.is_mutbl {Mutable} else {Immutable};
@@ -3781,8 +3781,8 @@ pub fn resolve_function(@mut self,
     pub fn resolve_type_parameters(@mut self,
                                    type_parameters: &OptVec<TyParam>,
                                    visitor: ResolveVisitor) {
-        foreach type_parameter in type_parameters.iter() {
-            foreach bound in type_parameter.bounds.iter() {
+        for type_parameter in type_parameters.iter() {
+            for bound in type_parameter.bounds.iter() {
                 self.resolve_type_parameter_bound(type_parameter.id, bound, visitor);
             }
         }
@@ -3831,7 +3831,7 @@ pub fn resolve_struct(@mut self,
                           fields: &[@struct_field],
                           visitor: ResolveVisitor) {
         let mut ident_map = HashMap::new::<ast::ident, @struct_field>();
-        foreach &field in fields.iter() {
+        for &field in fields.iter() {
             match field.node.kind {
                 named_field(ident, _) => {
                     match ident_map.find(&ident) {
@@ -3860,7 +3860,7 @@ pub fn resolve_struct(@mut self,
             self.resolve_type_parameters(&generics.ty_params, visitor);
 
             // Resolve fields.
-            foreach field in fields.iter() {
+            for field in fields.iter() {
                 self.resolve_type(&field.node.ty, visitor);
             }
         }
@@ -3920,7 +3920,7 @@ pub fn resolve_implementation(@mut self,
                     let mut new_trait_refs = ~[];
                     {
                         let r = self.def_map.find(&trait_reference.ref_id);
-                        foreach &def in r.iter() {
+                        for &def in r.iter() {
                             new_trait_refs.push(def_id_of_def(*def));
                         }
                     }
@@ -3936,7 +3936,7 @@ pub fn resolve_implementation(@mut self,
             // Resolve the self type.
             self.resolve_type(self_type, visitor);
 
-            foreach method in methods.iter() {
+            for method in methods.iter() {
                 // We also need a new scope for the method-specific
                 // type parameters.
                 self.resolve_method(MethodRibKind(
@@ -4016,10 +4016,10 @@ pub fn binding_mode_map(@mut self, pat: @pat) -> BindingMap {
     pub fn check_consistent_bindings(@mut self, arm: &arm) {
         if arm.pats.len() == 0 { return; }
         let map_0 = self.binding_mode_map(arm.pats[0]);
-        foreach (i, p) in arm.pats.iter().enumerate() {
+        for (i, p) in arm.pats.iter().enumerate() {
             let map_i = self.binding_mode_map(*p);
 
-            foreach (&key, &binding_0) in map_0.iter() {
+            for (&key, &binding_0) in map_0.iter() {
                 match map_i.find(&key) {
                   None => {
                     self.session.span_err(
@@ -4040,7 +4040,7 @@ pub fn check_consistent_bindings(@mut self, arm: &arm) {
                 }
             }
 
-            foreach (&key, &binding) in map_i.iter() {
+            for (&key, &binding) in map_i.iter() {
                 if !map_0.contains_key(&key) {
                     self.session.span_err(
                         binding.span,
@@ -4056,7 +4056,7 @@ pub fn resolve_arm(@mut self, arm: &arm, visitor: ResolveVisitor) {
         self.value_ribs.push(@Rib(NormalRibKind));
 
         let bindings_list = @mut HashMap::new();
-        foreach pattern in arm.pats.iter() {
+        for pattern in arm.pats.iter() {
             self.resolve_pattern(*pattern, RefutableMode, Immutable,
                                  Some(bindings_list), visitor);
         }
@@ -4162,7 +4162,7 @@ pub fn resolve_type(@mut self, ty: &Ty, visitor: ResolveVisitor) {
                 }
 
                 do bounds.map |bound_vec| {
-                    foreach bound in bound_vec.iter() {
+                    for bound in bound_vec.iter() {
                         self.resolve_type_parameter_bound(ty.id, bound, visitor);
                     }
                 };
@@ -4170,7 +4170,7 @@ pub fn resolve_type(@mut self, ty: &Ty, visitor: ResolveVisitor) {
 
             ty_closure(c) => {
                 do c.bounds.map |bounds| {
-                    foreach bound in bounds.iter() {
+                    for bound in bounds.iter() {
                         self.resolve_type_parameter_bound(ty.id, bound, visitor);
                     }
                 };
@@ -4317,7 +4317,7 @@ struct in scope",
                     }
 
                     // Check the types in the path pattern.
-                    foreach ty in path.types.iter() {
+                    for ty in path.types.iter() {
                         self.resolve_type(ty, visitor);
                     }
                 }
@@ -4350,7 +4350,7 @@ struct in scope",
                     }
 
                     // Check the types in the path pattern.
-                    foreach ty in path.types.iter() {
+                    for ty in path.types.iter() {
                         self.resolve_type(ty, visitor);
                     }
                 }
@@ -4379,7 +4379,7 @@ struct in scope",
                     }
 
                     // Check the types in the path pattern.
-                    foreach ty in path.types.iter() {
+                    for ty in path.types.iter() {
                         self.resolve_type(ty, visitor);
                     }
                 }
@@ -4476,7 +4476,7 @@ pub fn resolve_path(@mut self,
                         visitor: ResolveVisitor)
                         -> Option<def> {
         // First, resolve the types.
-        foreach ty in path.types.iter() {
+        for ty in path.types.iter() {
             self.resolve_type(ty, visitor);
         }
 
@@ -4606,7 +4606,7 @@ pub fn resolve_definition_of_name_in_module(@mut self,
 
     pub fn intern_module_part_of_path(@mut self, path: &Path) -> ~[ident] {
         let mut module_path_idents = ~[];
-        foreach (index, ident) in path.idents.iter().enumerate() {
+        for (index, ident) in path.idents.iter().enumerate() {
             if index == path.idents.len() - 1 {
                 break;
             }
@@ -4837,14 +4837,14 @@ pub fn find_best_match_for_name(@mut self,
         let mut j = this.value_ribs.len();
         while j != 0 {
             j -= 1;
-            foreach (&k, _) in this.value_ribs[j].bindings.iter() {
+            for (&k, _) in this.value_ribs[j].bindings.iter() {
                 maybes.push(this.session.str_of(k));
                 values.push(uint::max_value);
             }
         }
 
         let mut smallest = 0;
-        foreach (i, &other) in maybes.iter().enumerate() {
+        for (i, &other) in maybes.iter().enumerate() {
             values[i] = name.lev_distance(other);
 
             if values[i] <= values[smallest] {
@@ -4873,11 +4873,11 @@ pub fn name_exists_in_scope_struct(@mut self, name: &str) -> bool {
           i -= 1;
           match this.type_ribs[i].kind {
             MethodRibKind(node_id, _) =>
-              foreach item in this.crate.module.items.iter() {
+              for item in this.crate.module.items.iter() {
                 if item.id == node_id {
                   match item.node {
                     item_struct(class_def, _) => {
-                      foreach field in class_def.fields.iter() {
+                      for field in class_def.fields.iter() {
                         match field.node.kind {
                           unnamed_field => {},
                           named_field(ident, _) => {
@@ -5151,7 +5151,7 @@ pub fn search_for_traits_containing_method(@mut self, name: ident)
                 // Look for the current trait.
                 match self.current_trait_refs {
                     Some(ref trait_def_ids) => {
-                        foreach trait_def_id in trait_def_ids.iter() {
+                        for trait_def_id in trait_def_ids.iter() {
                             if candidate_traits.contains(trait_def_id) {
                                 self.add_trait_info(&mut found_traits,
                                                     *trait_def_id,
@@ -5165,7 +5165,7 @@ pub fn search_for_traits_containing_method(@mut self, name: ident)
                 }
 
                 // Look for trait children.
-                foreach (_, &child_name_bindings) in search_module.children.iter() {
+                for (_, &child_name_bindings) in search_module.children.iter() {
                     match child_name_bindings.def_for_namespace(TypeNS) {
                         Some(def) => {
                             match def {
@@ -5188,7 +5188,7 @@ pub fn search_for_traits_containing_method(@mut self, name: ident)
                 }
 
                 // Look for imports.
-                foreach (_, &import_resolution) in search_module.import_resolutions.iter() {
+                for (_, &import_resolution) in search_module.import_resolutions.iter() {
                     match import_resolution.target_for_namespace(TypeNS) {
                         None => {
                             // Continue.
@@ -5305,7 +5305,7 @@ pub fn check_for_item_unused_imports(&mut self, vi: &view_item) {
         match vi.node {
             view_item_extern_mod(*) => {} // ignore
             view_item_use(ref path) => {
-                foreach p in path.iter() {
+                for p in path.iter() {
                     match p.node {
                         view_path_simple(_, _, id) | view_path_glob(_, id) => {
                             if !self.used_imports.contains(&id) {
@@ -5316,7 +5316,7 @@ pub fn check_for_item_unused_imports(&mut self, vi: &view_item) {
                         }
 
                         view_path_list(_, ref list, _) => {
-                            foreach i in list.iter() {
+                            for i in list.iter() {
                                 if !self.used_imports.contains(&i.node.id) {
                                     self.session.add_lint(unused_imports,
                                                           i.node.id, i.span,
@@ -5367,12 +5367,12 @@ pub fn dump_module(@mut self, module_: @mut Module) {
         debug!("Dump of module `%s`:", self.module_to_str(module_));
 
         debug!("Children:");
-        foreach (&name, _) in module_.children.iter() {
+        for (&name, _) in module_.children.iter() {
             debug!("* %s", self.session.str_of(name));
         }
 
         debug!("Import resolutions:");
-        foreach (name, import_resolution) in module_.import_resolutions.iter() {
+        for (name, import_resolution) in module_.import_resolutions.iter() {
             let value_repr;
             match import_resolution.target_for_namespace(ValueNS) {
                 None => { value_repr = ~""; }
index 9922106a66380a0003d62a0dd720b9244006529e..725beee6604e7d8e92a813fa18f7556e5f264e4c 100644 (file)
@@ -298,7 +298,7 @@ pub fn variant_opt(bcx: @mut Block, pat_id: ast::NodeId)
     match ccx.tcx.def_map.get_copy(&pat_id) {
         ast::def_variant(enum_id, var_id) => {
             let variants = ty::enum_variants(ccx.tcx, enum_id);
-            foreach v in (*variants).iter() {
+            for v in (*variants).iter() {
                 if var_id == v.id {
                     return var(v.disr_val,
                                adt::represent_node(bcx, pat_id))
@@ -367,7 +367,7 @@ pub fn matches_to_str(bcx: @mut Block, m: &[Match]) -> ~str {
 }
 
 pub fn has_nested_bindings(m: &[Match], col: uint) -> bool {
-    foreach br in m.iter() {
+    for br in m.iter() {
         match br.pats[col].node {
           ast::pat_ident(_, _, Some(_)) => return true,
           _ => ()
@@ -437,7 +437,7 @@ pub fn enter_match<'r>(bcx: @mut Block,
     let _indenter = indenter();
 
     let mut result = ~[];
-    foreach br in m.iter() {
+    for br in m.iter() {
         match e(br.pats[col]) {
             Some(sub) => {
                 let pats =
@@ -589,7 +589,7 @@ pub fn enter_opt<'r>(bcx: @mut Block,
                     // unspecified fields with dummy.
                     let mut reordered_patterns = ~[];
                     let r = ty::lookup_struct_fields(tcx, struct_id);
-                    foreach field in r.iter() {
+                    for field in r.iter() {
                             match field_pats.iter().find_(|p| p.ident == field.ident) {
                                 None => reordered_patterns.push(dummy),
                                 Some(fp) => reordered_patterns.push(fp.pat)
@@ -649,7 +649,7 @@ pub fn enter_rec_or_struct<'r>(bcx: @mut Block,
         match p.node {
             ast::pat_struct(_, ref fpats, _) => {
                 let mut pats = ~[];
-                foreach fname in fields.iter() {
+                for fname in fields.iter() {
                     match fpats.iter().find_(|p| p.ident == *fname) {
                         None => pats.push(dummy),
                         Some(pat) => pats.push(pat.pat)
@@ -809,7 +809,7 @@ fn add_to_set(tcx: ty::ctxt, set: &mut ~[Opt], val: Opt) {
     }
 
     let mut found = ~[];
-    foreach br in m.iter() {
+    for br in m.iter() {
         let cur = br.pats[col];
         match cur.node {
             ast::pat_lit(l) => {
@@ -955,7 +955,7 @@ pub fn collect_record_or_struct_fields(bcx: @mut Block,
                                        col: uint)
                                     -> ~[ast::ident] {
     let mut fields: ~[ast::ident] = ~[];
-    foreach br in m.iter() {
+    for br in m.iter() {
         match br.pats[col].node {
           ast::pat_struct(_, ref fs, _) => {
             match ty::get(node_id_type(bcx, br.pats[col].id)).sty {
@@ -969,7 +969,7 @@ pub fn collect_record_or_struct_fields(bcx: @mut Block,
     return fields;
 
     fn extend(idents: &mut ~[ast::ident], field_pats: &[ast::field_pat]) {
-        foreach field_pat in field_pats.iter() {
+        for field_pat in field_pats.iter() {
             let field_ident = field_pat.ident;
             if !idents.iter().any(|x| *x == field_ident) {
                 idents.push(field_ident);
@@ -994,7 +994,7 @@ pub fn root_pats_as_necessary(mut bcx: @mut Block,
                               col: uint,
                               val: ValueRef)
                            -> @mut Block {
-    foreach br in m.iter() {
+    for br in m.iter() {
         let pat_id = br.pats[col].id;
         if pat_id != 0 {
             let datum = Datum {val: val, ty: node_id_type(bcx, pat_id),
@@ -1063,14 +1063,14 @@ fn score(p: &ast::pat) -> uint {
         }
     }
     let mut scores = vec::from_elem(m[0].pats.len(), 0u);
-    foreach br in m.iter() {
+    for br in m.iter() {
         let mut i = 0u;
-        foreach p in br.pats.iter() { scores[i] += score(*p); i += 1u; }
+        for p in br.pats.iter() { scores[i] += score(*p); i += 1u; }
     }
     let mut max_score = 0u;
     let mut best_col = 0u;
     let mut i = 0u;
-    foreach score in scores.iter() {
+    for score in scores.iter() {
         let score = *score;
 
         // Irrefutable columns always go first, they'd only be duplicated in
@@ -1148,7 +1148,7 @@ fn store_non_ref_bindings(bcx: @mut Block,
      */
 
     let mut bcx = bcx;
-    foreach (_, &binding_info) in bindings_map.iter() {
+    for (_, &binding_info) in bindings_map.iter() {
         match binding_info.trmode {
             TrByValue(lldest) => {
                 let llval = Load(bcx, binding_info.llmatch); // get a T*
@@ -1182,7 +1182,7 @@ fn insert_lllocals(bcx: @mut Block,
         BindArgument => bcx.fcx.llargs
     };
 
-    foreach (_, &binding_info) in bindings_map.iter() {
+    for (_, &binding_info) in bindings_map.iter() {
         let llval = match binding_info.trmode {
             // By value bindings: use the stack slot that we
             // copied/moved the value into
@@ -1236,7 +1236,7 @@ pub fn compile_guard(bcx: @mut Block,
     let val = bool_to_i1(bcx, val);
 
     // Revoke the temp cleanups now that the guard successfully executed.
-    foreach llval in temp_cleanups.iter() {
+    for llval in temp_cleanups.iter() {
         revoke_clean(bcx, *llval);
     }
 
@@ -1250,7 +1250,7 @@ pub fn compile_guard(bcx: @mut Block,
 
     fn drop_bindings(bcx: @mut Block, data: &ArmData) -> @mut Block {
         let mut bcx = bcx;
-        foreach (_, &binding_info) in data.bindings_map.iter() {
+        for (_, &binding_info) in data.bindings_map.iter() {
             match binding_info.trmode {
                 TrByValue(llval) => {
                     bcx = glue::drop_ty(bcx, llval, binding_info.ty);
@@ -1325,7 +1325,7 @@ fn compile_submatch_continue(mut bcx: @mut Block,
     let ccx = bcx.fcx.ccx;
     let mut pat_id = 0;
     let mut pat_span = dummy_sp();
-    foreach br in m.iter() {
+    for br in m.iter() {
         // Find a real id (we're adding placeholder wildcard patterns, but
         // each column is guaranteed to have at least one real pattern)
         if pat_id == 0 {
@@ -1434,7 +1434,7 @@ fn compile_submatch_continue(mut bcx: @mut Block,
             var(_, repr) => {
                 let (the_kind, val_opt) = adt::trans_switch(bcx, repr, val);
                 kind = the_kind;
-                foreach &tval in val_opt.iter() { test_val = tval; }
+                for &tval in val_opt.iter() { test_val = tval; }
             }
             lit(_) => {
                 let pty = node_id_type(bcx, pat_id);
@@ -1457,7 +1457,7 @@ fn compile_submatch_continue(mut bcx: @mut Block,
             }
         }
     }
-    foreach o in opts.iter() {
+    for o in opts.iter() {
         match *o {
             range(_, _) => { kind = compare; break }
             _ => ()
@@ -1479,7 +1479,7 @@ fn compile_submatch_continue(mut bcx: @mut Block,
     let mut i = 0u;
 
     // Compile subtrees for each option
-    foreach opt in opts.iter() {
+    for opt in opts.iter() {
         i += 1u;
         let mut opt_cx = else_cx;
         if !exhaustive || i < len {
@@ -1688,7 +1688,7 @@ pub fn trans_match_inner(scope_cx: @mut Block,
 
     let mut arm_datas = ~[];
     let mut matches = ~[];
-    foreach arm in arms.iter() {
+    for arm in arms.iter() {
         let body = scope_block(bcx, arm.body.info(), "case_body");
         let bindings_map = create_bindings_map(bcx, arm.pats[0]);
         let arm_data = ArmData {
@@ -1697,7 +1697,7 @@ pub fn trans_match_inner(scope_cx: @mut Block,
             bindings_map: @bindings_map
         };
         arm_datas.push(arm_data.clone());
-        foreach p in arm.pats.iter() {
+        for p in arm.pats.iter() {
             matches.push(Match {
                 pats: ~[*p],
                 data: arm_data.clone(),
@@ -1721,7 +1721,7 @@ pub fn trans_match_inner(scope_cx: @mut Block,
     compile_submatch(bcx, matches, [lldiscr], chk);
 
     let mut arm_cxs = ~[];
-    foreach arm_data in arm_datas.iter() {
+    for arm_data in arm_datas.iter() {
         let mut bcx = arm_data.bodycx;
 
         // If this arm has a guard, then the various by-value bindings have
@@ -1957,7 +1957,7 @@ fn bind_irrefutable_pat(bcx: @mut Block,
                     });
             }
 
-            foreach &inner_pat in inner.iter() {
+            for &inner_pat in inner.iter() {
                 bcx = bind_irrefutable_pat(bcx, inner_pat, val, binding_mode);
             }
         }
@@ -1972,8 +1972,8 @@ fn bind_irrefutable_pat(bcx: @mut Block,
                                                     repr,
                                                     vinfo.disr_val,
                                                     val);
-                    foreach sub_pat in sub_pats.iter() {
-                        foreach (i, argval) in args.vals.iter().enumerate() {
+                    for sub_pat in sub_pats.iter() {
+                        for (i, argval) in args.vals.iter().enumerate() {
                             bcx = bind_irrefutable_pat(bcx, sub_pat[i],
                                                        *argval, binding_mode);
                         }
@@ -1988,7 +1988,7 @@ fn bind_irrefutable_pat(bcx: @mut Block,
                         Some(ref elems) => {
                             // This is the tuple struct case.
                             let repr = adt::represent_node(bcx, pat.id);
-                            foreach (i, elem) in elems.iter().enumerate() {
+                            for (i, elem) in elems.iter().enumerate() {
                                 let fldptr = adt::trans_field_ptr(bcx, repr,
                                                                   val, 0, i);
                                 bcx = bind_irrefutable_pat(bcx, *elem,
@@ -2009,7 +2009,7 @@ fn bind_irrefutable_pat(bcx: @mut Block,
             let pat_ty = node_id_type(bcx, pat.id);
             let pat_repr = adt::represent_type(bcx.ccx(), pat_ty);
             do expr::with_field_tys(tcx, pat_ty, None) |discr, field_tys| {
-                foreach f in fields.iter() {
+                for f in fields.iter() {
                     let ix = ty::field_idx_strict(tcx, f.ident, field_tys);
                     let fldptr = adt::trans_field_ptr(bcx, pat_repr, val,
                                                       discr, ix);
@@ -2019,7 +2019,7 @@ fn bind_irrefutable_pat(bcx: @mut Block,
         }
         ast::pat_tup(ref elems) => {
             let repr = adt::represent_node(bcx, pat.id);
-            foreach (i, elem) in elems.iter().enumerate() {
+            for (i, elem) in elems.iter().enumerate() {
                 let fldptr = adt::trans_field_ptr(bcx, repr, val, 0, i);
                 bcx = bind_irrefutable_pat(bcx, *elem, fldptr, binding_mode);
             }
index 6c37fd18f69e88ba55ee1f3b4e96a129bffd20dc..fad5b9ec73b0f40525ff083b519e457756f463d1 100644 (file)
@@ -249,7 +249,7 @@ fn generic_fields_of(cx: &mut CrateContext, r: &Repr, sizing: bool) -> ~[Type] {
             let mut most_aligned = None;
             let mut largest_align = 0;
             let mut largest_size = 0;
-            foreach st in sts.iter() {
+            for st in sts.iter() {
                 if largest_size < st.size {
                     largest_size = st.size;
                 }
@@ -545,7 +545,7 @@ fn build_const_struct(ccx: &mut CrateContext, st: &Struct, vals: &[ValueRef])
 
     let mut offset = 0;
     let mut cfields = ~[];
-    foreach (i, &ty) in st.fields.iter().enumerate() {
+    for (i, &ty) in st.fields.iter().enumerate() {
         let llty = type_of::sizing_type_of(ccx, ty);
         let type_align = machine::llalign_of_min(ccx, llty)
             /*bad*/as u64;
index 9973599e339545f69778b0204533754f0ed4825b..b6057199a280fbccddba02aefe60d7b20f42c5f7 100644 (file)
@@ -42,7 +42,6 @@ pub fn trans_inline_asm(bcx: @mut Block, ia: &ast::inline_asm) -> @mut Block {
                                    ty::ByCopy,
                                    out,
                                    &mut cleanups,
-                                   None,
                                    callee::DontAutorefArg)
         }));
 
@@ -57,13 +56,12 @@ pub fn trans_inline_asm(bcx: @mut Block, ia: &ast::inline_asm) -> @mut Block {
                                    ty::ByCopy,
                                    e,
                                    &mut cleanups,
-                                   None,
                                    callee::DontAutorefArg)
         })
 
     };
 
-    foreach c in cleanups.iter() {
+    for c in cleanups.iter() {
         revoke_clean(bcx, *c);
     }
     cleanups.clear();
@@ -78,13 +76,12 @@ pub fn trans_inline_asm(bcx: @mut Block, ia: &ast::inline_asm) -> @mut Block {
                                    ty::ByCopy,
                                    input,
                                    &mut cleanups,
-                                   None,
                                    callee::DontAutorefArg)
         })
 
     };
 
-    foreach c in cleanups.iter() {
+    for c in cleanups.iter() {
         revoke_clean(bcx, *c);
     }
 
@@ -134,7 +131,7 @@ pub fn trans_inline_asm(bcx: @mut Block, ia: &ast::inline_asm) -> @mut Block {
         let op = PointerCast(bcx, aoutputs[0], val_ty(outputs[0]).ptr_to());
         Store(bcx, r, op);
     } else {
-        foreach (i, o) in aoutputs.iter().enumerate() {
+        for (i, o) in aoutputs.iter().enumerate() {
             let v = ExtractValue(bcx, r, i);
             let op = PointerCast(bcx, *o, val_ty(outputs[i]).ptr_to());
             Store(bcx, v, op);
index bfcc1e1b6a16833116ef8414c15017c13fdf0372..edeca5e3e8cc5b189be767bd15a51a937601d2f3 100644 (file)
@@ -420,46 +420,25 @@ pub fn get_tydesc(ccx: &mut CrateContext, t: ty::t) -> @mut tydesc_info {
 }
 
 pub fn set_optimize_for_size(f: ValueRef) {
-    unsafe {
-        llvm::LLVMAddFunctionAttr(f,
-                                  lib::llvm::OptimizeForSizeAttribute
-                                    as c_uint,
-                                  0);
-    }
+    lib::llvm::SetFunctionAttribute(f, lib::llvm::OptimizeForSizeAttribute)
 }
 
 pub fn set_no_inline(f: ValueRef) {
-    unsafe {
-        llvm::LLVMAddFunctionAttr(f,
-                                  lib::llvm::NoInlineAttribute as c_uint,
-                                  0);
-    }
+    lib::llvm::SetFunctionAttribute(f, lib::llvm::NoInlineAttribute)
 }
 
 pub fn set_no_unwind(f: ValueRef) {
-    unsafe {
-        llvm::LLVMAddFunctionAttr(f,
-                                  lib::llvm::NoUnwindAttribute as c_uint,
-                                  0);
-    }
+    lib::llvm::SetFunctionAttribute(f, lib::llvm::NoUnwindAttribute)
 }
 
 // Tell LLVM to emit the information necessary to unwind the stack for the
 // function f.
 pub fn set_uwtable(f: ValueRef) {
-    unsafe {
-        llvm::LLVMAddFunctionAttr(f,
-                                  lib::llvm::UWTableAttribute as c_uint,
-                                  0);
-    }
+    lib::llvm::SetFunctionAttribute(f, lib::llvm::UWTableAttribute)
 }
 
 pub fn set_inline_hint(f: ValueRef) {
-    unsafe {
-        llvm::LLVMAddFunctionAttr(f,
-                                  lib::llvm::InlineHintAttribute as c_uint,
-                                  0);
-    }
+    lib::llvm::SetFunctionAttribute(f, lib::llvm::InlineHintAttribute)
 }
 
 pub fn set_inline_hint_if_appr(attrs: &[ast::Attribute],
@@ -474,17 +453,11 @@ pub fn set_inline_hint_if_appr(attrs: &[ast::Attribute],
 }
 
 pub fn set_always_inline(f: ValueRef) {
-    unsafe {
-        llvm::LLVMAddFunctionAttr(f,
-                                  lib::llvm::AlwaysInlineAttribute as c_uint,
-                                  0);
-    }
+    lib::llvm::SetFunctionAttribute(f, lib::llvm::AlwaysInlineAttribute)
 }
 
 pub fn set_fixed_stack_segment(f: ValueRef) {
-    unsafe {
-        llvm::LLVMAddFunctionAttr(f, 0, 1 << (39 - 32));
-    }
+    lib::llvm::SetFixedStackSegmentAttribute(f);
 }
 
 pub fn set_glue_inlining(f: ValueRef, t: ty::t) {
@@ -676,7 +649,7 @@ fn iter_variant(cx: @mut Block, repr: &adt::Repr, av: ValueRef,
         let tcx = cx.tcx();
         let mut cx = cx;
 
-        foreach (i, &arg) in variant.args.iter().enumerate() {
+        for (i, &arg) in variant.args.iter().enumerate() {
             cx = f(cx,
                    adt::trans_field_ptr(cx, repr, av, variant.disr_val, i),
                    ty::subst_tps(tcx, tps, None, arg));
@@ -689,7 +662,7 @@ fn iter_variant(cx: @mut Block, repr: &adt::Repr, av: ValueRef,
       ty::ty_struct(*) => {
           let repr = adt::represent_type(cx.ccx(), t);
           do expr::with_field_tys(cx.tcx(), t, None) |discr, field_tys| {
-              foreach (i, field_ty) in field_tys.iter().enumerate() {
+              for (i, field_ty) in field_tys.iter().enumerate() {
                   let llfld_a = adt::trans_field_ptr(cx, repr, av, discr, i);
                   cx = f(cx, llfld_a, field_ty.mt.ty);
               }
@@ -702,7 +675,7 @@ fn iter_variant(cx: @mut Block, repr: &adt::Repr, av: ValueRef,
       }
       ty::ty_tup(ref args) => {
           let repr = adt::represent_type(cx.ccx(), t);
-          foreach (i, arg) in args.iter().enumerate() {
+          for (i, arg) in args.iter().enumerate() {
               let llfld_a = adt::trans_field_ptr(cx, repr, av, 0, i);
               cx = f(cx, llfld_a, *arg);
           }
@@ -730,7 +703,7 @@ fn iter_variant(cx: @mut Block, repr: &adt::Repr, av: ValueRef,
                                         n_variants);
                   let next_cx = sub_block(cx, "enum-iter-next");
 
-                  foreach variant in (*variants).iter() {
+                  for variant in (*variants).iter() {
                       let variant_cx =
                           sub_block(cx, ~"enum-iter-variant-" +
                                     uint::to_str(variant.disr_val));
@@ -864,7 +837,7 @@ pub fn invoke(bcx: @mut Block, llfn: ValueRef, llargs: ~[ValueRef])
             debug!("invoking %x at %x",
                    ::std::cast::transmute(llfn),
                    ::std::cast::transmute(bcx.llbb));
-            foreach &llarg in llargs.iter() {
+            for &llarg in llargs.iter() {
                 debug!("arg: %x", ::std::cast::transmute(llarg));
             }
         }
@@ -880,7 +853,7 @@ pub fn invoke(bcx: @mut Block, llfn: ValueRef, llargs: ~[ValueRef])
             debug!("calling %x at %x",
                    ::std::cast::transmute(llfn),
                    ::std::cast::transmute(bcx.llbb));
-            foreach &llarg in llargs.iter() {
+            for &llarg in llargs.iter() {
                 debug!("arg: %x", ::std::cast::transmute(llarg));
             }
         }
@@ -909,7 +882,7 @@ pub fn need_invoke(bcx: @mut Block) -> bool {
     loop {
         cur_scope = match cur_scope {
             Some(inf) => {
-                foreach cleanup in inf.cleanups.iter() {
+                for cleanup in inf.cleanups.iter() {
                     match *cleanup {
                         clean(_, cleanup_type) | clean_temp(_, _, cleanup_type) => {
                             if cleanup_type == normal_exit_and_unwind {
@@ -1172,7 +1145,7 @@ pub fn new_block(cx: @mut FunctionContext,
                                   opt_node_info,
                                   cx);
         bcx.scope = scope;
-        foreach cx in parent.iter() {
+        for cx in parent.iter() {
             if cx.unreachable {
                 Unreachable(bcx);
                 break;
@@ -1262,7 +1235,7 @@ pub fn trans_block_cleanups_(bcx: @mut Block,
         bcx.ccx().sess.opts.debugging_opts & session::no_landing_pads != 0;
     if bcx.unreachable && !no_lpads { return bcx; }
     let mut bcx = bcx;
-    foreach cu in cleanups.rev_iter() {
+    for cu in cleanups.rev_iter() {
         match *cu {
             clean(cfn, cleanup_type) | clean_temp(_, cfn, cleanup_type) => {
                 // Some types don't need to be cleaned up during
@@ -1305,7 +1278,7 @@ pub fn cleanup_and_leave(bcx: @mut Block,
                         let mut dest = None;
                         {
                             let r = (*inf).cleanup_paths.rev_iter().find_(|cp| cp.target == leave);
-                            foreach cp in r.iter() {
+                            for cp in r.iter() {
                                 if cp.size == inf.cleanups.len() {
                                     Br(bcx, cp.dest);
                                     return;
@@ -1327,7 +1300,7 @@ pub fn cleanup_and_leave(bcx: @mut Block,
                     bcx = trans_block_cleanups_(sub_cx,
                                                 inf_cleanups,
                                                 is_lpad);
-                    foreach &dest in dest.iter() {
+                    for &dest in dest.iter() {
                         Br(bcx, dest);
                         return;
                     }
@@ -1450,7 +1423,7 @@ pub fn with_scope_datumblock(bcx: @mut Block, opt_node_info: Option<NodeInfo>,
 }
 
 pub fn block_locals(b: &ast::Block, it: &fn(@ast::Local)) {
-    foreach s in b.stmts.iter() {
+    for s in b.stmts.iter() {
         match s.node {
           ast::stmt_decl(d, _) => {
             match d.node {
@@ -1625,7 +1598,7 @@ pub fn new_fn_ctxt_w_id(ccx: @mut CrateContext,
                         opt_node_info: Option<NodeInfo>,
                         sp: Option<span>)
                      -> @mut FunctionContext {
-    foreach p in param_substs.iter() { p.validate(); }
+    for p in param_substs.iter() { p.validate(); }
 
     debug!("new_fn_ctxt_w_id(path=%s, id=%?, \
             param_substs=%s)",
@@ -1770,7 +1743,7 @@ pub fn copy_args_to_allocas(fcx: @mut FunctionContext,
         _ => {}
     }
 
-    foreach arg_n in range(0u, arg_tys.len()) {
+    for arg_n in range(0u, arg_tys.len()) {
         let arg_ty = arg_tys[arg_n];
         let raw_llarg = raw_llargs[arg_n];
 
@@ -1902,7 +1875,7 @@ pub fn trans_closure(ccx: @mut CrateContext,
     // Put return block after all other blocks.
     // This somewhat improves single-stepping experience in debugger.
     unsafe {
-        foreach &llreturn in fcx.llreturn.iter() {
+        for &llreturn in fcx.llreturn.iter() {
             llvm::LLVMMoveBasicBlockAfter(llreturn, bcx.llbb);
         }
     }
@@ -1966,7 +1939,7 @@ fn insert_synthetic_type_entries(bcx: @mut Block,
      */
 
     let tcx = bcx.tcx();
-    foreach i in range(0u, fn_args.len()) {
+    for 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]));
 
@@ -2091,7 +2064,7 @@ pub fn trans_enum_variant_or_tuple_like_struct<A:IdAndTy>(
 
     let repr = adt::represent_type(ccx, result_ty);
     adt::trans_start_init(bcx, repr, fcx.llretptr.get(), disr);
-    foreach (i, fn_arg) in fn_args.iter().enumerate() {
+    for (i, fn_arg) in fn_args.iter().enumerate() {
         let lldestptr = adt::trans_field_ptr(bcx,
                                              repr,
                                              fcx.llretptr.get(),
@@ -2107,7 +2080,7 @@ pub fn trans_enum_variant_or_tuple_like_struct<A:IdAndTy>(
 pub fn trans_enum_def(ccx: @mut CrateContext, enum_definition: &ast::enum_def,
                       id: ast::NodeId, vi: @~[@ty::VariantInfo],
                       i: &mut uint) {
-    foreach variant in enum_definition.variants.iter() {
+    for variant in enum_definition.variants.iter() {
         let disr_val = vi[*i].disr_val;
         *i += 1;
 
@@ -2157,7 +2130,7 @@ pub fn trans_item(ccx: @mut CrateContext, item: &ast::item) {
                      item.id,
                      item.attrs);
         } else {
-            foreach stmt in body.stmts.iter() {
+            for stmt in body.stmts.iter() {
                 match stmt.node {
                   ast::stmt_decl(@codemap::spanned { node: ast::decl_item(i),
                                                  _ }, _) => {
@@ -2190,7 +2163,7 @@ pub fn trans_item(ccx: @mut CrateContext, item: &ast::item) {
           consts::trans_const(ccx, m, item.id);
           // Do static_assert checking. It can't really be done much earlier because we need to get
           // the value of the bool out of LLVM
-          foreach attr in item.attrs.iter() {
+          for attr in item.attrs.iter() {
               if "static_assert" == attr.name() {
                   if m == ast::m_mutbl {
                       ccx.sess.span_fatal(expr.span,
@@ -2238,7 +2211,7 @@ pub fn trans_struct_def(ccx: @mut CrateContext, struct_def: @ast::struct_def) {
 // and control visibility.
 pub fn trans_mod(ccx: @mut CrateContext, m: &ast::_mod) {
     let _icx = push_ctxt("trans_mod");
-    foreach item in m.items.iter() {
+    for item in m.items.iter() {
         trans_item(ccx, *item);
     }
 }
@@ -2625,7 +2598,7 @@ pub fn trans_constant(ccx: &mut CrateContext, it: @ast::item) {
                                                  node: it.id });
         let mut i = 0;
         let path = item_path(ccx, &it.id);
-        foreach variant in (*enum_definition).variants.iter() {
+        for variant in (*enum_definition).variants.iter() {
             let p = vec::append(path.clone(), [
                 path_name(variant.node.name),
                 path_name(special_idents::descrim)
@@ -2801,11 +2774,11 @@ pub fn create_module_map(ccx: &mut CrateContext) -> ValueRef {
     // like the multiple borrows. At least, it doesn't
     // like them on the current snapshot. (2013-06-14)
     let mut keys = ~[];
-    foreach (k, _) in ccx.module_data.iter() {
+    for (k, _) in ccx.module_data.iter() {
         keys.push(k.to_managed());
     }
 
-    foreach key in keys.iter() {
+    for key in keys.iter() {
         let val = *ccx.module_data.find_equiv(key).get();
         let s_const = C_cstr(ccx, *key);
         let s_ptr = p2i(ccx, s_const);
@@ -3032,7 +3005,7 @@ pub fn trans_crate(sess: session::Session,
         do sort::quick_sort(ccx.stats.fn_stats) |&(_, _, insns_a), &(_, _, insns_b)| {
             insns_a > insns_b
         }
-        foreach tuple in ccx.stats.fn_stats.iter() {
+        for tuple in ccx.stats.fn_stats.iter() {
             match *tuple {
                 (ref name, ms, insns) => {
                     printfln!("%u insns, %u ms, %s", insns, ms, *name);
@@ -3041,7 +3014,7 @@ pub fn trans_crate(sess: session::Session,
         }
     }
     if ccx.sess.count_llvm_insns() {
-        foreach (k, v) in ccx.stats.llvm_insns.iter() {
+        for (k, v) in ccx.stats.llvm_insns.iter() {
             printfln!("%-7u %s", *v, *k);
         }
     }
index bfdee1b8f34df4ff92e44dcb80cf04fcba2171d2..7d7fc9c087e64c97918e61af47bc87db2ba8771d 100644 (file)
@@ -516,7 +516,7 @@ pub fn gepi(&self, base: ValueRef, ixs: &[uint]) -> ValueRef {
         // we care about.
         if ixs.len() < 16 {
             let mut small_vec = [ C_i32(0), ..16 ];
-            foreach (small_vec_e, &ix) in small_vec.mut_iter().zip(ixs.iter()) {
+            for (small_vec_e, &ix) in small_vec.mut_iter().zip(ixs.iter()) {
                 *small_vec_e = C_i32(ix as i32);
             }
             self.inbounds_gep(base, small_vec.slice(0, ixs.len()))
@@ -940,7 +940,7 @@ pub fn atomic_rmw(&self, op: AtomicBinOp,
                      dst: ValueRef, src: ValueRef,
                      order: AtomicOrdering) -> ValueRef {
         unsafe {
-            llvm::LLVMBuildAtomicRMW(self.llbuilder, op, dst, src, order)
+            llvm::LLVMBuildAtomicRMW(self.llbuilder, op, dst, src, order, False)
         }
     }
 
index 2fcdf885aadcb8684353ac86092e19406163a5b2..3a6577e28b7cceb37c392667de0c107902b335d3 100644 (file)
@@ -42,7 +42,7 @@ pub fn decl_fn(&self, decl: &fn(fnty: Type) -> ValueRef) -> ValueRef {
         let fnty = Type::func(atys, &rty);
         let llfn = decl(fnty);
 
-        foreach (i, a) in self.attrs.iter().enumerate() {
+        for (i, a) in self.attrs.iter().enumerate() {
             match *a {
                 option::Some(attr) => {
                     unsafe {
@@ -92,7 +92,7 @@ pub fn build_shim_args(&self, bcx: @mut Block, arg_tys: &[Type], llargbundle: Va
 
     pub fn build_shim_ret(&self, bcx: @mut Block, arg_tys: &[Type], ret_def: bool,
                           llargbundle: ValueRef, llretval: ValueRef) {
-        foreach (i, a) in self.attrs.iter().enumerate() {
+        for (i, a) in self.attrs.iter().enumerate() {
             match *a {
                 option::Some(attr) => {
                     unsafe {
index d8c68c706045c8d8ddecfff3500c6bba573b4b76..7f1fc5978c4396d68517f5377a8aeac321a37d67 100644 (file)
@@ -133,7 +133,7 @@ fn compute_info(&self,
                     ret_def: bool) -> FnType {
         let mut arg_tys = ~[];
         let mut attrs = ~[];
-        foreach &aty in atys.iter() {
+        for &aty in atys.iter() {
             let (ty, attr) = classify_arg_ty(aty);
             arg_tys.push(ty);
             attrs.push(attr);
index b863447a0b4266e9d5d5beef7580dc0fa0b9752d..fe1c288d1773f3e3e7125a1055de9358d99ca7bb 100644 (file)
@@ -190,7 +190,7 @@ fn compute_info(&self,
         let mut attrs = ~[];
         let mut offset = if sret { 4 } else { 0 };
 
-        foreach aty in atys.iter() {
+        for aty in atys.iter() {
             let (ty, attr) = classify_arg_ty(*aty, &mut offset);
             arg_tys.push(ty);
             attrs.push(attr);
index 7004de57da66a8eaced540e0ea3110bbe14e4a1b..530e1ff8e5baa77a22b51e4eaaf4e9ce8cf6d4eb 100644 (file)
@@ -145,7 +145,7 @@ fn ty_size(ty: Type) -> uint {
     }
 
     fn all_mem(cls: &mut [RegClass]) {
-        foreach i in range(0u, cls.len()) {
+        for i in range(0u, cls.len()) {
             cls[i] = Memory;
         }
     }
@@ -179,7 +179,7 @@ fn classify_struct(tys: &[Type],
                        cls: &mut [RegClass], i: uint,
                        off: uint) {
         let mut field_off = off;
-        foreach ty in tys.iter() {
+        for ty in tys.iter() {
             field_off = align(field_off, *ty);
             classify(*ty, cls, i, field_off);
             field_off += ty_size(*ty);
@@ -294,7 +294,7 @@ fn fixup(ty: Type, cls: &mut [RegClass]) {
 fn llreg_ty(cls: &[RegClass]) -> Type {
     fn llvec_len(cls: &[RegClass]) -> uint {
         let mut len = 1u;
-        foreach c in cls.iter() {
+        for c in cls.iter() {
             if *c != SSEUp {
                 break;
             }
@@ -355,7 +355,7 @@ fn x86_64_ty(ty: Type,
 
     let mut arg_tys = ~[];
     let mut attrs = ~[];
-    foreach t in atys.iter() {
+    for t in atys.iter() {
         let (ty, attr) = x86_64_ty(*t, |cls| cls.is_pass_byval(), ByValAttribute);
         arg_tys.push(ty);
         attrs.push(attr);
index 8b8b020d8b6d3a0fab135d4fb337699ffa0f55fb..a0e71bc22727969692c1acb775a07c4eda982f43 100644 (file)
@@ -27,7 +27,6 @@
 use middle::trans::base::*;
 use middle::trans::build::*;
 use middle::trans::callee;
-use middle::trans::closure;
 use middle::trans::common;
 use middle::trans::common::*;
 use middle::trans::datum::*;
@@ -556,29 +555,9 @@ pub fn trans_call_inner(in_cx: @mut Block,
                         autoref_arg: AutorefArg)
                         -> Result {
     do base::with_scope_result(in_cx, call_info, "call") |cx| {
-        let ret_in_loop = match args {
-          ArgExprs(args) => {
-            args.len() > 0u && match args.last().node {
-              ast::expr_loop_body(@ast::expr {
-                node: ast::expr_fn_block(_, ref body),
-                _
-              }) =>  body_contains_ret(body),
-              _ => false
-            }
-          }
-          _ => false
-        };
-
         let callee = get_callee(cx);
         let mut bcx = callee.bcx;
         let ccx = cx.ccx();
-        let ret_flag = if ret_in_loop {
-            let flag = alloca(bcx, Type::bool(), "__ret_flag");
-            Store(bcx, C_bool(false), flag);
-            Some(flag)
-        } else {
-            None
-        };
 
         let (llfn, llenv) = unsafe {
             match callee.data {
@@ -611,15 +590,13 @@ pub fn trans_call_inner(in_cx: @mut Block,
         }
 
         llargs.push(llenv);
-        bcx = trans_args(bcx, args, fn_expr_ty,
-                         ret_flag, autoref_arg, &mut llargs);
-
+        bcx = trans_args(bcx, args, fn_expr_ty, autoref_arg, &mut llargs);
 
         // Now that the arguments have finished evaluating, we need to revoke
         // the cleanup for the self argument
         match callee.data {
             Method(d) => {
-                foreach &v in d.temp_cleanup.iter() {
+                for &v in d.temp_cleanup.iter() {
                     revoke_clean(bcx, v);
                 }
             }
@@ -629,7 +606,7 @@ pub fn trans_call_inner(in_cx: @mut Block,
         // Uncomment this to debug calls.
         /*
         printfln!("calling: %s", bcx.val_to_str(llfn));
-        foreach llarg in llargs.iter() {
+        for llarg in llargs.iter() {
             printfln!("arg: %s", bcx.val_to_str(*llarg));
         }
         io::println("---");
@@ -667,20 +644,6 @@ pub fn trans_call_inner(in_cx: @mut Block,
 
         if ty::type_is_bot(ret_ty) {
             Unreachable(bcx);
-        } else if ret_in_loop {
-            let ret_flag_result = bool_to_i1(bcx, Load(bcx, ret_flag.get()));
-            bcx = do with_cond(bcx, ret_flag_result) |bcx| {
-                {
-                    let r = bcx.fcx.loop_ret;
-                    foreach &(flagptr, _) in r.iter() {
-                        Store(bcx, C_bool(true), flagptr);
-                        Store(bcx, C_bool(false), bcx.fcx.llretptr.get());
-                    }
-                }
-                base::cleanup_and_leave(bcx, None, Some(bcx.fcx.get_llreturn()));
-                Unreachable(bcx);
-                bcx
-            }
         }
         rslt(bcx, llresult)
     }
@@ -713,7 +676,6 @@ pub fn trans_ret_slot(bcx: @mut Block, fn_ty: ty::t, dest: Option<expr::Dest>)
 pub fn trans_args(cx: @mut Block,
                   args: CallArgs,
                   fn_ty: ty::t,
-                  ret_flag: Option<ValueRef>,
                   autoref_arg: AutorefArg,
                   llargs: &mut ~[ValueRef]) -> @mut Block
 {
@@ -728,15 +690,13 @@ pub fn trans_args(cx: @mut Block,
     // to cast her view of the arguments to the caller's view.
     match args {
       ArgExprs(arg_exprs) => {
-        let last = arg_exprs.len() - 1u;
-        foreach (i, arg_expr) in arg_exprs.iter().enumerate() {
+        for (i, arg_expr) in arg_exprs.iter().enumerate() {
             let arg_val = unpack_result!(bcx, {
                 trans_arg_expr(bcx,
                                arg_tys[i],
                                ty::ByCopy,
                                *arg_expr,
                                &mut temp_cleanups,
-                               if i == last { ret_flag } else { None },
                                autoref_arg)
             });
             llargs.push(arg_val);
@@ -750,7 +710,7 @@ pub fn trans_args(cx: @mut Block,
     // now that all arguments have been successfully built, we can revoke any
     // temporary cleanups, as they are only needed if argument construction
     // should fail (for example, cleanup of copy mode args).
-    foreach c in temp_cleanups.iter() {
+    for c in temp_cleanups.iter() {
         revoke_clean(bcx, *c)
     }
 
@@ -769,49 +729,17 @@ pub fn trans_arg_expr(bcx: @mut Block,
                       self_mode: ty::SelfMode,
                       arg_expr: @ast::expr,
                       temp_cleanups: &mut ~[ValueRef],
-                      ret_flag: Option<ValueRef>,
                       autoref_arg: AutorefArg) -> Result {
     let _icx = push_ctxt("trans_arg_expr");
     let ccx = bcx.ccx();
 
-    debug!("trans_arg_expr(formal_arg_ty=(%s), self_mode=%?, arg_expr=%s, \
-            ret_flag=%?)",
+    debug!("trans_arg_expr(formal_arg_ty=(%s), self_mode=%?, arg_expr=%s)",
            formal_arg_ty.repr(bcx.tcx()),
            self_mode,
-           arg_expr.repr(bcx.tcx()),
-           ret_flag.map(|v| bcx.val_to_str(*v)));
+           arg_expr.repr(bcx.tcx()));
 
     // translate the arg expr to a datum
-    let arg_datumblock = match ret_flag {
-        None => expr::trans_to_datum(bcx, arg_expr),
-
-        // If there is a ret_flag, this *must* be a loop body
-        Some(_) => {
-            match arg_expr.node {
-                ast::expr_loop_body(
-                    blk @ @ast::expr {
-                        node: ast::expr_fn_block(ref decl, ref body),
-                        _
-                    }) => {
-                    let scratch_ty = expr_ty(bcx, arg_expr);
-                    let scratch = alloc_ty(bcx, scratch_ty, "__ret_flag");
-                    let arg_ty = expr_ty(bcx, arg_expr);
-                    let sigil = ty::ty_closure_sigil(arg_ty);
-                    let bcx = closure::trans_expr_fn(
-                        bcx, sigil, decl, body, arg_expr.id,
-                        blk.id, Some(ret_flag), expr::SaveIn(scratch));
-                    DatumBlock {bcx: bcx,
-                                datum: Datum {val: scratch,
-                                              ty: scratch_ty,
-                                              mode: ByRef(RevokeClean)}}
-                }
-                _ => {
-                    bcx.sess().impossible_case(
-                        arg_expr.span, "ret_flag with non-loop-body expr");
-                }
-            }
-        }
-    };
+    let arg_datumblock = expr::trans_to_datum(bcx, arg_expr);
     let arg_datum = arg_datumblock.datum;
     let bcx = arg_datumblock.bcx;
 
@@ -834,60 +762,33 @@ pub fn trans_arg_expr(bcx: @mut Block,
                 val = arg_datum.to_ref_llval(bcx);
             }
             DontAutorefArg => {
-                match self_mode {
+                let need_scratch = ty::type_needs_drop(bcx.tcx(), arg_datum.ty) ||
+                    (bcx.expr_is_lval(arg_expr) &&
+                     arg_datum.appropriate_mode(bcx.tcx()).is_by_ref());
+
+                let arg_datum = if need_scratch {
+                    let scratch = scratch_datum(bcx, arg_datum.ty, "__self", false);
+                    arg_datum.store_to_datum(bcx, INIT, scratch);
+
+                    // Technically, ownership of val passes to the callee.
+                    // However, we must cleanup should we fail before the
+                    // callee is actually invoked.
+                    scratch.add_clean(bcx);
+                    temp_cleanups.push(scratch.val);
+
+                    scratch
+                } else {
+                    arg_datum
+                };
+
+                val = match self_mode {
                     ty::ByRef => {
-                        // This assertion should really be valid, but because
-                        // the explicit self code currently passes by-ref, it
-                        // does not hold.
-                        //
-                        //assert !bcx.ccx().maps.moves_map.contains_key(
-                        //    &arg_expr.id);
-                        debug!("by ref arg with type %s, storing to scratch",
-                               bcx.ty_to_str(arg_datum.ty));
-                        let scratch = scratch_datum(bcx, arg_datum.ty,
-                                                    "__self", false);
-
-                        arg_datum.store_to_datum(bcx,
-                                                 INIT,
-                                                 scratch);
-
-                        // Technically, ownership of val passes to the callee.
-                        // However, we must cleanup should we fail before the
-                        // callee is actually invoked.
-                        scratch.add_clean(bcx);
-                        temp_cleanups.push(scratch.val);
-
-                        val = scratch.to_ref_llval(bcx);
+                        debug!("by ref arg with type %s", bcx.ty_to_str(arg_datum.ty));
+                        arg_datum.to_ref_llval(bcx)
                     }
                     ty::ByCopy => {
-                        if ty::type_needs_drop(bcx.tcx(), arg_datum.ty) ||
-                                arg_datum.appropriate_mode(bcx.tcx()).is_by_ref() {
-                            debug!("by copy arg with type %s, storing to scratch",
-                                   bcx.ty_to_str(arg_datum.ty));
-                            let scratch = scratch_datum(bcx, arg_datum.ty,
-                                                        "__arg", false);
-
-                            arg_datum.store_to_datum(bcx,
-                                                     INIT,
-                                                     scratch);
-
-                            // Technically, ownership of val passes to the callee.
-                            // However, we must cleanup should we fail before the
-                            // callee is actually invoked.
-                            scratch.add_clean(bcx);
-                            temp_cleanups.push(scratch.val);
-
-                            match scratch.appropriate_mode(bcx.tcx()) {
-                                ByValue => val = Load(bcx, scratch.val),
-                                ByRef(_) => val = scratch.val,
-                            }
-                        } else {
-                            debug!("by copy arg with type %s", bcx.ty_to_str(arg_datum.ty));
-                            match arg_datum.mode {
-                                ByRef(_) => val = Load(bcx, arg_datum.val),
-                                ByValue => val = arg_datum.val,
-                            }
-                        }
+                        debug!("by copy arg with type %s", bcx.ty_to_str(arg_datum.ty));
+                        arg_datum.to_appropriate_llval(bcx)
                     }
                 }
             }
index 713d502c3fb40df2a507c6b12eb434e49b3ebfe0..ae3b773af0b63f8488669c1029346087d35f3c1f 100644 (file)
@@ -228,7 +228,7 @@ pub fn store_environment(bcx: @mut Block,
 
     // Copy expr values into boxed bindings.
     let mut bcx = bcx;
-    foreach (i, bv) in bound_values.iter().enumerate() {
+    for (i, bv) in bound_values.iter().enumerate() {
         debug!("Copy %s into closure", bv.to_str(ccx));
 
         if ccx.sess.asm_comments() {
@@ -268,7 +268,7 @@ pub fn build_closure(bcx0: @mut Block,
 
     // Package up the captured upvars
     let mut env_vals = ~[];
-    foreach cap_var in cap_vars.iter() {
+    for cap_var in cap_vars.iter() {
         debug!("Building closure: captured variable %?", *cap_var);
         let datum = expr::trans_local_var(bcx, cap_var.def);
         match cap_var.mode {
@@ -290,7 +290,7 @@ pub fn build_closure(bcx0: @mut Block,
 
     // If this is a `for` loop body, add two special environment
     // variables:
-    foreach flagptr in include_ret_handle.iter() {
+    for flagptr in include_ret_handle.iter() {
         // Flag indicating we have returned (a by-ref bool):
         let flag_datum = Datum {val: *flagptr, ty: ty::mk_bool(),
                                 mode: ByRef(ZeroMem)};
@@ -337,7 +337,7 @@ pub fn load_environment(fcx: @mut FunctionContext,
 
     // Populate the upvars from the environment.
     let mut i = 0u;
-    foreach cap_var in cap_vars.iter() {
+    for cap_var in cap_vars.iter() {
         let mut upvarptr = GEPi(bcx, llcdata, [0u, i]);
         match sigil {
             ast::BorrowedSigil => { upvarptr = Load(bcx, upvarptr); }
index 2bd1b34f84c69423263befae61a95a07d6e50e25..b8fba9352a356b3736b072a68f7231fbdf67d8ac 100644 (file)
@@ -139,8 +139,8 @@ pub struct param_substs {
 
 impl param_substs {
     pub fn validate(&self) {
-        foreach t in self.tys.iter() { assert!(!ty::type_needs_infer(*t)); }
-        foreach t in self.self_ty.iter() { assert!(!ty::type_needs_infer(*t)); }
+        for t in self.tys.iter() { assert!(!ty::type_needs_infer(*t)); }
+        for t in self.self_ty.iter() { assert!(!ty::type_needs_infer(*t)); }
     }
 }
 
@@ -438,7 +438,7 @@ pub fn revoke_clean(cx: @mut Block, val: ValueRef) {
                 clean_temp(v, _, _) if v == val => true,
                 _ => false
             });
-        foreach i in cleanup_pos.iter() {
+        for i in cleanup_pos.iter() {
             scope_info.cleanups =
                 vec::append(scope_info.cleanups.slice(0u, *i).to_owned(),
                             scope_info.cleanups.slice(*i + 1u,
@@ -944,7 +944,7 @@ pub fn align_to(cx: @mut Block, off: ValueRef, align: ValueRef) -> ValueRef {
 pub fn path_str(sess: session::Session, p: &[path_elt]) -> ~str {
     let mut r = ~"";
     let mut first = true;
-    foreach e in p.iter() {
+    for e in p.iter() {
         match *e {
             ast_map::path_name(s) | ast_map::path_mod(s) => {
                 if first {
index ec96371132e96b19e23b3d01a6e61f2b278f82bc..fe75ea390e693912f20573f0970fb7bd49e9e8f6 100644 (file)
@@ -37,7 +37,7 @@
 pub fn trans_block(bcx: @mut Block, b: &ast::Block, dest: expr::Dest) -> @mut Block {
     let _icx = push_ctxt("trans_block");
     let mut bcx = bcx;
-    foreach s in b.stmts.iter() {
+    for s in b.stmts.iter() {
         debuginfo::update_source_pos(bcx, b.span);
         bcx = trans_stmt(bcx, *s);
     }
@@ -145,7 +145,7 @@ fn trans_if_else(else_bcx_in: @mut Block, elexpr: @ast::expr,
 pub fn join_blocks(parent_bcx: @mut Block, in_cxs: &[@mut Block]) -> @mut Block {
     let out = sub_block(parent_bcx, "join");
     let mut reachable = false;
-    foreach bcx in in_cxs.iter() {
+    for bcx in in_cxs.iter() {
         if !bcx.unreachable {
             Br(*bcx, out.llbb);
             reachable = true;
@@ -224,7 +224,7 @@ pub fn trans_log(log_ex: &ast::expr,
     let (modpath, modname) = {
         let path = &mut bcx.fcx.path;
         let mut modpath = ~[path_mod(ccx.sess.ident_of(ccx.link_meta.name))];
-        foreach e in path.iter() {
+        for e in path.iter() {
             match *e {
                 path_mod(_) => { modpath.push(*e) }
                 _ => {}
index 2487d481c0deae3505c75b74d41edd98af2251a0..8c63be084fd55bfdb93af5e8ca8b8ee7bfa8ad68 100644 (file)
@@ -605,27 +605,6 @@ fn trans_rvalue_dps_unadjusted(bcx: @mut Block, expr: @ast::expr,
                                           expr.id, expr.id,
                                           None, dest);
         }
-        ast::expr_loop_body(blk) => {
-            let expr_ty = expr_ty(bcx, expr);
-            let sigil = ty::ty_closure_sigil(expr_ty);
-            match blk.node {
-                ast::expr_fn_block(ref decl, ref body) => {
-                    return closure::trans_expr_fn(bcx,
-                                                  sigil,
-                                                  decl,
-                                                  body,
-                                                  expr.id,
-                                                  blk.id,
-                                                  Some(None),
-                                                  dest);
-                }
-                _ => {
-                    bcx.sess().impossible_case(
-                        expr.span,
-                        "loop_body has the wrong kind of contents")
-                }
-            }
-        }
         ast::expr_do_body(blk) => {
             return trans_into(bcx, blk, dest);
         }
@@ -1138,7 +1117,7 @@ fn trans_rec_or_struct(bcx: @mut Block,
         let optbase = match base {
             Some(base_expr) => {
                 let mut leftovers = ~[];
-                foreach (i, b) in need_base.iter().enumerate() {
+                for (i, b) in need_base.iter().enumerate() {
                     if *b {
                         leftovers.push((i, field_tys[i].mt.ty))
                     }
@@ -1192,10 +1171,10 @@ fn trans_adt(bcx: @mut Block, repr: &adt::Repr, discr: uint,
     let mut bcx = bcx;
     let addr = match dest {
         Ignore => {
-            foreach &(_i, e) in fields.iter() {
+            for &(_i, e) in fields.iter() {
                 bcx = trans_into(bcx, e, Ignore);
             }
-            foreach sbi in optbase.iter() {
+            for sbi in optbase.iter() {
                 // FIXME #7261: this moves entire base, not just certain fields
                 bcx = trans_into(bcx, sbi.expr, Ignore);
             }
@@ -1205,18 +1184,18 @@ fn trans_adt(bcx: @mut Block, repr: &adt::Repr, discr: uint,
     };
     let mut temp_cleanups = ~[];
     adt::trans_start_init(bcx, repr, addr, discr);
-    foreach &(i, e) in fields.iter() {
+    for &(i, e) in fields.iter() {
         let dest = adt::trans_field_ptr(bcx, repr, addr, discr, i);
         let e_ty = expr_ty(bcx, e);
         bcx = trans_into(bcx, e, SaveIn(dest));
         add_clean_temp_mem(bcx, dest, e_ty);
         temp_cleanups.push(dest);
     }
-    foreach base in optbase.iter() {
+    for base in optbase.iter() {
         // FIXME #6573: is it sound to use the destination's repr on the base?
         // And, would it ever be reasonable to be here with discr != 0?
         let base_datum = unpack_datum!(bcx, trans_to_datum(bcx, base.expr));
-        foreach &(i, t) in base.fields.iter() {
+        for &(i, t) in base.fields.iter() {
             let datum = do base_datum.get_element(bcx, t, ZeroMem) |srcval| {
                 adt::trans_field_ptr(bcx, repr, srcval, discr, i)
             };
@@ -1225,7 +1204,7 @@ fn trans_adt(bcx: @mut Block, repr: &adt::Repr, discr: uint,
         }
     }
 
-    foreach cleanup in temp_cleanups.iter() {
+    for cleanup in temp_cleanups.iter() {
         revoke_clean(bcx, *cleanup);
     }
     return bcx;
index 5c2b606ba16800625c6cae1e6a66f96b1ef27ad8..20c8e69129d74d1fce99d300e55c3a706062bbe1 100644 (file)
@@ -286,7 +286,7 @@ pub fn trans_foreign_mod(ccx: @mut CrateContext,
         Some(abi) => abi,
     };
 
-    foreach &foreign_item in foreign_mod.items.iter() {
+    for &foreign_item in foreign_mod.items.iter() {
         match foreign_item.node {
             ast::foreign_item_fn(*) => {
                 let id = foreign_item.id;
@@ -498,7 +498,7 @@ fn build_args(bcx: @mut Block,
             let _icx = push_ctxt("foreign::wrap::build_args");
             let ccx = bcx.ccx();
             let n = tys.llsig.llarg_tys.len();
-            foreach i in range(0u, n) {
+            for i in range(0u, n) {
                 let arg_i = bcx.fcx.arg_pos(i);
                 let mut llargval = get_param(llwrapfn, arg_i);
 
@@ -512,7 +512,7 @@ fn build_args(bcx: @mut Block,
                 store_inbounds(bcx, llargval, llargbundle, [0u, i]);
             }
 
-            foreach &retptr in bcx.fcx.llretptr.iter() {
+            for &retptr in bcx.fcx.llretptr.iter() {
                 store_inbounds(bcx, retptr, llargbundle, [0u, n]);
             }
         }
@@ -522,7 +522,7 @@ fn build_ret(bcx: @mut Block,
                      llargbundle: ValueRef) {
             let _icx = push_ctxt("foreign::wrap::build_ret");
             let arg_count = shim_types.fn_sig.inputs.len();
-            foreach &retptr in bcx.fcx.llretptr.iter() {
+            for &retptr in bcx.fcx.llretptr.iter() {
                 let llretptr = load_inbounds(bcx, llargbundle, [0, arg_count]);
                 Store(bcx, Load(bcx, llretptr), retptr);
             }
@@ -543,7 +543,7 @@ fn simple_llvm_intrinsic(bcx: @mut Block, name: &'static str, num_args: uint) {
         assert!(num_args <= 4);
         let mut args = [0 as ValueRef, ..4];
         let first_real_arg = bcx.fcx.arg_pos(0u);
-        foreach i in range(0u, num_args) {
+        for 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);
index c0a5795e87de1870970deb9053a0f65edfc9326d..925b3dd62db5c2a7bbed8ab8901490dec3bdb70c 100644 (file)
@@ -427,7 +427,7 @@ pub fn trans_struct_drop_flag(bcx: @mut Block, t: ty::t, v0: ValueRef, dtor_did:
 
         // Drop the fields
         let field_tys = ty::struct_fields(bcx.tcx(), class_did, substs);
-        foreach (i, fld) in field_tys.iter().enumerate() {
+        for (i, fld) in field_tys.iter().enumerate() {
             let llfld_a = adt::trans_field_ptr(bcx, repr, v0, 0, i);
             bcx = drop_ty(bcx, llfld_a, fld.mt.ty);
         }
@@ -462,7 +462,7 @@ pub fn trans_struct_drop(mut bcx: @mut Block, t: ty::t, v0: ValueRef, dtor_did:
 
     // Drop the fields
     let field_tys = ty::struct_fields(bcx.tcx(), class_did, substs);
-    foreach (i, fld) in field_tys.iter().enumerate() {
+    for (i, fld) in field_tys.iter().enumerate() {
         let llfld_a = adt::trans_field_ptr(bcx, repr, v0, 0, i);
         bcx = drop_ty(bcx, llfld_a, fld.mt.ty);
     }
@@ -737,7 +737,7 @@ pub fn emit_tydescs(ccx: &mut CrateContext) {
     ccx.finished_tydescs = true;
     let glue_fn_ty = Type::generic_glue_fn(ccx).ptr_to();
     let tyds = &mut ccx.tydescs;
-    foreach (_, &val) in tyds.iter() {
+    for (_, &val) in tyds.iter() {
         let ti = val;
 
         // Each of the glue functions needs to be cast to a generic type
index 32d50ef9fd3ca603b230c12e3266f83c47718264..3b1fd0ecb6952cf319bd148aeeddf41bb8fab40b 100644 (file)
@@ -68,7 +68,7 @@ pub fn maybe_instantiate_inline(ccx: @mut CrateContext, fn_id: ast::def_id)
             ast::item_enum(_, _) => {
               let vs_here = ty::enum_variants(ccx.tcx, local_def(item.id));
               let vs_there = ty::enum_variants(ccx.tcx, parent_id);
-              foreach (here, there) in vs_here.iter().zip(vs_there.iter()) {
+              for (here, there) in vs_here.iter().zip(vs_there.iter()) {
                   if there.id == fn_id { my_id = here.id.node; }
                   ccx.external.insert(there.id, Some(here.id.node));
               }
index b3939a3105065b03e979aa69ceff657800f0819e..13f11d23c3bf3b6c899d80adeaa96a0094d6c1af 100644 (file)
@@ -58,7 +58,7 @@ pub fn trans_impl(ccx: @mut CrateContext,
 
     if !generics.ty_params.is_empty() { return; }
     let sub_path = vec::append_one(path, path_name(name));
-    foreach method in methods.iter() {
+    for method in methods.iter() {
         if method.generics.ty_params.len() == 0u {
             let llfn = get_item_val(ccx, method.id);
             let path = vec::append_one(sub_path.clone(),
@@ -138,7 +138,6 @@ pub fn trans_self_arg(bcx: @mut Block,
                    mentry.self_mode,
                    base,
                    temp_cleanups,
-                   None,
                    DontAutorefArg)
 }
 
@@ -600,7 +599,7 @@ pub fn make_vtable(ccx: &mut CrateContext,
         let _icx = push_ctxt("impl::make_vtable");
 
         let mut components = ~[ tydesc.tydesc ];
-        foreach &ptr in ptrs.iter() {
+        for &ptr in ptrs.iter() {
             components.push(ptr)
         }
 
index 272c72f03eaee73932dd1bd44068a560cf0da48f..6fd47436fd8849d25dabfd0e3b5c72258f853d8e 100644 (file)
@@ -75,8 +75,8 @@ pub fn monomorphic_fn(ccx: @mut CrateContext,
         self_vtables: self_vtables
     };
 
-    foreach s in real_substs.tps.iter() { assert!(!ty::type_has_params(*s)); }
-    foreach s in psubsts.tys.iter() { assert!(!ty::type_has_params(*s)); }
+    for s in real_substs.tps.iter() { assert!(!ty::type_has_params(*s)); }
+    for s in psubsts.tys.iter() { assert!(!ty::type_has_params(*s)); }
     let param_uses = type_use::type_uses_for(ccx, fn_id, psubsts.tys.len());
 
 
index 032bbd1be3a84c87f024f64a076f2cc7f749f67b..340964ff97b270cf79735d4057e3adba36aea862 100644 (file)
@@ -96,7 +96,7 @@ pub fn visit(&mut self, ty_name: &str, args: &[ValueRef]) {
         let v = self.visitor_val;
         debug!("passing %u args:", args.len());
         let mut bcx = self.bcx;
-        foreach (i, a) in args.iter().enumerate() {
+        for (i, a) in args.iter().enumerate() {
             debug!("arg %u: %s", i, bcx.val_to_str(*a));
         }
         let bool_ty = ty::mk_bool();
@@ -214,7 +214,7 @@ pub fn visit_ty(&mut self, t: ty::t) {
               let extra = ~[self.c_uint(tys.len())]
                   + self.c_size_and_align(t);
               do self.bracketed("tup", extra) |this| {
-                  foreach (i, t) in tys.iter().enumerate() {
+                  for (i, t) in tys.iter().enumerate() {
                       let extra = ~[this.c_uint(i), this.c_tydesc(*t)];
                       this.visit("tup_field", extra);
                   }
@@ -259,7 +259,7 @@ pub fn visit_ty(&mut self, t: ty::t) {
               let extra = ~[self.c_uint(fields.len())]
                   + self.c_size_and_align(t);
               do self.bracketed("class", extra) |this| {
-                  foreach (i, field) in fields.iter().enumerate() {
+                  for (i, field) in fields.iter().enumerate() {
                       let extra = ~[this.c_uint(i),
                                     this.c_slice(
                                         bcx.ccx().sess.str_of(field.ident))]
@@ -318,14 +318,14 @@ pub fn visit_ty(&mut self, t: ty::t) {
             let enum_args = ~[self.c_uint(variants.len()), make_get_disr()]
                 + self.c_size_and_align(t);
             do self.bracketed("enum", enum_args) |this| {
-                foreach (i, v) in variants.iter().enumerate() {
+                for (i, v) in variants.iter().enumerate() {
                     let name = ccx.sess.str_of(v.name);
                     let variant_args = ~[this.c_uint(i),
                                          this.c_uint(v.disr_val),
                                          this.c_uint(v.args.len()),
                                          this.c_slice(name)];
                     do this.bracketed("enum_variant", variant_args) |this| {
-                        foreach (j, a) in v.args.iter().enumerate() {
+                        for (j, a) in v.args.iter().enumerate() {
                             let bcx = this.bcx;
                             let null = C_null(llptrty);
                             let ptr = adt::trans_field_ptr(bcx, repr, null, v.disr_val, j);
@@ -360,7 +360,7 @@ pub fn visit_ty(&mut self, t: ty::t) {
     }
 
     pub fn visit_sig(&mut self, retval: uint, sig: &ty::FnSig) {
-        foreach (i, arg) in sig.inputs.iter().enumerate() {
+        for (i, arg) in sig.inputs.iter().enumerate() {
             let modeval = 5u;   // "by copy"
             let extra = ~[self.c_uint(i),
                          self.c_uint(modeval),
index 58a242c53ec1f838140040c022b9c2e32f14491d..5b0e2fa18f240af3716c6604a6ae391512b18d5e 100644 (file)
@@ -374,14 +374,14 @@ pub fn write_content(bcx: @mut Block,
         ast::expr_vec(ref elements, _) => {
             match dest {
                 Ignore => {
-                    foreach element in elements.iter() {
+                    for element in elements.iter() {
                         bcx = expr::trans_into(bcx, *element, Ignore);
                     }
                 }
 
                 SaveIn(lldest) => {
                     let mut temp_cleanups = ~[];
-                    foreach (i, element) in elements.iter().enumerate() {
+                    for (i, element) in elements.iter().enumerate() {
                         let lleltptr = GEPi(bcx, lldest, [i]);
                         debug!("writing index %? with lleltptr=%?",
                                i, bcx.val_to_str(lleltptr));
@@ -390,7 +390,7 @@ pub fn write_content(bcx: @mut Block,
                         add_clean_temp_mem(bcx, lleltptr, vt.unit_ty);
                         temp_cleanups.push(lleltptr);
                     }
-                    foreach cleanup in temp_cleanups.iter() {
+                    for cleanup in temp_cleanups.iter() {
                         revoke_clean(bcx, *cleanup);
                     }
                 }
index b895ec729f8f17e8538421b5d8738d5ed597b5de..42d5527ee43bc39bced200bcb0eed0737d7e792f 100644 (file)
@@ -93,7 +93,7 @@ fn store_type_uses(cx: Context, fn_id: def_id) -> @~[type_uses] {
     // 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 {
-        foreach n in range(0u, n_tps) { cx.uses[n] |= use_all; }
+        for n in range(0u, n_tps) { cx.uses[n] |= use_all; }
         return store_type_uses(cx, fn_id);
     }
 
@@ -117,13 +117,13 @@ fn store_type_uses(cx: Context, fn_id: def_id) -> @~[type_uses] {
         // 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).
-        foreach n in range(0u, n_tps) { cx.uses[n] |= use_all;}
+        for 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(_, _, _) => {
-        foreach n in range(0u, n_tps) { cx.uses[n] |= use_repr;}
+        for n in range(0u, n_tps) { cx.uses[n] |= use_repr;}
       }
       ast_map::node_foreign_item(i@@foreign_item {
             node: foreign_item_fn(*),
@@ -172,13 +172,13 @@ fn store_type_uses(cx: Context, fn_id: def_id) -> @~[type_uses] {
                     _ => fail!("unknown intrinsic in type_use")
                 }
             };
-            foreach n in range(0u, n_tps) { cx.uses[n] |= flags;}
+            for 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.
-        foreach n in range(0u, n_tps) { cx.uses[n] |= use_repr; }
+        for n in range(0u, n_tps) { cx.uses[n] |= use_repr; }
       }
       _ => {
         ccx.tcx.sess.bug(fmt!("unknown node type in type_use: %s",
@@ -193,7 +193,7 @@ fn store_type_uses(cx: Context, fn_id: def_id) -> @~[type_uses] {
     match ty::get(ty::lookup_item_type(cx.ccx.tcx, fn_id).ty).sty {
         ty::ty_bare_fn(ty::BareFnTy {sig: ref sig, _}) |
         ty::ty_closure(ty::ClosureTy {sig: ref sig, _}) => {
-            foreach arg in sig.inputs.iter() {
+            for arg in sig.inputs.iter() {
                 type_needs(&cx, use_repr, *arg);
             }
         }
@@ -209,7 +209,7 @@ pub fn type_needs(cx: &Context, use_: uint, ty: ty::t) {
         let uses = &*cx.uses;
         uses.len()
     };
-    foreach i in range(0u, len) {
+    for i in range(0u, len) {
         if cx.uses[i] & use_ != use_ {
             type_needs_inner(cx, use_, ty, @Nil);
             return;
@@ -240,8 +240,8 @@ pub fn type_needs_inner(cx: &Context,
                 if list::find(enums_seen, |id| *id == did).is_none() {
                     let seen = @Cons(did, enums_seen);
                     let r = ty::enum_variants(cx.ccx.tcx, did);
-                    foreach v in r.iter() {
-                        foreach aty in v.args.iter() {
+                    for v in r.iter() {
+                        for aty in v.args.iter() {
                             let t = ty::subst(cx.ccx.tcx, &(*substs), *aty);
                             type_needs_inner(cx, use_, t, seen);
                         }
@@ -267,7 +267,7 @@ pub fn mark_for_method_call(cx: &Context, e_id: NodeId, callee_id: NodeId) {
     let mut opt_static_did = None;
     {
         let r = cx.ccx.maps.method_map.find(&e_id);
-        foreach mth in r.iter() {
+        for mth in r.iter() {
             match mth.origin {
               typeck::method_static(did) => {
                   opt_static_did = Some(did);
@@ -287,12 +287,12 @@ pub fn mark_for_method_call(cx: &Context, e_id: NodeId, callee_id: NodeId) {
     // above because the recursive call to `type_needs` can trigger
     // inlining and hence can cause `method_map` and
     // `node_type_substs` to be modified.
-    foreach &did in opt_static_did.iter() {
+    for &did in opt_static_did.iter() {
         {
             let r = cx.ccx.tcx.node_type_substs.find_copy(&callee_id);
-            foreach ts in r.iter() {
+            for ts in r.iter() {
                 let type_uses = type_uses_for(cx.ccx, did, ts.len());
-                foreach (uses, subst) in type_uses.iter().zip(ts.iter()) {
+                for (uses, subst) in type_uses.iter().zip(ts.iter()) {
                     type_needs(cx, *uses, *subst)
                 }
             }
@@ -328,10 +328,10 @@ pub fn mark_for_expr(cx: &Context, e: &expr) {
       }
       expr_path(_) | expr_self => {
         let opt_ts = cx.ccx.tcx.node_type_substs.find_copy(&e.id);
-        foreach ts in opt_ts.iter() {
+        for ts in opt_ts.iter() {
             let id = ast_util::def_id_of_def(cx.ccx.tcx.def_map.get_copy(&e.id));
             let uses_for_ts = type_uses_for(cx.ccx, id, ts.len());
-            foreach (uses, subst) in uses_for_ts.iter().zip(ts.iter()) {
+            for (uses, subst) in uses_for_ts.iter().zip(ts.iter()) {
                 type_needs(cx, *uses, *subst)
             }
         }
@@ -340,7 +340,7 @@ pub fn mark_for_expr(cx: &Context, e: &expr) {
           match ty::ty_closure_sigil(ty::expr_ty(cx.ccx.tcx, e)) {
               ast::OwnedSigil => {}
               ast::BorrowedSigil | ast::ManagedSigil => {
-                  foreach fv in freevars::get_freevars(cx.ccx.tcx, e.id).iter() {
+                  for fv in freevars::get_freevars(cx.ccx.tcx, e.id).iter() {
                       let node_id = ast_util::def_id_of_def(fv.def).node;
                       node_type_needs(cx, use_repr, node_id);
                   }
@@ -371,7 +371,7 @@ pub fn mark_for_expr(cx: &Context, e: &expr) {
       }
       expr_call(f, _, _) => {
           let r = ty::ty_fn_args(ty::node_id_to_type(cx.ccx.tcx, f.id));
-          foreach a in r.iter() {
+          for a in r.iter() {
               type_needs(cx, use_repr, *a);
           }
       }
@@ -380,17 +380,17 @@ pub fn mark_for_expr(cx: &Context, e: &expr) {
         type_needs(cx, use_repr, ty::type_autoderef(cx.ccx.tcx, base_ty));
 
         let r = ty::ty_fn_args(ty::node_id_to_type(cx.ccx.tcx, callee_id));
-        foreach a in r.iter() {
+        for a in r.iter() {
             type_needs(cx, use_repr, *a);
         }
         mark_for_method_call(cx, e.id, callee_id);
       }
 
       expr_inline_asm(ref ia) => {
-        foreach &(_, input) in ia.inputs.iter() {
+        for &(_, input) in ia.inputs.iter() {
           node_type_needs(cx, use_repr, input.id);
         }
-        foreach &(_, out) in ia.outputs.iter() {
+        for &(_, out) in ia.outputs.iter() {
           node_type_needs(cx, use_repr, out.id);
         }
       }
@@ -400,7 +400,7 @@ pub fn mark_for_expr(cx: &Context, e: &expr) {
       expr_match(*) | expr_block(_) | expr_if(*) | expr_while(*) |
       expr_break(_) | expr_again(_) | expr_unary(*) | expr_lit(_) |
       expr_mac(_) | expr_addr_of(*) | expr_ret(_) | expr_loop(*) |
-      expr_loop_body(_) | expr_do_body(_) => (),
+      expr_do_body(_) => (),
 
       expr_for_loop(*) => fail!("non-desugared expr_for_loop")
     }
@@ -422,7 +422,7 @@ pub fn handle_body(cx: &Context, body: &Block) {
         },
         visit_block: |b, (cx, v)| {
             oldvisit::visit_block(b, (cx, v));
-            foreach e in b.expr.iter() {
+            for e in b.expr.iter() {
                 node_type_needs(cx, use_repr, e.id);
             }
         },
index bfab8e26132e7ce689134efaf74aa1579d1e1593..29b975cdf99f8908a49ababec5b18eaf5a68374a 100644 (file)
@@ -958,11 +958,11 @@ fn rflags(r: Region) -> uint {
     }
     fn sflags(substs: &substs) -> uint {
         let mut f = 0u;
-        foreach tt in substs.tps.iter() { f |= get(*tt).flags; }
+        for tt in substs.tps.iter() { f |= get(*tt).flags; }
         match substs.regions {
             ErasedRegions => {}
             NonerasedRegions(ref regions) => {
-                foreach r in regions.iter() {
+                for r in regions.iter() {
                     f |= rflags(*r)
                 }
             }
@@ -1004,16 +1004,16 @@ fn sflags(substs: &substs) -> uint {
         flags |= rflags(r);
         flags |= get(m.ty).flags;
       }
-      &ty_tup(ref ts) => foreach tt in ts.iter() { flags |= get(*tt).flags; },
+      &ty_tup(ref ts) => for tt in ts.iter() { flags |= get(*tt).flags; },
       &ty_bare_fn(ref f) => {
-        foreach a in f.sig.inputs.iter() { flags |= get(*a).flags; }
+        for a in f.sig.inputs.iter() { flags |= get(*a).flags; }
         flags |= get(f.sig.output).flags;
         // T -> _|_ is *not* _|_ !
         flags &= !(has_ty_bot as uint);
       }
       &ty_closure(ref f) => {
         flags |= rflags(f.region);
-        foreach a in f.sig.inputs.iter() { flags |= get(*a).flags; }
+        for a in f.sig.inputs.iter() { flags |= get(*a).flags; }
         flags |= get(f.sig.output).flags;
         // T -> _|_ is *not* _|_ !
         flags &= !(has_ty_bot as uint);
@@ -1268,15 +1268,15 @@ pub fn maybe_walk_ty(ty: t, f: &fn(t) -> bool) {
       }
       ty_enum(_, ref substs) | ty_struct(_, ref substs) |
       ty_trait(_, ref substs, _, _, _) => {
-        foreach subty in (*substs).tps.iter() { maybe_walk_ty(*subty, |x| f(x)); }
+        for subty in (*substs).tps.iter() { maybe_walk_ty(*subty, |x| f(x)); }
       }
-      ty_tup(ref ts) => { foreach tt in ts.iter() { maybe_walk_ty(*tt, |x| f(x)); } }
+      ty_tup(ref ts) => { for tt in ts.iter() { maybe_walk_ty(*tt, |x| f(x)); } }
       ty_bare_fn(ref ft) => {
-        foreach a in ft.sig.inputs.iter() { maybe_walk_ty(*a, |x| f(x)); }
+        for a in ft.sig.inputs.iter() { maybe_walk_ty(*a, |x| f(x)); }
         maybe_walk_ty(ft.sig.output, f);
       }
       ty_closure(ref ft) => {
-        foreach a in ft.sig.inputs.iter() { maybe_walk_ty(*a, |x| f(x)); }
+        for a in ft.sig.inputs.iter() { maybe_walk_ty(*a, |x| f(x)); }
         maybe_walk_ty(ft.sig.output, f);
       }
     }
@@ -1765,8 +1765,8 @@ fn type_needs_unwind_cleanup_(cx: ctxt, ty: t,
             true
           }
           ty_enum(did, ref substs) => {
-            foreach v in (*enum_variants(cx, did)).iter() {
-                foreach aty in v.args.iter() {
+            for v in (*enum_variants(cx, did)).iter() {
+                for aty in v.args.iter() {
                     let t = subst(cx, substs, *aty);
                     needs_unwind_cleanup |=
                         type_needs_unwind_cleanup_(cx, t, tycache,
@@ -2436,8 +2436,8 @@ pub fn type_structurally_contains(cx: ctxt,
     if test(sty) { return true; }
     match *sty {
       ty_enum(did, ref substs) => {
-        foreach variant in (*enum_variants(cx, did)).iter() {
-            foreach aty in variant.args.iter() {
+        for variant in (*enum_variants(cx, did)).iter() {
+            for aty in variant.args.iter() {
                 let sty = subst(cx, substs, *aty);
                 if type_structurally_contains(cx, sty, |x| test(x)) { return true; }
             }
@@ -2446,7 +2446,7 @@ pub fn type_structurally_contains(cx: ctxt,
       }
       ty_struct(did, ref substs) => {
         let r = lookup_struct_fields(cx, did);
-        foreach field in r.iter() {
+        for field in r.iter() {
             let ft = lookup_field_type(cx, did, field.id, substs);
             if type_structurally_contains(cx, ft, |x| test(x)) { return true; }
         }
@@ -2454,7 +2454,7 @@ pub fn type_structurally_contains(cx: ctxt,
       }
 
       ty_tup(ref ts) => {
-        foreach tt in ts.iter() {
+        for tt in ts.iter() {
             if type_structurally_contains(cx, *tt, |x| test(x)) { return true; }
         }
         return false;
@@ -2533,7 +2533,7 @@ pub fn type_is_pod(cx: ctxt, ty: t) -> bool {
       // Structural types
       ty_enum(did, ref substs) => {
         let variants = enum_variants(cx, did);
-        foreach variant in (*variants).iter() {
+        for variant in (*variants).iter() {
             // XXX(pcwalton): This is an inefficient way to do this. Don't
             // synthesize a tuple!
             //
@@ -2544,7 +2544,7 @@ pub fn type_is_pod(cx: ctxt, ty: t) -> bool {
         }
       }
       ty_tup(ref elts) => {
-        foreach elt in elts.iter() { if !type_is_pod(cx, *elt) { result = false; } }
+        for elt in elts.iter() { if !type_is_pod(cx, *elt) { result = false; } }
       }
       ty_estr(vstore_fixed(_)) => result = true,
       ty_evec(ref mt, vstore_fixed(_)) | ty_unboxed_vec(ref mt) => {
@@ -2963,7 +2963,7 @@ pub fn adjust_ty(cx: ctxt,
             let mut adjusted_ty = unadjusted_ty;
 
             if (!ty::type_is_error(adjusted_ty)) {
-                foreach i in range(0, adj.autoderefs) {
+                for i in range(0, adj.autoderefs) {
                     match ty::deref(cx, adjusted_ty, true) {
                         Some(mt) => { adjusted_ty = mt.ty; }
                         None => {
@@ -3192,7 +3192,6 @@ pub fn expr_kind(tcx: ctxt,
         ast::expr_if(*) |
         ast::expr_match(*) |
         ast::expr_fn_block(*) |
-        ast::expr_loop_body(*) |
         ast::expr_do_body(*) |
         ast::expr_block(*) |
         ast::expr_repeat(*) |
@@ -3274,14 +3273,14 @@ pub fn stmt_node_id(s: &ast::stmt) -> ast::NodeId {
 
 pub fn field_idx(id: ast::ident, fields: &[field]) -> Option<uint> {
     let mut i = 0u;
-    foreach f in fields.iter() { if f.ident == id { return Some(i); } i += 1u; }
+    for f in fields.iter() { if f.ident == id { return Some(i); } i += 1u; }
     return None;
 }
 
 pub fn field_idx_strict(tcx: ty::ctxt, id: ast::ident, fields: &[field])
                      -> uint {
     let mut i = 0u;
-    foreach f in fields.iter() { if f.ident == id { return i; } i += 1u; }
+    for f in fields.iter() { if f.ident == id { return i; } i += 1u; }
     tcx.sess.bug(fmt!(
         "No field named `%s` found in the list of fields `%?`",
         tcx.sess.str_of(id),
@@ -4384,7 +4383,7 @@ pub fn determine_inherited_purity(parent: (ast::purity, ast::NodeId),
 pub fn each_bound_trait_and_supertraits(tcx: ctxt,
                                         bounds: &[@TraitRef],
                                         f: &fn(@TraitRef) -> bool) -> bool {
-    foreach &bound_trait_ref in bounds.iter() {
+    for &bound_trait_ref in bounds.iter() {
         let mut supertrait_set = HashMap::new();
         let mut trait_refs = ~[];
         let mut i = 0;
@@ -4404,7 +4403,7 @@ pub fn each_bound_trait_and_supertraits(tcx: ctxt,
 
             // Add supertraits to supertrait_set
             let supertrait_refs = trait_ref_supertraits(tcx, trait_refs[i]);
-            foreach &supertrait_ref in supertrait_refs.iter() {
+            for &supertrait_ref in supertrait_refs.iter() {
                 debug!("each_bound_trait_and_supertraits(supertrait_ref=%s)",
                        supertrait_ref.repr(tcx));
 
@@ -4425,7 +4424,7 @@ pub fn each_bound_trait_and_supertraits(tcx: ctxt,
 pub fn count_traits_and_supertraits(tcx: ctxt,
                                     type_param_defs: &[TypeParameterDef]) -> uint {
     let mut total = 0;
-    foreach type_param_def in type_param_defs.iter() {
+    for type_param_def in type_param_defs.iter() {
         do each_bound_trait_and_supertraits(
             tcx, type_param_def.bounds.trait_bounds) |_| {
             total += 1;
index 8a8b3a07c5d8b437f7e80c97a5b4f6e23c92b3f5..ebf9d0944c9fbb8335d9ccdbd43ff948555fdd0c 100644 (file)
@@ -768,7 +768,7 @@ fn conv_builtin_bounds(tcx: ty::ctxt, ast_bounds: &Option<OptVec<ast::TyParamBou
     match (ast_bounds, store) {
         (&Some(ref bound_vec), _) => {
             let mut builtin_bounds = ty::EmptyBuiltinBounds();
-            foreach ast_bound in bound_vec.iter() {
+            for ast_bound in bound_vec.iter() {
                 match *ast_bound {
                     ast::TraitTyParamBound(ref b) => {
                         match lookup_def_tcx(tcx, b.path.span, b.ref_id) {
index 9555a58fff34722731b7eff7faf318f36b776241..842bbff41e065689914c5617b8b2bbeabc31c8d6 100644 (file)
@@ -35,13 +35,13 @@ pub fn check_match(fcx: @mut FnCtxt,
 
     // Typecheck the patterns first, so that we get types for all the
     // bindings.
-    foreach arm in arms.iter() {
+    for arm in arms.iter() {
         let pcx = pat_ctxt {
             fcx: fcx,
             map: pat_id_map(tcx.def_map, arm.pats[0]),
         };
 
-        foreach p in arm.pats.iter() { check_pat(&pcx, *p, discrim_ty);}
+        for p in arm.pats.iter() { check_pat(&pcx, *p, discrim_ty);}
     }
 
     // The result of the match is the common supertype of all the
@@ -55,7 +55,7 @@ pub fn check_match(fcx: @mut FnCtxt,
 
     // Now typecheck the blocks.
     let mut saw_err = ty::type_is_error(discrim_ty);
-    foreach arm in arms.iter() {
+    for arm in arms.iter() {
         let mut guard_err = false;
         let mut guard_bot = false;
         match arm.guard {
@@ -239,8 +239,8 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: &ast::Path,
         }
 
         if !error_happened {
-            foreach pats in subpats.iter() {
-                foreach (subpat, arg_ty) in pats.iter().zip(arg_types.iter()) {
+            for pats in subpats.iter() {
+                for (subpat, arg_ty) in pats.iter().zip(arg_types.iter()) {
                     check_pat(pcx, *subpat, *arg_ty);
                 }
             }
@@ -256,8 +256,8 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: &ast::Path,
     }
 
     if error_happened {
-        foreach pats in subpats.iter() {
-            foreach pat in pats.iter() {
+        for pats in subpats.iter() {
+            for pat in pats.iter() {
                 check_pat(pcx, *pat, ty::mk_err());
             }
         }
@@ -283,13 +283,13 @@ pub fn check_struct_pat_fields(pcx: &pat_ctxt,
 
     // Index the class fields.
     let mut field_map = HashMap::new();
-    foreach (i, class_field) in class_fields.iter().enumerate() {
+    for (i, class_field) in class_fields.iter().enumerate() {
         field_map.insert(class_field.ident, i);
     }
 
     // Typecheck each field.
     let mut found_fields = HashSet::new();
-    foreach field in fields.iter() {
+    for field in fields.iter() {
         match field_map.find(&field.ident) {
             Some(&index) => {
                 let class_field = class_fields[index];
@@ -312,7 +312,7 @@ pub fn check_struct_pat_fields(pcx: &pat_ctxt,
 
     // Report an error if not all the fields were specified.
     if !etc {
-        foreach (i, field) in class_fields.iter().enumerate() {
+        for (i, field) in class_fields.iter().enumerate() {
             if found_fields.contains(&i) {
                 loop;
             }
@@ -518,13 +518,13 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
         let e_count = elts.len();
         match *s {
             ty::ty_tup(ref ex_elts) if e_count == ex_elts.len() => {
-                foreach (i, elt) in elts.iter().enumerate() {
+                for (i, elt) in elts.iter().enumerate() {
                     check_pat(pcx, *elt, ex_elts[i]);
                 }
                 fcx.write_ty(pat.id, expected);
             }
             _ => {
-                foreach elt in elts.iter() {
+                for elt in elts.iter() {
                     check_pat(pcx, *elt, ty::mk_err());
                 }
                 // use terr_tuple_size if both types are tuples
@@ -572,13 +572,13 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
             (mt, default_region_var)
           },
           _ => {
-              foreach &elt in before.iter() {
+              for &elt in before.iter() {
                   check_pat(pcx, elt, ty::mk_err());
               }
-              foreach &elt in slice.iter() {
+              for &elt in slice.iter() {
                   check_pat(pcx, elt, ty::mk_err());
               }
-              foreach &elt in after.iter() {
+              for &elt in after.iter() {
                   check_pat(pcx, elt, ty::mk_err());
               }
               fcx.infcx().type_error_message_str_with_expected(
@@ -594,7 +594,7 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
               return;
           }
         };
-        foreach elt in before.iter() {
+        for elt in before.iter() {
             check_pat(pcx, *elt, elt_type.ty);
         }
         match slice {
@@ -607,7 +607,7 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) {
             }
             None => ()
         }
-        foreach elt in after.iter() {
+        for elt in after.iter() {
             check_pat(pcx, *elt, elt_type.ty);
         }
         fcx.write_ty(pat.id, expected);
index 2d7840423c5e57820d3846c7e129de28d6b7d1c7..209f636ddc238d588f867b3cb233306f8f61c319 100644 (file)
@@ -313,12 +313,12 @@ pub fn push_extension_candidates(&self) {
         // candidates.
         let trait_map: &mut resolve::TraitMap = &mut self.fcx.ccx.trait_map;
         let opt_applicable_traits = trait_map.find(&self.expr.id);
-        foreach applicable_traits in opt_applicable_traits.iter() {
-            foreach trait_did in applicable_traits.iter() {
+        for applicable_traits in opt_applicable_traits.iter() {
+            for trait_did in applicable_traits.iter() {
                 // Look for explicit implementations.
                 let opt_impl_infos = self.tcx().trait_impls.find(trait_did);
-                foreach impl_infos in opt_impl_infos.iter() {
-                    foreach impl_info in impl_infos.iter() {
+                for impl_infos in opt_impl_infos.iter() {
+                    for impl_info in impl_infos.iter() {
                         self.push_candidates_from_impl(
                             self.extension_candidates, *impl_info);
 
@@ -461,8 +461,8 @@ pub fn push_inherent_candidates_from_bounds(&self,
 
     pub fn push_inherent_impl_candidates_for_type(&self, did: def_id) {
         let opt_impl_infos = self.tcx().inherent_impls.find(&did);
-        foreach impl_infos in opt_impl_infos.iter() {
-            foreach impl_info in impl_infos.iter() {
+        for impl_infos in opt_impl_infos.iter() {
+            for impl_info in impl_infos.iter() {
                 self.push_candidates_from_impl(
                     self.inherent_candidates, *impl_info);
             }
@@ -708,7 +708,7 @@ pub fn search_for_some_kind_of_autorefd_method(
         let region =
             self.infcx().next_region_var(
                 infer::Autoref(self.expr.span));
-        foreach mutbl in mutbls.iter() {
+        for mutbl in mutbls.iter() {
             let autoref_ty = mk_autoref_ty(*mutbl, region);
             match self.search_for_method(autoref_ty) {
                 None => {}
@@ -772,7 +772,7 @@ pub fn consider_candidates(&self,
             self.tcx().sess.span_err(
                 self.expr.span,
                 "multiple applicable methods in scope");
-            foreach idx in range(0u, relevant_candidates.len()) {
+            for idx in range(0u, relevant_candidates.len()) {
                 self.report_candidate(idx, &relevant_candidates[idx].origin);
             }
         }
index feecb82eaab9041262a2fd3e21b5e3e7574b119e..7f486f77447cb8c6c6d32c3d1370611c75e2c5e7 100644 (file)
@@ -170,10 +170,6 @@ pub struct inherited {
 
 #[deriving(Clone)]
 pub enum FnKind {
-    // This is a for-closure.  The ty::t is the return type of the
-    // enclosing function.
-    ForLoop(ty::t),
-
     // A do-closure.
     DoBlock,
 
@@ -230,8 +226,6 @@ pub struct FnCtxt {
     err_count_on_creation: uint,
 
     ret_ty: ty::t,
-    // Used by loop bodies that return from the outer function
-    indirect_ret_ty: Option<ty::t>,
     ps: PurityState,
 
     // Sometimes we generate region pointers where the precise region
@@ -283,7 +277,6 @@ pub fn blank_fn_ctxt(ccx: @mut CrateCtxt,
     @mut FnCtxt {
         err_count_on_creation: ccx.tcx.sess.err_count(),
         ret_ty: rty,
-        indirect_ret_ty: None,
         ps: PurityState::function(ast::impure_fn, 0),
         region_lb: region_bnd,
         in_scope_regions: @Nil,
@@ -390,17 +383,9 @@ pub fn check_fn(ccx: @mut CrateCtxt,
     // Create the function context.  This is either derived from scratch or,
     // in the case of function expressions, based on the outer context.
     let fcx: @mut FnCtxt = {
-        // In a for-loop, you have an 'indirect return' because return
-        // does not return out of the directly enclosing fn
-        let indirect_ret_ty = match fn_kind {
-            ForLoop(t) => Some(t),
-            DoBlock | Vanilla => None
-        };
-
         @mut FnCtxt {
             err_count_on_creation: err_count_on_creation,
             ret_ty: ret_ty,
-            indirect_ret_ty: indirect_ret_ty,
             ps: PurityState::function(purity, id),
             region_lb: body.id,
             in_scope_regions: isr,
@@ -428,10 +413,10 @@ pub fn check_fn(ccx: @mut CrateCtxt,
       None => ()
     }
 
-    foreach self_info in opt_self_info.iter() {
+    for self_info in opt_self_info.iter() {
         fcx.write_ty(self_info.self_id, self_info.self_ty);
     }
-    foreach (input, arg) in decl.inputs.iter().zip(arg_tys.iter()) {
+    for (input, arg) in decl.inputs.iter().zip(arg_tys.iter()) {
         fcx.write_ty(input.id, *arg);
     }
 
@@ -460,7 +445,7 @@ fn gather_locals(fcx: @mut FnCtxt,
         };
 
         // Add the self parameter
-        foreach self_info in opt_self_info.iter() {
+        for self_info in opt_self_info.iter() {
             assign(self_info.self_id, Some(self_info.self_ty));
             debug!("self is assigned to %s",
                    fcx.infcx().ty_to_str(
@@ -468,7 +453,7 @@ fn gather_locals(fcx: @mut FnCtxt,
         }
 
         // Add formal parameters.
-        foreach (arg_ty, input) in arg_tys.iter().zip(decl.inputs.iter()) {
+        for (arg_ty, input) in arg_tys.iter().zip(decl.inputs.iter()) {
             // Create type variables for each argument.
             do pat_util::pat_bindings(tcx.def_map, input.pat)
                     |_bm, pat_id, _sp, _path| {
@@ -570,7 +555,7 @@ pub fn check_no_duplicate_fields(tcx: ty::ctxt,
                                  fields: ~[(ast::ident, span)]) {
     let mut field_names = HashMap::new();
 
-    foreach p in fields.iter() {
+    for p in fields.iter() {
         let (id, sp) = *p;
         let orig_sp = field_names.find(&id).map_consume(|x| *x);
         match orig_sp {
@@ -619,13 +604,13 @@ pub fn check_item(ccx: @mut CrateCtxt, it: @ast::item) {
         let rp = ccx.tcx.region_paramd_items.find(&it.id).map_consume(|x| *x);
         debug!("item_impl %s with id %d rp %?",
                ccx.tcx.sess.str_of(it.ident), it.id, rp);
-        foreach m in ms.iter() {
+        for m in ms.iter() {
             check_method(ccx, *m);
         }
         vtable::resolve_impl(ccx, it);
       }
       ast::item_trait(_, _, ref trait_methods) => {
-        foreach trait_method in (*trait_methods).iter() {
+        for trait_method in (*trait_methods).iter() {
             match *trait_method {
               required(*) => {
                 // Nothing to do, since required methods don't have
@@ -646,11 +631,11 @@ pub fn check_item(ccx: @mut CrateCtxt, it: @ast::item) {
       }
       ast::item_foreign_mod(ref m) => {
         if m.abis.is_intrinsic() {
-            foreach item in m.items.iter() {
+            for item in m.items.iter() {
                 check_intrinsic_type(ccx, *item);
             }
         } else {
-            foreach item in m.items.iter() {
+            for item in m.items.iter() {
                 let tpt = ty::lookup_item_type(ccx.tcx, local_def(item.id));
                 if tpt.generics.has_type_params() {
                     ccx.tcx.sess.span_err(
@@ -958,11 +943,6 @@ pub fn report_mismatched_return_types(&self,
             return;
         }
         match self.fn_kind {
-            ForLoop(_) if !ty::type_is_bool(e) && !ty::type_is_nil(a) =>
-                    self.tcx().sess.span_err(sp, fmt!("A for-loop body must \
-                        return (), but it returns %s here. \
-                        Perhaps you meant to write a `do`-block?",
-                                            ppaux::ty_to_str(self.tcx(), a))),
             DoBlock if ty::type_is_bool(e) && ty::type_is_nil(a) =>
                 // If we expected bool and got ()...
                     self.tcx().sess.span_err(sp, fmt!("Do-block body must \
@@ -1261,7 +1241,7 @@ fn check_argument_types(
         // of arguments when we typecheck the functions. This isn't really the
         // right way to do this.
         let xs = [false, true];
-        foreach check_blocks in xs.iter() {
+        for check_blocks in xs.iter() {
             let check_blocks = *check_blocks;
             debug!("check_blocks=%b", check_blocks);
 
@@ -1272,9 +1252,9 @@ fn check_argument_types(
                 vtable::early_resolve_expr(callee_expr, fcx, true);
             }
 
-            foreach (i, arg) in args.iter().enumerate() {
+            for (i, arg) in args.iter().enumerate() {
                 let is_block = match arg.node {
-                    ast::expr_fn_block(*) | ast::expr_loop_body(*) |
+                    ast::expr_fn_block(*) |
                     ast::expr_do_body(*) => true,
                     _ => false
                 };
@@ -1887,14 +1867,14 @@ fn check_struct_or_variant_fields(fcx: @mut FnCtxt,
 
         let mut class_field_map = HashMap::new();
         let mut fields_found = 0;
-        foreach field in field_types.iter() {
+        for field in field_types.iter() {
             class_field_map.insert(field.ident, (field.id, false));
         }
 
         let mut error_happened = false;
 
         // Typecheck each field.
-        foreach field in ast_fields.iter() {
+        for field in ast_fields.iter() {
             let mut expected_field_type = ty::mk_err();
 
             let pair = class_field_map.find(&field.ident).
@@ -1940,7 +1920,7 @@ fn check_struct_or_variant_fields(fcx: @mut FnCtxt,
             assert!(fields_found <= field_types.len());
             if fields_found < field_types.len() {
                 let mut missing_fields = ~[];
-                foreach class_field in field_types.iter() {
+                for class_field in field_types.iter() {
                     let name = class_field.ident;
                     let (_, seen) = *class_field_map.get(&name);
                     if !seen {
@@ -2126,121 +2106,6 @@ fn check_struct_enum_variant(fcx: @mut FnCtxt,
         fcx.write_ty(id, enum_type);
     }
 
-    fn check_loop_body(fcx: @mut FnCtxt,
-                       expr: @ast::expr,
-                       expected: Option<ty::t>,
-                       loop_body: @ast::expr) {
-        // a loop body is the special argument to a `for` loop.  We know that
-        // there will be an expected type in this context because it can only
-        // appear in the context of a call, so we get the expected type of the
-        // parameter. The catch here is that we need to validate two things:
-        // 1. a closure that returns a bool is expected
-        // 2. the closure that was given returns unit
-        let tcx = fcx.tcx();
-        let mut err_happened = false;
-        let expected_sty = unpack_expected(fcx,
-                                           expected,
-                                           |x| Some((*x).clone()));
-        let inner_ty = match expected_sty {
-            Some(ty::ty_closure(ref fty)) => {
-                match fcx.mk_subty(false, infer::Misc(expr.span),
-                                   fty.sig.output, ty::mk_bool()) {
-                    result::Ok(_) => {
-                        ty::mk_closure(tcx, ty::ClosureTy {
-                            sig: FnSig {
-                                output: ty::mk_nil(),
-                                ..fty.sig.clone()
-                            },
-                            ..(*fty).clone()
-                        })
-                    }
-                    result::Err(_) => {
-                        fcx.type_error_message(
-                            expr.span,
-                            |actual| {
-                                let did_you_mean = {
-                                    if ty::type_is_nil(fty.sig.output) {
-                                        "\nDid you mean to use \
-                                             `do` instead of `for`?"
-                                     } else {
-                                         ""
-                                     }
-                                };
-                                fmt!("A `for` loop iterator should expect a \
-                                      closure that returns `bool`. This \
-                                      iterator expects a closure that \
-                                      returns `%s`.%s",
-                                     actual, did_you_mean)
-                            },
-                            fty.sig.output,
-                            None);
-                        err_happened = true;
-                        fcx.write_error(expr.id);
-                        ty::mk_err()
-                    }
-                }
-            }
-            _ => {
-                match expected {
-                    Some(expected_t) => {
-                        fcx.type_error_message(
-                            expr.span,
-                            |actual| {
-                                fmt!("last argument in `for` call \
-                                      has non-closure type: %s",
-                                     actual)
-                            },
-                            expected_t, None);
-                        let err_ty = ty::mk_err();
-                        fcx.write_error(expr.id);
-                        err_happened = true;
-                        err_ty
-                    }
-                    None => fcx.tcx().sess.impossible_case(
-                        expr.span,
-                        "loop body must have an expected type")
-                }
-            }
-        };
-
-        match loop_body.node {
-            ast::expr_fn_block(ref decl, ref body) => {
-                // If an error occurred, we pretend this isn't a for
-                // loop, so as to assign types to all nodes while also
-                // propagating ty_err throughout so as to suppress
-                // derived errors. If we passed in ForLoop in the
-                // error case, we'd potentially emit a spurious error
-                // message because of the indirect_ret_ty.
-                let fn_kind = if err_happened {
-                    Vanilla
-                } else {
-                    let indirect_ret_ty =
-                        fcx.indirect_ret_ty.get_or_default(fcx.ret_ty);
-                    ForLoop(indirect_ret_ty)
-                };
-                check_expr_fn(fcx, loop_body, None,
-                              decl, body, fn_kind, Some(inner_ty));
-                demand::suptype(fcx, loop_body.span,
-                                inner_ty, fcx.expr_ty(loop_body));
-            }
-            ref n => {
-                fail!("check_loop_body expected expr_fn_block, not %?", n)
-            }
-        }
-
-        let block_ty = structurally_resolved_type(
-            fcx, expr.span, fcx.node_ty(loop_body.id));
-        if err_happened {
-            fcx.write_error(expr.id);
-            fcx.write_error(loop_body.id);
-        } else {
-            let loop_body_ty =
-                ty::replace_closure_return_type(
-                    tcx, block_ty, ty::mk_bool());
-            fcx.write_ty(expr.id, loop_body_ty);
-        }
-    }
-
     let tcx = fcx.ccx.tcx;
     let id = expr.id;
     match expr.node {
@@ -2262,7 +2127,7 @@ fn check_loop_body(fcx: @mut FnCtxt,
                 _ => mutability = mutbl
             }
             let t: ty::t = fcx.infcx().next_ty_var();
-            foreach e in args.iter() {
+            for e in args.iter() {
                 check_expr_has_type(fcx, *e, t);
                 let arg_t = fcx.expr_ty(*e);
                 if ty::type_is_error(arg_t) {
@@ -2482,10 +2347,10 @@ fn check_loop_body(fcx: @mut FnCtxt,
         fcx.write_ty(id, ty_param_bounds_and_ty.ty);
       }
       ast::expr_inline_asm(ref ia) => {
-          foreach &(_, input) in ia.inputs.iter() {
+          for &(_, input) in ia.inputs.iter() {
               check_expr(fcx, input);
           }
-          foreach &(_, out) in ia.outputs.iter() {
+          for &(_, out) in ia.outputs.iter() {
               check_expr(fcx, out);
           }
           fcx.write_nil(id);
@@ -2494,9 +2359,7 @@ fn check_loop_body(fcx: @mut FnCtxt,
       ast::expr_break(_) => { fcx.write_bot(id); }
       ast::expr_again(_) => { fcx.write_bot(id); }
       ast::expr_ret(expr_opt) => {
-        let ret_ty = match fcx.indirect_ret_ty {
-          Some(t) =>  t, None => fcx.ret_ty
-        };
+        let ret_ty = fcx.ret_ty;
         match expr_opt {
           None => match fcx.mk_eqty(false, infer::Misc(expr.span),
                                     ret_ty, ty::mk_nil()) {
@@ -2581,9 +2444,6 @@ fn check_loop_body(fcx: @mut FnCtxt,
         check_expr_fn(fcx, expr, None,
                       decl, body, Vanilla, expected);
       }
-      ast::expr_loop_body(loop_body) => {
-          check_loop_body(fcx, expr, expected, loop_body);
-      }
       ast::expr_do_body(b) => {
         let expected_sty = unpack_expected(fcx,
                                            expected,
@@ -2750,7 +2610,7 @@ fn types_compatible(fcx: @mut FnCtxt, sp: span,
       }
       ast::expr_vec(ref args, mutbl) => {
         let t: ty::t = fcx.infcx().next_ty_var();
-        foreach e in args.iter() {
+        for e in args.iter() {
             check_expr_has_type(fcx, *e, t);
         }
         let typ = ty::mk_evec(tcx, ty::mt {ty: t, mutbl: mutbl},
@@ -3008,7 +2868,7 @@ pub fn check_block_with_expected(fcx: @mut FnCtxt,
         let mut last_was_bot = false;
         let mut any_bot = false;
         let mut any_err = false;
-        foreach s in blk.stmts.iter() {
+        for s in blk.stmts.iter() {
             check_stmt(fcx, *s);
             let s_id = ast_util::stmt_id(*s);
             let s_ty = fcx.node_ty(s_id);
@@ -3147,7 +3007,7 @@ fn do_check(ccx: @mut CrateCtxt,
         let mut disr_vals: ~[uint] = ~[];
         let mut prev_disr_val: Option<uint> = None;
 
-        foreach v in vs.iter() {
+        for v in vs.iter() {
 
             // If the discriminant value is specified explicitly in the enum check whether the
             // initialization expression is valid, otherwise use the last value plus one.
@@ -3475,7 +3335,7 @@ pub fn check_bounds_are_used(ccx: @mut CrateCtxt,
             true
         });
 
-    foreach (i, b) in tps_used.iter().enumerate() {
+    for (i, b) in tps_used.iter().enumerate() {
         if !*b {
             ccx.tcx.sess.span_err(
                 span, fmt!("type parameter `%s` is unused",
index fdb2925d30b512ae19156bd1e35f73a0a8514930..18e7295d61a0528f1cf86fe6f4b543a5a19a55ae 100644 (file)
@@ -195,7 +195,7 @@ fn visit_block(b: &ast::Block, (rcx, v): (@mut Rcx, rvt)) {
 
 fn visit_arm(arm: &ast::arm, (rcx, v): (@mut Rcx, rvt)) {
     // see above
-    foreach &p in arm.pats.iter() {
+    for &p in arm.pats.iter() {
         constrain_bindings_in_pat(p, rcx);
     }
 
@@ -281,8 +281,8 @@ fn visit_expr(expr: @ast::expr, (rcx, v): (@mut Rcx, rvt)) {
         }
         ast::expr_match(_, ref arms) => {
             tcx.region_maps.record_cleanup_scope(expr.id);
-            foreach arm in arms.iter() {
-                foreach guard in arm.guard.iter() {
+            for arm in arms.iter() {
+                for guard in arm.guard.iter() {
                     tcx.region_maps.record_cleanup_scope(guard.id);
                 }
             }
@@ -300,7 +300,7 @@ fn visit_expr(expr: @ast::expr, (rcx, v): (@mut Rcx, rvt)) {
     // Check any autoderefs or autorefs that appear.
     {
         let r = rcx.fcx.inh.adjustments.find(&expr.id);
-        foreach &adjustment in r.iter() {
+        for &adjustment in r.iter() {
             debug!("adjustment=%?", adjustment);
             match *adjustment {
                 @ty::AutoDerefRef(
@@ -308,7 +308,7 @@ fn visit_expr(expr: @ast::expr, (rcx, v): (@mut Rcx, rvt)) {
                 {
                     let expr_ty = rcx.resolve_node_type(expr.id);
                     constrain_derefs(rcx, expr, autoderefs, expr_ty);
-                    foreach autoref in opt_autoref.iter() {
+                    for autoref in opt_autoref.iter() {
                         guarantor::for_autoref(rcx, expr, autoderefs, autoref);
 
                         // Require that the resulting region encompasses
@@ -426,10 +426,6 @@ fn visit_expr(expr: @ast::expr, (rcx, v): (@mut Rcx, rvt)) {
             oldvisit::visit_expr(expr, (rcx, v));
         }
 
-        ast::expr_loop_body(subexpr) => {
-            check_expr_fn_block(rcx, subexpr, v, true);
-        }
-
         ast::expr_fn_block(*) => {
             check_expr_fn_block(rcx, expr, v, false);
         }
@@ -556,7 +552,7 @@ fn constrain_call(rcx: @mut Rcx,
     let callee_scope = call_expr.id;
     let callee_region = ty::re_scope(callee_scope);
 
-    foreach &arg_expr in arg_exprs.iter() {
+    for &arg_expr in arg_exprs.iter() {
         // ensure that any regions appearing in the argument type are
         // valid for at least the lifetime of the function:
         constrain_regions_in_type_of_node(
@@ -573,7 +569,7 @@ fn constrain_call(rcx: @mut Rcx,
     }
 
     // as loop above, but for receiver
-    foreach &r in receiver.iter() {
+    for &r in receiver.iter() {
         constrain_regions_in_type_of_node(
             rcx, r.id, callee_region, infer::CallRcvr(r.span));
         if implicitly_ref_args {
@@ -601,7 +597,7 @@ fn constrain_derefs(rcx: @mut Rcx,
      */
     let tcx = rcx.fcx.tcx();
     let r_deref_expr = ty::re_scope(deref_expr.id);
-    foreach i in range(0u, derefs) {
+    for i in range(0u, derefs) {
         debug!("constrain_derefs(deref_expr=?, derefd_ty=%s, derefs=%?/%?",
                rcx.fcx.infcx().ty_to_str(derefd_ty),
                i, derefs);
@@ -669,7 +665,7 @@ fn constrain_free_variables(rcx: @mut Rcx,
     let tcx = rcx.fcx.ccx.tcx;
     debug!("constrain_free_variables(%s, %s)",
            region.repr(tcx), expr.repr(tcx));
-    foreach freevar in get_freevars(tcx, expr.id).iter() {
+    for freevar in get_freevars(tcx, expr.id).iter() {
         debug!("freevar def is %?", freevar.def);
         let def = freevar.def;
         let en_region = encl_region_of_def(rcx.fcx, def);
@@ -834,8 +830,8 @@ pub fn for_match(rcx: @mut Rcx, discr: @ast::expr, arms: &[ast::arm]) {
         debug!("regionck::for_match()");
         let discr_guarantor = guarantor(rcx, discr);
         debug!("discr_guarantor=%s", discr_guarantor.repr(rcx.tcx()));
-        foreach arm in arms.iter() {
-            foreach pat in arm.pats.iter() {
+        for arm in arms.iter() {
+            for pat in arm.pats.iter() {
                 link_ref_bindings_in_pat(rcx, *pat, discr_guarantor);
             }
         }
@@ -885,7 +881,7 @@ fn maybe_make_subregion(
             sub_region: ty::Region,
             sup_region: Option<ty::Region>)
         {
-            foreach r in sup_region.iter() {
+            for r in sup_region.iter() {
                 rcx.fcx.mk_subr(true, infer::Reborrow(expr.span),
                                 sub_region, *r);
             }
@@ -908,7 +904,7 @@ pub fn for_by_ref(rcx: @mut Rcx,
         debug!("guarantor::for_by_ref(expr=%?, callee_scope=%?) category=%?",
                expr.id, callee_scope, expr_cat);
         let minimum_lifetime = ty::re_scope(callee_scope);
-        foreach guarantor in expr_cat.guarantor.iter() {
+        for guarantor in expr_cat.guarantor.iter() {
             mk_subregion_due_to_derefence(rcx, expr.span,
                                           minimum_lifetime, *guarantor);
         }
@@ -1031,7 +1027,6 @@ fn guarantor(rcx: @mut Rcx, expr: @ast::expr) -> Option<ty::Region> {
             ast::expr_if(*) |
             ast::expr_match(*) |
             ast::expr_fn_block(*) |
-            ast::expr_loop_body(*) |
             ast::expr_do_body(*) |
             ast::expr_block(*) |
             ast::expr_repeat(*) |
@@ -1131,7 +1126,7 @@ fn apply_autoderefs(
             return ct;
         }
 
-        foreach _ in range(0u, autoderefs) {
+        for _ in range(0u, autoderefs) {
             ct.cat.guarantor = guarantor_of_deref(&ct.cat);
 
             match ty::deref(tcx, ct.ty, true) {
@@ -1214,12 +1209,12 @@ fn link_ref_bindings_in_pat(
             ast::pat_ident(ast::bind_by_ref(_), _, opt_p) => {
                 link(rcx, pat.span, pat.id, guarantor);
 
-                foreach p in opt_p.iter() {
+                for p in opt_p.iter() {
                     link_ref_bindings_in_pat(rcx, *p, guarantor);
                 }
             }
             ast::pat_ident(_, _, opt_p) => {
-                foreach p in opt_p.iter() {
+                for p in opt_p.iter() {
                     link_ref_bindings_in_pat(rcx, *p, guarantor);
                 }
             }
@@ -1228,7 +1223,7 @@ fn link_ref_bindings_in_pat(
                 link_ref_bindings_in_pats(rcx, pats, guarantor);
             }
             ast::pat_struct(_, ref fpats, _) => {
-                foreach fpat in fpats.iter() {
+                for fpat in fpats.iter() {
                     link_ref_bindings_in_pat(rcx, fpat.pat, guarantor);
                 }
             }
@@ -1258,7 +1253,7 @@ fn link_ref_bindings_in_pat(
                 };
 
                 link_ref_bindings_in_pats(rcx, before, guarantor1);
-                foreach &p in slice.iter() {
+                for &p in slice.iter() {
                     link_ref_bindings_in_pat(rcx, p, guarantor);
                 }
                 link_ref_bindings_in_pats(rcx, after, guarantor1);
@@ -1269,7 +1264,7 @@ fn link_ref_bindings_in_pat(
     fn link_ref_bindings_in_pats(rcx: @mut Rcx,
                                  pats: &~[@ast::pat],
                                  guarantor: Option<ty::Region>) {
-        foreach pat in pats.iter() {
+        for pat in pats.iter() {
             link_ref_bindings_in_pat(rcx, *pat, guarantor);
         }
     }
index cefe0045cb04eb7465c0ae30a8c0062126a062dd..2685055bd84aa6083376511dd2c9098f780ef84a 100644 (file)
@@ -32,11 +32,11 @@ pub fn replace_bound_regions_in_fn_sig(
 {
     let mut all_tys = ty::tys_in_fn_sig(fn_sig);
 
-    foreach &self_ty in opt_self_ty.iter() {
+    for &self_ty in opt_self_ty.iter() {
         all_tys.push(self_ty);
     }
 
-    foreach &t in opt_self_ty.iter() { all_tys.push(t) }
+    for &t in opt_self_ty.iter() { all_tys.push(t) }
 
     debug!("replace_bound_regions_in_fn_sig(self_ty=%?, fn_sig=%s, \
             all_tys=%?)",
@@ -199,7 +199,7 @@ pub fn relate_nested_regions(
      */
 
     let mut the_stack = ~[];
-    foreach &r in opt_region.iter() { the_stack.push(r); }
+    for &r in opt_region.iter() { the_stack.push(r); }
     walk_ty(tcx, &mut the_stack, ty, relate_op);
 
     fn walk_ty(tcx: ty::ctxt,
@@ -230,7 +230,7 @@ fn relate(the_stack: &[ty::Region],
               r_sub: ty::Region,
               relate_op: &fn(ty::Region, ty::Region))
     {
-        foreach &r in the_stack.iter() {
+        for &r in the_stack.iter() {
             if !r.is_bound() && !r_sub.is_bound() {
                 relate_op(r, r_sub);
             }
@@ -258,14 +258,14 @@ pub fn relate_free_regions(
     debug!("relate_free_regions >>");
 
     let mut all_tys = ~[];
-    foreach arg in fn_sig.inputs.iter() {
+    for arg in fn_sig.inputs.iter() {
         all_tys.push(*arg);
     }
-    foreach &t in self_ty.iter() {
+    for &t in self_ty.iter() {
         all_tys.push(t);
     }
 
-    foreach &t in all_tys.iter() {
+    for &t in all_tys.iter() {
         debug!("relate_free_regions(t=%s)", ppaux::ty_to_str(tcx, t));
         relate_nested_regions(tcx, None, t, |a, b| {
             match (&a, &b) {
index 0e50021c82c0bf5c06953c7d6fbc0f714bcd1139..abb97f0d1c7b9d7ed10c1a8cc4b532fa4dacad51 100644 (file)
@@ -327,7 +327,7 @@ fn search_for_vtable(vcx: &VtableContext,
     let impls = tcx.trait_impls.find(&trait_ref.def_id)
         .map_default(@mut ~[], |x| **x);
     // impls is the list of all impls in scope for trait_ref.
-    foreach im in impls.iter() {
+    for im in impls.iter() {
         // im is one specific impl of trait_ref.
 
         // First, ensure we haven't processed this impl yet.
index b30eb67916d3577cfa87549ad22fad816df5a91c..e62f562d9b3c7553644ff5cfbd4a6f8504f209b6 100644 (file)
@@ -66,7 +66,7 @@ fn resolve_method_map_entry(fcx: @mut FnCtxt, sp: span, id: ast::NodeId) {
         Some(mme) => {
             {
                 let r = resolve_type_vars_in_type(fcx, sp, mme.self_ty);
-                foreach t in r.iter() {
+                for t in r.iter() {
                     let method_map = fcx.ccx.method_map;
                     let new_entry = method_map_entry { self_ty: *t, ..*mme };
                     debug!("writeback::resolve_method_map_entry(id=%?, \
@@ -181,7 +181,7 @@ fn resolve_type_vars_for_node(wbcx: @mut WbCtxt, sp: span, id: ast::NodeId)
         let mut ret = Some(t);
         do fcx.opt_node_ty_substs(id) |substs| {
           let mut new_tps = ~[];
-          foreach subst in substs.tps.iter() {
+          for subst in substs.tps.iter() {
               match resolve_type_vars_in_type(fcx, sp, *subst) {
                 Some(t) => new_tps.push(t),
                 None => { wbcx.success = false; ret = None; break }
@@ -232,7 +232,7 @@ fn visit_expr(e: @ast::expr, (wbcx, v): (@mut WbCtxt, wb_vt)) {
     resolve_method_map_entry(wbcx.fcx, e.span, e.id);
     {
         let r = e.get_callee_id();
-        foreach callee_id in r.iter() {
+        for callee_id in r.iter() {
             resolve_method_map_entry(wbcx.fcx, e.span, *callee_id);
         }
     }
@@ -240,14 +240,14 @@ fn visit_expr(e: @ast::expr, (wbcx, v): (@mut WbCtxt, wb_vt)) {
     resolve_vtable_map_entry(wbcx.fcx, e.span, e.id);
     {
         let r = e.get_callee_id();
-        foreach callee_id in r.iter() {
+        for callee_id in r.iter() {
             resolve_vtable_map_entry(wbcx.fcx, e.span, *callee_id);
         }
     }
 
     match e.node {
         ast::expr_fn_block(ref decl, _) => {
-            foreach input in decl.inputs.iter() {
+            for input in decl.inputs.iter() {
                 let _ = resolve_type_vars_for_node(wbcx, e.span, input.id);
             }
         }
@@ -343,12 +343,12 @@ pub fn resolve_type_vars_in_fn(fcx: @mut FnCtxt,
     let wbcx = @mut WbCtxt { fcx: fcx, success: true };
     let visit = mk_visitor();
     (visit.visit_block)(blk, (wbcx, visit));
-    foreach self_info in self_info.iter() {
+    for self_info in self_info.iter() {
         resolve_type_vars_for_node(wbcx,
                                    self_info.span,
                                    self_info.self_id);
     }
-    foreach arg in decl.inputs.iter() {
+    for arg in decl.inputs.iter() {
         (visit.visit_pat)(arg.pat, (wbcx, visit));
         // Privacy needs the type for the whole pattern, not just each binding
         if !pat_util::pat_is_binding(fcx.tcx().def_map, arg.pat) {
index faabf9a9b40b4a7d56dd4f62ab65c796228b58a1..bc8de29b78bcd54d30c4bdd4511ebbfb2bde8d6b 100644 (file)
@@ -242,7 +242,7 @@ pub fn check_implementation(&self,
 
         let implementation = self.create_impl_from_item(item);
 
-        foreach associated_trait in associated_traits.iter() {
+        for associated_trait in associated_traits.iter() {
             let trait_ref = ty::node_id_to_trait_ref(
                 self.crate_context.tcx, associated_trait.ref_id);
             debug!("(checking implementation) adding impl for trait '%s', item '%s'",
@@ -289,7 +289,7 @@ pub fn instantiate_default_methods(&self,
         let impl_poly_type = ty::lookup_item_type(tcx, impl_id);
 
         let provided = ty::provided_trait_methods(tcx, trait_ref.def_id);
-        foreach trait_method in provided.iter() {
+        for trait_method in provided.iter() {
             // Synthesize an ID.
             let new_id = parse::next_node_id(tcx.sess.parse_sess);
             let new_did = local_def(new_id);
@@ -412,7 +412,7 @@ pub fn check_implementation_coherence_of(&self, trait_def_id: def_id) {
     pub fn iter_impls_of_trait(&self, trait_def_id: def_id, f: &fn(@Impl)) {
         match self.crate_context.tcx.trait_impls.find(&trait_def_id) {
             Some(impls) => {
-                foreach &im in impls.iter() {
+                for &im in impls.iter() {
                     f(im);
                 }
             }
@@ -554,12 +554,12 @@ pub fn check_trait_methods_are_implemented(
 
         let mut provided_names = HashSet::new();
         // Implemented methods
-        foreach i in range(0u, all_methods.len()) {
+        for i in range(0u, all_methods.len()) {
             provided_names.insert(all_methods[i].ident);
         }
 
         let r = ty::trait_methods(tcx, trait_did);
-        foreach method in r.iter() {
+        for method in r.iter() {
             debug!("checking for %s", method.ident.repr(tcx));
             if provided_names.contains(&method.ident) { loop; }
 
@@ -615,11 +615,11 @@ pub fn create_impl_from_item(&self, item: @item) -> @Impl {
         match item.node {
             item_impl(_, ref trait_refs, _, ref ast_methods) => {
                 let mut methods = ~[];
-                foreach ast_method in ast_methods.iter() {
+                for ast_method in ast_methods.iter() {
                     methods.push(ty::method(tcx, local_def(ast_method.id)));
                 }
 
-                foreach trait_ref in trait_refs.iter() {
+                for trait_ref in trait_refs.iter() {
                     let ty_trait_ref = ty::node_id_to_trait_ref(
                         self.crate_context.tcx,
                         trait_ref.ref_id);
@@ -701,14 +701,14 @@ pub fn add_external_impl(&self,
         }
 
         // Record all the trait methods.
-        foreach trait_ref in associated_traits.iter() {
+        for trait_ref in associated_traits.iter() {
               self.add_trait_impl(trait_ref.def_id, implementation);
         }
 
         // For any methods that use a default implementation, add them to
         // the map. This is a bit unfortunate.
-        foreach method in implementation.methods.iter() {
-            foreach source in method.provided_source.iter() {
+        for method in implementation.methods.iter() {
+            for source in method.provided_source.iter() {
                 tcx.provided_method_sources.insert(method.def_id, *source);
             }
         }
@@ -771,7 +771,7 @@ pub fn populate_destructor_table(&self) {
             Some(found_impls) => impls = found_impls
         }
 
-        foreach impl_info in impls.iter() {
+        for impl_info in impls.iter() {
             if impl_info.methods.len() < 1 {
                 // We'll error out later. For now, just don't ICE.
                 loop;
index e03983636a07e828643dde3f9c277bef3d058db6..2bef2c08bb22d983e3fa5ea398f981b44bfed85a 100644 (file)
@@ -143,7 +143,7 @@ pub fn get_enum_variant_types(ccx: &CrateCtxt,
     let tcx = ccx.tcx;
 
     // Create a set of parameter types shared among all the variants.
-    foreach variant in variants.iter() {
+    for variant in variants.iter() {
         let region_parameterization =
             RegionParameterization::from_variance_and_generics(rp, generics);
 
@@ -208,7 +208,7 @@ pub fn ensure_trait_methods(ccx: &CrateCtxt,
 
             // For each method, construct a suitable ty::Method and
             // store it into the `tcx.methods` table:
-            foreach m in ms.iter() {
+            for m in ms.iter() {
                 let ty_method = @match m {
                     &ast::required(ref m) => {
                         ty_method_of_trait_method(
@@ -395,7 +395,7 @@ pub fn ensure_supertraits(ccx: &CrateCtxt,
 
     let self_ty = ty::mk_self(ccx.tcx, local_def(id));
     let mut ty_trait_refs: ~[@ty::TraitRef] = ~[];
-    foreach ast_trait_ref in ast_trait_refs.iter() {
+    for ast_trait_ref in ast_trait_refs.iter() {
         let trait_ref = instantiate_trait_ref(ccx, ast_trait_ref, rp,
                                               generics, self_ty);
 
@@ -494,7 +494,7 @@ pub fn compare_impl_method(tcx: ty::ctxt,
         return;
     }
 
-    foreach (i, trait_param_def) in trait_m.generics.type_param_defs.iter().enumerate() {
+    for (i, trait_param_def) in trait_m.generics.type_param_defs.iter().enumerate() {
         // For each of the corresponding impl ty param's bounds...
         let impl_param_def = &impl_m.generics.type_param_defs[i];
 
@@ -558,10 +558,10 @@ pub fn compare_impl_method(tcx: ty::ctxt,
     // For both the trait and the impl, create an argument to
     // represent the self argument (unless this is a static method).
     // This argument will have the *transformed* self type.
-    foreach &t in trait_m.transformed_self_ty.iter() {
+    for &t in trait_m.transformed_self_ty.iter() {
         trait_fn_args.push(t);
     }
-    foreach &t in impl_m.transformed_self_ty.iter() {
+    for &t in impl_m.transformed_self_ty.iter() {
         impl_fn_args.push(t);
     }
 
@@ -674,7 +674,7 @@ pub fn check_methods_against_trait(ccx: &CrateCtxt,
     // Trait methods we don't implement must be default methods, but if not
     // we'll catch it in coherence
     let trait_ms = ty::trait_methods(tcx, trait_ref.def_id);
-    foreach impl_m in impl_ms.iter() {
+    for impl_m in impl_ms.iter() {
         match trait_ms.iter().find_(|trait_m| trait_m.ident == impl_m.mty.ident) {
             Some(trait_m) => {
                 let num_impl_tps = generics.ty_params.len();
@@ -805,7 +805,7 @@ pub fn ensure_no_ty_param_bounds(ccx: &CrateCtxt,
                                  span: span,
                                  generics: &ast::Generics,
                                  thing: &'static str) {
-    foreach ty_param in generics.ty_params.iter() {
+    for ty_param in generics.ty_params.iter() {
         if ty_param.bounds.len() > 0 {
             ccx.tcx.sess.span_err(
                 span,
@@ -858,7 +858,7 @@ pub fn convert(ccx: &CrateCtxt, it: &ast::item) {
         let cms = convert_methods(ccx, it.id, *ms, selfty,
                                   &i_ty_generics, generics,
                                   parent_visibility);
-        foreach t in opt_trait_ref.iter() {
+        for t in opt_trait_ref.iter() {
             check_methods_against_trait(ccx, generics, rp, selfty, t, cms);
         }
       }
@@ -912,7 +912,7 @@ pub fn convert_struct(ccx: &CrateCtxt,
     let tcx = ccx.tcx;
 
     // Write the type of each of the members
-    foreach f in struct_def.fields.iter() {
+    for f in struct_def.fields.iter() {
        convert_field(ccx, rp, tpt.generics.type_param_defs, *f, generics);
     }
     let (_, substs) = mk_item_substs(ccx, generics, rp, None);
@@ -1203,7 +1203,7 @@ fn compute_bounds(
             builtin_bounds: ty::EmptyBuiltinBounds(),
             trait_bounds: ~[]
         };
-        foreach ast_bound in ast_bounds.iter() {
+        for ast_bound in ast_bounds.iter() {
             match *ast_bound {
                 TraitTyParamBound(ref b) => {
                     let ty = ty::mk_param(ccx.tcx, param_ty.idx, param_ty.def_id);
index a59db0bfd9e21b28d15ae7b590ddb7ccffd5a64b..1b325dd8a4b99fec36cab5e3bfd65cd0a2aaac72 100644 (file)
@@ -114,7 +114,7 @@ fn report_sup_sup_conflict(@mut self,
 impl ErrorReporting for InferCtxt {
     pub fn report_region_errors(@mut self,
                                 errors: &OptVec<RegionResolutionError>) {
-        foreach error in errors.iter() {
+        for error in errors.iter() {
             match *error {
                 ConcreteFailure(origin, sub, sup) => {
                     self.report_concrete_failure(origin, sub, sup);
index 9a4a8ca11dcd120d1eabe0195351f11331c4aa03..b9a62acd0bd879f21d7344b620b6262da850c7bf 100644 (file)
@@ -219,7 +219,7 @@ fn generalize_region(this: &Glb,
             let mut a_r = None;
             let mut b_r = None;
             let mut only_new_vars = true;
-            foreach r in tainted.iter() {
+            for r in tainted.iter() {
                 if is_var_in_set(a_vars, *r) {
                     if a_r.is_some() {
                         return fresh_bound_variable(this);
index e487ca03c862164548c2ee4c4f442fc29d790bd2..854ee835cc7dce534006f1787ea4eb07d52ce212 100644 (file)
@@ -730,7 +730,7 @@ pub fn type_error_message_str_with_expected(@mut self,
                         fmt!("%s%s", mk_msg(Some(self.ty_to_str(e)), actual_ty), error_str));
                 }
             }
-            foreach err in err.iter() {
+            for err in err.iter() {
                 ty::note_and_explain_type_err(self.tcx, *err)
             }
         }
index 07fd66640b5cb790b196967e5e3238b86df6dc1c..63503f3e6b6c6c94d0039003747647204fc360c7 100644 (file)
@@ -374,7 +374,7 @@ pub fn combine_vars(&mut self,
     pub fn vars_created_since_snapshot(&mut self, snapshot: uint)
                                        -> ~[RegionVid] {
         do vec::build |push| {
-            foreach i in range(snapshot, self.undo_log.len()) {
+            for i in range(snapshot, self.undo_log.len()) {
                 match self.undo_log[i] {
                     AddVar(vid) => push(vid),
                     _ => ()
@@ -916,7 +916,7 @@ fn collect_concrete_region_errors(
         &self,
         errors: &mut OptVec<RegionResolutionError>)
     {
-        foreach (constraint, _) in self.constraints.iter() {
+        for (constraint, _) in self.constraints.iter() {
             let (sub, sup) = match *constraint {
                 ConstrainVarSubVar(*) |
                 ConstrainRegSubVar(*) |
@@ -962,7 +962,7 @@ fn extract_values_and_collect_conflicts(
 
         let mut opt_graph = None;
 
-        foreach idx in range(0u, self.num_vars()) {
+        for idx in range(0u, self.num_vars()) {
             match var_data[idx].value {
                 Value(_) => {
                     /* Inference successful */
@@ -1027,12 +1027,12 @@ fn construct_graph(&self) -> RegionGraph {
         let mut graph = graph::Graph::with_capacity(num_vars + 1,
                                                     num_edges);
 
-        foreach _ in range(0u, num_vars) {
+        for _ in range(0u, num_vars) {
             graph.add_node(());
         }
         let dummy_idx = graph.add_node(());
 
-        foreach (constraint, _) in self.constraints.iter() {
+        for (constraint, _) in self.constraints.iter() {
             match *constraint {
                 ConstrainVarSubVar(a_id, b_id) => {
                     graph.add_edge(NodeIndex(a_id.to_uint()),
@@ -1080,8 +1080,8 @@ fn collect_error_for_expanding_node(
             return;
         }
 
-        foreach lower_bound in lower_bounds.iter() {
-            foreach upper_bound in upper_bounds.iter() {
+        for lower_bound in lower_bounds.iter() {
+            for upper_bound in upper_bounds.iter() {
                 if !self.is_subregion_of(lower_bound.region,
                                          upper_bound.region) {
                     errors.push(SubSupConflict(
@@ -1122,8 +1122,8 @@ fn collect_error_for_contracting_node(
             return;
         }
 
-        foreach upper_bound_1 in upper_bounds.iter() {
-            foreach upper_bound_2 in upper_bounds.iter() {
+        for upper_bound_1 in upper_bounds.iter() {
+            for upper_bound_2 in upper_bounds.iter() {
                 match self.glb_concrete_regions(upper_bound_1.region,
                                                 upper_bound_2.region) {
                   Ok(_) => {}
@@ -1243,7 +1243,7 @@ fn iterate_until_fixed_point(&self,
             changed = false;
             iteration += 1;
             debug!("---- %s Iteration #%u", tag, iteration);
-            foreach (constraint, _) in self.constraints.iter() {
+            for (constraint, _) in self.constraints.iter() {
                 let edge_changed = body(constraint);
                 if edge_changed {
                     debug!("Updated due to constraint %s",
index 975dbfb07e0c2c4f0c8033576c85c86596543670..441e71d4722b8fdfb26715dc72d0fd7b0a4ed5d5 100644 (file)
@@ -196,7 +196,7 @@ fn fn_sigs(&self, a: &ty::FnSig, b: &ty::FnSig) -> cres<ty::FnSig> {
         do list::each(skol_isr) |pair| {
             let (skol_br, skol) = *pair;
             let tainted = self.infcx.region_vars.tainted(snapshot, skol);
-            foreach tainted_region in tainted.iter() {
+            for tainted_region in tainted.iter() {
                 // Each skolemized should only be relatable to itself
                 // or new variables:
                 match *tainted_region {
index b8477149430fab8cfc52844f093684bfa0c5a4d8..3aeea2bcc3b969cf12b32bcd69c3ce7ab8ebb889 100644 (file)
@@ -79,7 +79,7 @@ fn setup_env(test_name: &str, source_string: &str) -> Env {
 
 impl Env {
     pub fn create_region_hierarchy(&self, rh: &RH) {
-        foreach child_rh in rh.sub.iter() {
+        for child_rh in rh.sub.iter() {
             self.create_region_hierarchy(child_rh);
             self.tcx.region_map.insert(child_rh.id, rh.id);
         }
@@ -109,7 +109,7 @@ fn search_mod(self: &Env,
                       idx: uint,
                       names: &[~str]) -> Option<ast::node_id> {
             assert!(idx < names.len());
-            foreach item in m.items.iter() {
+            for item in m.items.iter() {
                 if self.tcx.sess.str_of(item.ident) == names[idx] {
                     return search(self, *item, idx+1, names);
                 }
@@ -227,7 +227,7 @@ pub fn resolve_regions(exp_count: uint) {
 
         self.infcx.resolve_regions();
         if self.err_messages.len() != exp_count {
-            foreach msg in self.err_messages.iter() {
+            for msg in self.err_messages.iter() {
                 debug!("Error encountered: %s", *msg);
             }
             fmt!("Resolving regions encountered %u errors but expected %u!",
index 16740d3ce4e5ac0ef91788f8ef240d5fb2f99f3c..e2b25a67c3ddeb3d24d75df9570205d1534f8ec2 100644 (file)
@@ -58,7 +58,7 @@ fn has_self(&self) -> bool {
     }
 
     fn has_ident(&self, ident: ast::ident) -> bool {
-        foreach region_param_name in self.iter() {
+        for region_param_name in self.iter() {
             if *region_param_name == ident {
                 return true;
             }
@@ -76,7 +76,7 @@ pub fn add_generics(&mut self, generics: &ast::Generics) {
                             opt_vec::Vec(new_lifetimes.map(|lt| lt.ident)));
                     }
                     opt_vec::Vec(ref mut existing_lifetimes) => {
-                        foreach new_lifetime in new_lifetimes.iter() {
+                        for new_lifetime in new_lifetimes.iter() {
                             existing_lifetimes.push(new_lifetime.ident);
                         }
                     }
index a9531f33b5e5d9a11eed0c838fb6ecb394730829..c48b30e81416439ad86c9e9217e8bfb10f43ee5a 100644 (file)
@@ -152,7 +152,7 @@ pub fn describe_warnings() {
     lint_dict.qsort();
 
     let mut max_key = 0;
-    foreach &(_, name) in lint_dict.iter() {
+    for &(_, name) in lint_dict.iter() {
         max_key = num::max(name.len(), max_key);
     }
     fn padded(max: uint, s: &str) -> ~str {
@@ -163,7 +163,7 @@ fn padded(max: uint, s: &str) -> ~str {
               padded(max_key, "name"), "default", "meaning");
     printfln!("    %s  %7.7s  %s\n",
               padded(max_key, "----"), "-------", "-------");
-    foreach (spec, name) in lint_dict.consume_iter() {
+    for (spec, name) in lint_dict.consume_iter() {
         let name = name.replace("_", "-");
         printfln!("    %s  %7.7s  %s",
                   padded(max_key, name),
@@ -176,7 +176,7 @@ fn padded(max: uint, s: &str) -> ~str {
 pub fn describe_debug_flags() {
     printfln!("\nAvailable debug options:\n");
     let r = session::debugging_opts_map();
-    foreach tuple in r.iter() {
+    for tuple in r.iter() {
         match *tuple {
             (ref name, ref desc, _) => {
                 printfln!("    -Z %-20s -- %s", *name, *desc);
@@ -350,7 +350,7 @@ impl Drop for finally {
                      to get further details and report the results \
                      to github.com/mozilla/rust/issues"
                 ];
-                foreach note in xs.iter() {
+                for note in xs.iter() {
                     diagnostic::emit(None, *note, diagnostic::note)
                 }
             }
index 7ed2d00e7c4646fa7b167ab2683365ad19e0f3d0..26c22eed08c812ae87407d2df0124738a7bd902a 100644 (file)
@@ -70,8 +70,7 @@ pub fn loop_query(b: &ast::Block, p: @fn(&ast::expr_) -> bool) -> bool {
         match e.node {
           // Skip inner loops, since a break in the inner loop isn't a
           // break inside the outer loop
-          ast::expr_loop(*) | ast::expr_while(*)
-          | ast::expr_loop_body(*) => {}
+          ast::expr_loop(*) | ast::expr_while(*) => {}
           _ => oldvisit::visit_expr(e, (flag, v))
         }
     };
index beb762c74892bc2136f3ff51d138a7176c6b5fe8..8f0dd51457074c23bdd2e2a7cb219e4f8cd40301 100644 (file)
@@ -398,7 +398,7 @@ fn field_to_str(cx: ctxt, f: field) -> ~str {
     }
 
     // if there is an id, print that instead of the structural type:
-    /*foreach def_id in ty::type_def_id(typ).iter() {
+    /*for def_id in ty::type_def_id(typ).iter() {
         // note that this typedef cannot have type parameters
         return ast_map::path_to_str(ty::item_path(cx, *def_id),
                                     cx.sess.intr());
@@ -484,13 +484,13 @@ pub fn parameterized(cx: ctxt,
     match *regions {
         ty::ErasedRegions => { }
         ty::NonerasedRegions(ref regions) => {
-            foreach &r in regions.iter() {
+            for &r in regions.iter() {
                 strs.push(region_to_str(cx, "", false, r))
             }
         }
     }
 
-    foreach t in tps.iter() {
+    for t in tps.iter() {
         strs.push(ty_to_str(cx, *t))
     }
 
@@ -598,7 +598,7 @@ fn repr(&self, tcx: ctxt) -> ~str {
             });
             true
         };
-        foreach t in self.trait_bounds.iter() {
+        for t in self.trait_bounds.iter() {
             res.push(t.repr(tcx));
         }
         res.connect("+")
@@ -848,7 +848,7 @@ fn user_string(&self, tcx: ctxt) -> ~str {
         let base = ast_map::path_to_str(path, tcx.sess.intr());
         if tcx.sess.verbose() && self.substs.self_ty.is_some() {
             let mut all_tps = self.substs.tps.clone();
-            foreach &t in self.substs.self_ty.iter() { all_tps.push(t); }
+            for &t in self.substs.self_ty.iter() { all_tps.push(t); }
             parameterized(tcx, base, &self.substs.regions, all_tps)
         } else {
             parameterized(tcx, base, &self.substs.regions, self.substs.tps)
index 3cc243d6917886f6543a7892aa27be8d0602e5ab..f287e17880bb333419cb4b69dd2c2f69e77e2fd9 100644 (file)
@@ -73,7 +73,7 @@ pub fn usage() {
     println("Usage: rustdoc [options] <cratefile>\n");
     println("Options:\n");
     let r = opts();
-    foreach opt in r.iter() {
+    for opt in r.iter() {
         printfln!("    %s", opt.second());
     }
     println("");
index 3e608fc6ef89eda08219993cff234069a04b7463..f849cfade9bdafe89ac7553793abb528c14b9027 100644 (file)
@@ -142,7 +142,7 @@ fn nmoddoc_from_mod(
     module_: ast::foreign_mod
 ) -> doc::NmodDoc {
     let mut fns = ~[];
-    foreach item in module_.items.iter() {
+    for item in module_.items.iter() {
         let ItemDoc = mk_itemdoc(item.id, to_str(item.ident));
         match item.node {
           ast::foreign_item_fn(*) => {
index 67fc60c4912c76baa68511abfca9b418bae34b3f..0dbd29df48b631814a328d0e71164f6e10f26a86 100644 (file)
@@ -189,7 +189,7 @@ pub fn header_name(doc: doc::ItemTag) -> ~str {
             };
             let self_ty = doc.self_ty.get_ref();
             let mut trait_part = ~"";
-            foreach (i, trait_type) in doc.trait_types.iter().enumerate() {
+            for (i, trait_type) in doc.trait_types.iter().enumerate() {
                 if i == 0 {
                     trait_part.push_str(" of ");
                 } else {
@@ -279,7 +279,7 @@ fn write_desc(
 }
 
 fn write_sections(ctxt: &Ctxt, sections: &[doc::Section]) {
-    foreach section in sections.iter() {
+    for section in sections.iter() {
         write_section(ctxt, (*section).clone());
     }
 }
@@ -299,7 +299,7 @@ fn write_mod_contents(
         write_index(ctxt, doc.index.get_ref());
     }
 
-    foreach itemTag in doc.items.iter() {
+    for itemTag in doc.items.iter() {
         write_item(ctxt, (*itemTag).clone());
     }
 }
@@ -349,7 +349,7 @@ fn write_index(ctxt: &Ctxt, index: &doc::Index) {
     ctxt.w.put_line(~"<div class='index'>");
     ctxt.w.put_line(~"");
 
-    foreach entry in index.entries.iter() {
+    for entry in index.entries.iter() {
         let header = header_text_(entry.kind, entry.name);
         let id = entry.link.clone();
         if entry.brief.is_some() {
@@ -370,7 +370,7 @@ fn write_nmod(ctxt: &Ctxt, doc: doc::NmodDoc) {
         write_index(ctxt, doc.index.get_ref());
     }
 
-    foreach FnDoc in doc.fns.iter() {
+    for FnDoc in doc.fns.iter() {
         write_item_header(ctxt, doc::FnTag((*FnDoc).clone()));
         write_fn(ctxt, (*FnDoc).clone());
     }
@@ -435,7 +435,7 @@ fn write_variants(
 
     write_header_(ctxt, H4, ~"Variants");
 
-    foreach variant in docs.iter() {
+    for variant in docs.iter() {
         write_variant(ctxt, (*variant).clone());
     }
 
@@ -474,7 +474,7 @@ fn write_trait(ctxt: &Ctxt, doc: doc::TraitDoc) {
 }
 
 fn write_methods(ctxt: &Ctxt, docs: &[doc::MethodDoc]) {
-    foreach doc in docs.iter() {
+    for doc in docs.iter() {
         write_method(ctxt, (*doc).clone());
     }
 }
index da73027a4abc01620d93a27cf450ae3971671dc3..4cd442bb95147db53f6951fa2e74f8fe45ae9b39 100644 (file)
@@ -106,7 +106,7 @@ fn sectionalize(desc: Option<~str>) -> (Option<~str>, ~[doc::Section]) {
     let mut current_section: Option<doc::Section> = None;
     let mut sections = ~[];
 
-    foreach line in desc.get_ref().any_line_iter() {
+    for line in desc.get_ref().any_line_iter() {
         match parse_header(line) {
           Some(header) => {
             if current_section.is_some() {
index 316dd09ef0aa8f8fd2f93b35dce88a2242301fa9..d8a640bc19cf9f5bb82fea42cf4b019d0e52f199 100644 (file)
@@ -98,7 +98,7 @@ fn assert_encodable<T: Encodable<::extra::ebml::writer::Encoder>>(t: &T) {}
 
         code.push_str("fn main() {\n");
         // It's easy to initialize things if we don't run things...
-        foreach (name, var) in self.local_vars.iter() {
+        for (name, var) in self.local_vars.iter() {
             let mt = var.mt();
             code.push_str(fmt!("let%s %s: %s = fail!();\n", mt, *name, var.ty));
             var.alter(*name, &mut code);
@@ -114,7 +114,7 @@ fn assert_encodable<T: Encodable<::extra::ebml::writer::Encoder>>(t: &T) {}
             None => {}
         }
 
-        foreach p in new_locals.iter() {
+        for p in new_locals.iter() {
             code.push_str(fmt!("assert_encodable(&%s);\n", *p.first_ref()));
         }
         code.push_str("};}");
@@ -146,7 +146,7 @@ fn main() {
 
         // Using this __tls_map handle, deserialize each variable binding that
         // we know about
-        foreach (name, var) in self.local_vars.iter() {
+        for (name, var) in self.local_vars.iter() {
             let mt = var.mt();
             code.push_str(fmt!("let%s %s: %s = {
                 let data = __tls_map.get_copy(&~\"%s\");
@@ -167,13 +167,13 @@ fn main() {
         }
 
         let newvars = util::replace(&mut self.newvars, HashMap::new());
-        foreach (name, var) in newvars.consume() {
+        for (name, var) in newvars.consume() {
             self.local_vars.insert(name, var);
         }
 
         // After the input code is run, we can re-serialize everything back out
         // into tls map (to be read later on by this task)
-        foreach (name, var) in self.local_vars.iter() {
+        for (name, var) in self.local_vars.iter() {
             code.push_str(fmt!("{
                 let local: %s = %s;
                 let bytes = do ::std::io::with_bytes_writer |io| {
@@ -202,13 +202,13 @@ fn program_header(&self) -> ~str {
             use extra::serialize::*;
             %s // view items
         ", self.externs, self.view_items);
-        foreach (_, s) in self.structs.iter() {
+        for (_, s) in self.structs.iter() {
             // The structs aren't really useful unless they're encodable
             code.push_str("#[deriving(Encodable, Decodable)]");
             code.push_str(*s);
             code.push_str("\n");
         }
-        foreach (_, s) in self.items.iter() {
+        for (_, s) in self.items.iter() {
             code.push_str(*s);
             code.push_str("\n");
         }
@@ -221,7 +221,7 @@ fn program_header(&self) -> ~str {
     /// program starts
     pub fn set_cache(&self) {
         let map = @mut HashMap::new();
-        foreach (name, value) in self.local_vars.iter() {
+        for (name, value) in self.local_vars.iter() {
             map.insert((*name).clone(), @(value.data).clone());
         }
         local_data::set(tls_key, map);
@@ -233,7 +233,7 @@ pub fn set_cache(&self) {
     pub fn consume_cache(&mut self) {
         let map = local_data::pop(tls_key).expect("tls is empty");
         let cons_map = util::replace(map, HashMap::new());
-        foreach (name, value) in cons_map.consume() {
+        for (name, value) in cons_map.consume() {
             match self.local_vars.find_mut(&name) {
                 Some(v) => { v.data = (*value).clone(); }
                 None => { fail!("unknown variable %s", name) }
@@ -345,14 +345,14 @@ pub fn register_new_vars(&mut self, blk: &ast::Block, tcx: ty::ctxt) {
 
         // I'm not an @ pointer, so this has to be done outside.
         let cons_newvars = util::replace(newvars, HashMap::new());
-        foreach (k, v) in cons_newvars.consume() {
+        for (k, v) in cons_newvars.consume() {
             self.newvars.insert(k, v);
         }
 
         // helper functions to perform ast iteration
         fn each_user_local(blk: &ast::Block, f: &fn(@ast::Local)) {
             do find_user_block(blk) |blk| {
-                foreach stmt in blk.stmts.iter() {
+                for stmt in blk.stmts.iter() {
                     match stmt.node {
                         ast::stmt_decl(d, _) => {
                             match d.node {
@@ -367,7 +367,7 @@ fn each_user_local(blk: &ast::Block, f: &fn(@ast::Local)) {
         }
 
         fn find_user_block(blk: &ast::Block, f: &fn(&ast::Block)) {
-            foreach stmt in blk.stmts.iter() {
+            for stmt in blk.stmts.iter() {
                 match stmt.node {
                     ast::stmt_semi(e, _) => {
                         match e.node {
index 58732a7a96a818990b609f075ac5d09878497d26..568a691290c88d34fbff024759c3b872af705abc 100644 (file)
@@ -149,7 +149,7 @@ fn run(mut program: ~Program, binary: ~str, lib_search_paths: ~[~str],
     do find_main(crate, sess) |blk| {
         // Fish out all the view items, be sure to record 'extern mod' items
         // differently beause they must appear before all 'use' statements
-        foreach vi in blk.view_items.iter() {
+        for vi in blk.view_items.iter() {
             let s = do with_pp(intr) |pp, _| {
                 pprust::print_view_item(pp, vi);
             };
@@ -163,7 +163,7 @@ fn run(mut program: ~Program, binary: ~str, lib_search_paths: ~[~str],
 
         // Iterate through all of the block's statements, inserting them into
         // the correct portions of the program
-        foreach stmt in blk.stmts.iter() {
+        for stmt in blk.stmts.iter() {
             let s = do with_pp(intr) |pp, _| { pprust::print_stmt(pp, *stmt); };
             match stmt.node {
                 ast::stmt_decl(d, _) => {
@@ -276,7 +276,7 @@ fn parse_input(sess: session::Session, binary: @str,
 
     fn find_main(crate: @ast::Crate, sess: session::Session,
                  f: &fn(&ast::Block)) {
-        foreach item in crate.module.items.iter() {
+        for item in crate.module.items.iter() {
             match item.node {
                 ast::item_fn(_, _, _, _, ref blk) => {
                     if item.ident == sess.ident_of("main") {
@@ -396,7 +396,7 @@ fn run_cmd(repl: &mut Repl, _in: @io::Reader, _out: @io::Writer,
         }
         ~"load" => {
             let mut loaded_crates: ~[~str] = ~[];
-            foreach arg in args.iter() {
+            for arg in args.iter() {
                 let (crate, filename) =
                     if arg.ends_with(".rs") || arg.ends_with(".rc") {
                     (arg.slice_to(arg.len() - 3).to_owned(), (*arg).clone())
@@ -408,7 +408,7 @@ fn run_cmd(repl: &mut Repl, _in: @io::Reader, _out: @io::Writer,
                     None => { }
                 }
             }
-            foreach crate in loaded_crates.iter() {
+            for crate in loaded_crates.iter() {
                 let crate_path = Path(*crate);
                 let crate_dir = crate_path.dirname();
                 repl.program.record_extern(fmt!("extern mod %s;", *crate));
@@ -571,7 +571,7 @@ fn repl() -> Repl {
     #[cfg(thiswillneverbeacfgflag)]
     fn run_program(prog: &str) {
         let mut r = repl();
-        foreach cmd in prog.split_iter('\n') {
+        for cmd in prog.split_iter('\n') {
             assert!(run_line(&mut r, io::stdin(), io::stdout(),
                              cmd.to_owned(), false),
                     "the command '%s' failed", cmd);
index 942e622b140bc9d513cc673a91761fbdfea9727f..cec64f36947e024d58bcb641348e40ccdec00907 100644 (file)
 
 pub fn list_installed_packages(f: &fn(&PkgId) -> bool) -> bool  {
     let workspaces = rust_path();
-    foreach p in workspaces.iter() {
+    for p in workspaces.iter() {
         let binfiles = os::list_dir(&p.push("bin"));
-        foreach exec in binfiles.iter() {
+        for exec in binfiles.iter() {
             let exec_path = Path(*exec).filestem();
             do exec_path.iter().advance |s| {
                 f(&PkgId::new(*s, p))
             };
         }
         let libfiles = os::list_dir(&p.push("lib"));
-        foreach lib in libfiles.iter() {
+        for lib in libfiles.iter() {
             debug!("Full name: %s", *lib);
             let lib_path = Path(*lib).filestem();
             do lib_path.iter().advance |s| {
index 7c12645b2b2a354de495075e2139089ffed518ff..bbe35ee5004f6235aa5b90e9652376e2b4be1eb3 100644 (file)
@@ -135,7 +135,7 @@ fn stem_matches(&self, p: &Path) -> bool {
             return true;
         }
         else {
-            foreach pth in self_id.iter() {
+            for pth in self_id.iter() {
                 if pth.starts_with("rust_") // because p is already normalized
                     && match p.filestem() {
                            Some(s) => str::eq_slice(s, pth.slice(5, pth.len())),
@@ -149,7 +149,7 @@ fn stem_matches(&self, p: &Path) -> bool {
     fn push_crate(cs: &mut ~[Crate], prefix: uint, p: &Path) {
         assert!(p.components.len() > prefix);
         let mut sub = Path("");
-        foreach c in p.components.slice(prefix, p.components.len()).iter() {
+        for c in p.components.slice(prefix, p.components.len()).iter() {
             sub = sub.push(*c);
         }
         debug!("found crate %s", sub.to_str());
@@ -207,7 +207,7 @@ fn build_crates(&self,
                     crates: &[Crate],
                     cfgs: &[~str],
                     what: OutputType) {
-        foreach crate in crates.iter() {
+        for crate in crates.iter() {
             let path = &src_dir.push_rel(&crate.file).normalize();
             note(fmt!("build_crates: compiling %s", path.to_str()));
             note(fmt!("build_crates: destination dir is %s", dst_dir.to_str()));
index ef95adf8c17056c759ed0666dfdbd9006296aa90..fdfa29b2f832b5077373358f31d9899e57d63aab 100644 (file)
@@ -61,7 +61,7 @@ pub fn rust_path() -> ~[Path] {
     // Avoid adding duplicates
     // could still add dups if someone puts one of these in the RUST_PATH
     // manually, though...
-    foreach hdir in h.iter() {
+    for hdir in h.iter() {
         if !(cwd.is_ancestor_of(hdir) || hdir.is_ancestor_of(&cwd)) {
             push_if_exists(&mut env_rust_path, hdir);
         }
@@ -100,7 +100,7 @@ pub fn make_dir_rwx(p: &Path) -> bool { os::make_dir(p, U_RWX) }
 pub fn workspace_contains_package_id(pkgid: &PkgId, workspace: &Path) -> bool {
     let src_dir = workspace.push("src");
     let dirs = os::list_dir(&src_dir);
-    foreach p in dirs.iter() {
+    for p in dirs.iter() {
         let p = Path((*p).clone());
         debug!("=> p = %s", p.to_str());
         if !os::path_is_dir(&src_dir.push_rel(&p)) {
@@ -113,7 +113,7 @@ pub fn workspace_contains_package_id(pkgid: &PkgId, workspace: &Path) -> bool {
         }
         else {
             let pf = p.filename();
-            foreach pf in pf.iter() {
+            for pf in pf.iter() {
                 let f_ = (*pf).clone();
                 let g = f_.to_str();
                 match split_version_general(g, '-') {
@@ -150,7 +150,7 @@ pub fn pkgid_src_in_workspace(pkgid: &PkgId, workspace: &Path) -> ~[Path] {
 /// Returns a src for pkgid that does exist -- None if none of them do
 pub fn first_pkgid_src_in_workspace(pkgid: &PkgId, workspace: &Path) -> Option<Path> {
     let rs = pkgid_src_in_workspace(pkgid, workspace);
-    foreach p in rs.iter() {
+    for p in rs.iter() {
         if os::path_exists(p) {
             return Some((*p).clone());
         }
@@ -246,7 +246,7 @@ pub fn library_in_workspace(path: &LocalPath, short_name: &str, where: Target,
     debug!("lib_prefix = %s and lib_filetype = %s", lib_prefix, lib_filetype);
 
     let mut result_filename = None;
-    foreach p in dir_contents.iter() {
+    for p in dir_contents.iter() {
         let mut which = 0;
         let mut hash = None;
         let p_path = Path((*p).clone());
@@ -261,7 +261,7 @@ pub fn library_in_workspace(path: &LocalPath, short_name: &str, where: Target,
         let f_name = match p_path.filename() {
             Some(s) => s, None => loop
         };
-        foreach piece in f_name.split_iter('-') {
+        for piece in f_name.split_iter('-') {
             debug!("a piece = %s", piece);
             if which == 0 && piece != lib_prefix {
                 break;
index c86d10bc3e7339cad254f7067310edb8d075989d..4d6033de54de4bb2c3be9f9ad3dc70e409a650a2 100644 (file)
@@ -434,14 +434,14 @@ fn install_no_build(&self, workspace: &Path, id: &PkgId) {
                target_exec.to_str(), target_lib,
                maybe_executable, maybe_library);
 
-        foreach exec in maybe_executable.iter() {
+        for exec in maybe_executable.iter() {
             debug!("Copying: %s -> %s", exec.to_str(), target_exec.to_str());
             if !(os::mkdir_recursive(&target_exec.dir_path(), U_RWX) &&
                  os::copy_file(exec, &target_exec)) {
                 cond.raise(((*exec).clone(), target_exec.clone()));
             }
         }
-        foreach lib in maybe_library.iter() {
+        for lib in maybe_library.iter() {
             let target_lib = target_lib.clone().expect(fmt!("I built %s but apparently \
                                                 didn't install it!", lib.to_str()));
             debug!("Copying: %s -> %s", lib.to_str(), target_lib.to_str());
index 6b174836a68dcc9ba42383ccc0c38ba0c77dbf72..828be5dce12788c0495e010b1d784f15f5127ed0 100644 (file)
@@ -356,7 +356,7 @@ fn command_line_test_output(args: &[~str]) -> ~[~str] {
     let mut result = ~[];
     let p_output = command_line_test(args, &os::getcwd());
     let test_output = str::from_bytes(p_output.output);
-    foreach s in test_output.split_iter('\n') {
+    for s in test_output.split_iter('\n') {
         result.push(s.to_owned());
     }
     result
@@ -366,7 +366,7 @@ fn command_line_test_output_with_env(args: &[~str], env: ~[(~str, ~str)]) -> ~[~
     let mut result = ~[];
     let p_output = command_line_test_with_env(args, &os::getcwd(), Some(env));
     let test_output = str::from_bytes(p_output.output);
-    foreach s in test_output.split_iter('\n') {
+    for s in test_output.split_iter('\n') {
         result.push(s.to_owned());
     }
     result
@@ -391,7 +391,7 @@ fn touch_source_file(workspace: &Path, pkgid: &PkgId) {
     use conditions::bad_path::cond;
     let pkg_src_dir = workspace.push("src").push(pkgid.to_str());
     let contents = os::list_dir_path(&pkg_src_dir);
-    foreach p in contents.iter() {
+    for p in contents.iter() {
         if p.filetype() == Some(~".rs") {
             // should be able to do this w/o a process
             if run::process_output("touch", [p.to_str()]).status != 0 {
@@ -408,7 +408,7 @@ fn frob_source_file(workspace: &Path, pkgid: &PkgId) {
     let pkg_src_dir = workspace.push("src").push(pkgid.to_str());
     let contents = os::list_dir_path(&pkg_src_dir);
     let mut maybe_p = None;
-    foreach p in contents.iter() {
+    for p in contents.iter() {
         if p.filetype() == Some(~".rs") {
             maybe_p = Some(p);
             break;
@@ -811,7 +811,7 @@ fn rust_path_contents() {
         assert!(p.contains(&cwd));
         assert!(p.contains(&parent));
         assert!(p.contains(&grandparent));
-        foreach a_path in p.iter() {
+        for a_path in p.iter() {
             assert!(!a_path.components.is_empty());
         }
     });
index 7ef2b90297d732f116e875309418ef0d9bb779fe..7a5d8bca38a01ec617cc94fd295f49e9c3c28e69 100644 (file)
@@ -105,12 +105,12 @@ fn fold_item(ctx: @mut ReadyCtx,
     let mut cmds = ~[];
     let mut had_pkg_do = false;
 
-    foreach attr in item.attrs.iter() {
+    for attr in item.attrs.iter() {
         if "pkg_do" == attr.name() {
             had_pkg_do = true;
             match attr.node.value.node {
                 ast::MetaList(_, ref mis) => {
-                    foreach mi in mis.iter() {
+                    for mi in mis.iter() {
                         match mi.node {
                             ast::MetaWord(cmd) => cmds.push(cmd.to_owned()),
                             _ => {}
@@ -211,7 +211,7 @@ pub fn compile_input(ctxt: &Ctx,
     let addl_lib_search_paths = @mut options.addl_lib_search_paths;
     // Make sure all the library directories actually exist, since the linker will complain
     // otherwise
-    foreach p in addl_lib_search_paths.iter() {
+    for p in addl_lib_search_paths.iter() {
         assert!(os::path_is_dir(p));
     }
 
@@ -275,7 +275,7 @@ pub fn compile_crate_from_input(input: &driver::input,
 
     debug!("Outputs are %? and output type = %?", outputs, sess.opts.output_type);
     debug!("additional libraries:");
-    foreach lib in sess.opts.addl_lib_search_paths.iter() {
+    for lib in sess.opts.addl_lib_search_paths.iter() {
         debug!("an additional library: %s", lib.to_str());
     }
     let analysis = driver::phase_3_run_analysis_passes(sess, crate);
@@ -304,7 +304,7 @@ pub fn compile_crate(ctxt: &Ctx, pkg_id: &PkgId,
                      what: OutputType) -> bool {
     debug!("compile_crate: crate=%s, dir=%s", crate.to_str(), dir.to_str());
     debug!("compile_crate: short_name = %s, flags =...", pkg_id.to_str());
-    foreach fl in flags.iter() {
+    for fl in flags.iter() {
         debug!("+++ %s", *fl);
     }
     compile_input(ctxt, pkg_id, crate, dir, flags, cfgs, opt, what)
index d0c5c099ec455764b9fbc202af29855ea658e836..8839185089116ee78f30fc44d5c1a5b3ac1a0d19 100644 (file)
@@ -108,7 +108,7 @@ pub fn try_getting_local_version(local_path: &Path) -> Option<Version> {
 
     let mut output = None;
     let output_text = str::from_bytes(outp.output);
-    foreach l in output_text.line_iter() {
+    for l in output_text.line_iter() {
         if !l.is_whitespace() {
             output = Some(l);
         }
@@ -142,7 +142,7 @@ pub fn try_getting_version(remote_path: &RemotePath) -> Option<Version> {
                                             ~"tag", ~"-l"]);
             let output_text = str::from_bytes(outp.output);
             debug!("Full output: ( %s ) [%?]", output_text, outp.status);
-            foreach l in output_text.line_iter() {
+            for l in output_text.line_iter() {
                 debug!("A line of output: %s", l);
                 if !l.is_whitespace() {
                     output = Some(l);
@@ -172,7 +172,7 @@ fn try_parsing_version(s: &str) -> Option<Version> {
     let s = s.trim();
     debug!("Attempting to parse: %s", s);
     let mut parse_state = Start;
-    foreach c in s.iter() {
+    for c in s.iter() {
         if char::is_digit(c) {
             parse_state = SawDigit;
         }
@@ -204,7 +204,7 @@ pub fn split_version<'a>(s: &'a str) -> Option<(&'a str, Version)> {
 
 pub fn split_version_general<'a>(s: &'a str, sep: char) -> Option<(&'a str, Version)> {
     // reject strings with multiple '#'s
-    foreach st in s.split_iter(sep) {
+    for st in s.split_iter(sep) {
         debug!("whole = %s part = %s", s, st);
     }
     if s.split_iter(sep).len_() > 2 {
index 3417d051e6290f28c2b5fc0cbd4ae3eb95a83e99..d877b4ff489cf9d7075fa0aa1d7fb10896770cc9 100644 (file)
@@ -26,7 +26,7 @@ pub fn each_pkg_parent_workspace(pkgid: &PkgId, action: &fn(&Path) -> bool) -> b
                    pkgid.remote_path.to_str(),
                    rust_path().to_str());
     }
-    foreach ws in workspaces.iter() {
+    for ws in workspaces.iter() {
         if action(ws) {
             break;
         }
index ab1dd3d45f17ffdc1c31372054e5075bb1206a7b..4ece53d0e7f529423827d4d13ec653696c32a82f 100644 (file)
@@ -91,10 +91,10 @@ pub fn build_sized_opt<A>(size: Option<uint>,
 #[inline]
 pub fn append<T:Clone>(lhs: @[T], rhs: &[T]) -> @[T] {
     do build_sized(lhs.len() + rhs.len()) |push| {
-        foreach x in lhs.iter() {
+        for x in lhs.iter() {
             push((*x).clone());
         }
-        foreach i in range(0u, rhs.len()) {
+        for i in range(0u, rhs.len()) {
             push(rhs[i].clone());
         }
     }
@@ -104,7 +104,7 @@ pub fn append<T:Clone>(lhs: @[T], rhs: &[T]) -> @[T] {
 /// Apply a function to each element of a vector and return the results
 pub fn map<T, U>(v: &[T], f: &fn(x: &T) -> U) -> @[U] {
     do build_sized(v.len()) |push| {
-        foreach elem in v.iter() {
+        for elem in v.iter() {
             push(f(elem));
         }
     }
@@ -147,7 +147,7 @@ pub fn to_managed_consume<T>(v: ~[T]) -> @[T] {
     let mut av = @[];
     unsafe {
         raw::reserve(&mut av, v.len());
-        foreach x in v.consume_iter() {
+        for x in v.consume_iter() {
             raw::push(&mut av, x);
         }
         av
@@ -329,7 +329,7 @@ fn test() {
         // Some code that could use that, then:
         fn seq_range(lo: uint, hi: uint) -> @[uint] {
             do build |push| {
-                foreach i in range(lo, hi) {
+                for i in range(lo, hi) {
                     push(i);
                 }
             }
index abb04e637ca9de99088fbb56d8bbce9fb82974f2..43a632562b2b71b5db5697bf28a051c62df185e5 100644 (file)
@@ -238,7 +238,7 @@ fn t(o1: Ordering, o2: Ordering, e: Ordering) {
         }
 
         let xs = [Less, Equal, Greater];
-        foreach &o in xs.iter() {
+        for &o in xs.iter() {
             t(Less, o, Less);
             t(Equal, o, o);
             t(Greater, o, Greater);
index 10f3fc6586f58329bf56d86b9de99c646b67036c..22525d4cab44231302a274b85ce758a8ee3002c6 100644 (file)
@@ -34,11 +34,13 @@ pub trait Mutable: Container {
 /// A map is a key-value store where values may be looked up by their keys. This
 /// trait provides basic operations to operate on these stores.
 pub trait Map<K, V>: Container {
-    /// Return true if the map contains a value for the specified key
-    fn contains_key(&self, key: &K) -> bool;
-
     /// Return a reference to the value corresponding to the key
     fn find<'a>(&'a self, key: &K) -> Option<&'a V>;
+
+    /// Return true if the map contains a value for the specified key
+    fn contains_key(&self, key: &K) -> bool {
+        self.find(key).is_some()
+    }
 }
 
 /// This trait provides basic operations to modify the contents of a map.
index d0378fa947b2b776c0d700c345998558ef617c9b..6bdc45d72042a7d9a589530b25458e679eee531d 100644 (file)
@@ -47,7 +47,7 @@ pub fn either<T, U, V>(f_left: &fn(&T) -> V,
 /// Extracts from a vector of either all the left values
 pub fn lefts<T:Clone,U>(eithers: &[Either<T, U>]) -> ~[T] {
     do vec::build_sized(eithers.len()) |push| {
-        foreach elt in eithers.iter() {
+        for elt in eithers.iter() {
             match *elt {
                 Left(ref l) => { push((*l).clone()); }
                 _ => { /* fallthrough */ }
@@ -59,7 +59,7 @@ pub fn lefts<T:Clone,U>(eithers: &[Either<T, U>]) -> ~[T] {
 /// Extracts from a vector of either all the right values
 pub fn rights<T, U: Clone>(eithers: &[Either<T, U>]) -> ~[U] {
     do vec::build_sized(eithers.len()) |push| {
-        foreach elt in eithers.iter() {
+        for elt in eithers.iter() {
             match *elt {
                 Right(ref r) => { push((*r).clone()); }
                 _ => { /* fallthrough */ }
@@ -75,7 +75,7 @@ pub fn rights<T, U: Clone>(eithers: &[Either<T, U>]) -> ~[U] {
 pub fn partition<T, U>(eithers: ~[Either<T, U>]) -> (~[T], ~[U]) {
     let mut lefts: ~[T] = ~[];
     let mut rights: ~[U] = ~[];
-    foreach elt in eithers.consume_iter() {
+    for elt in eithers.consume_iter() {
         match elt {
             Left(l) => lefts.push(l),
             Right(r) => rights.push(r)
index 5d4b9b4e3f0ba89b965b2c18753a8c5b48680682..c9d031ed1b1b05be141fa00d1694e21cf48c8b4f 100644 (file)
@@ -385,7 +385,7 @@ fn result_bytes(&mut self) -> ~[u8] {
     fn result_str(&mut self) -> ~str {
         let r = self.result_bytes();
         let mut s = ~"";
-        foreach b in r.iter() {
+        for b in r.iter() {
             s.push_str(uint::to_str_radix(*b as uint, 16u));
         }
         s
@@ -487,7 +487,7 @@ fn test_siphash() {
 
         fn to_hex_str(r: &[u8, ..8]) -> ~str {
             let mut s = ~"";
-            foreach b in r.iter() {
+            for b in r.iter() {
                 s.push_str(uint::to_str_radix(*b as uint, 16u));
             }
             s
index 4de5d316fc0707b452a0356f63c4b4379dd8668a..658f854c50d81ea80a9716ff9b2937add905e7db 100644 (file)
@@ -159,7 +159,7 @@ fn resize(&mut self, new_capacity: uint) {
 
         self.size = 0;
         // consume_rev_iter is more efficient
-        foreach bucket in old_buckets.consume_rev_iter() {
+        for bucket in old_buckets.consume_rev_iter() {
             self.insert_opt_bucket(bucket);
         }
     }
@@ -264,7 +264,7 @@ fn len(&self) -> uint { self.size }
 impl<K:Hash + Eq,V> Mutable for HashMap<K, V> {
     /// Clear the map, removing all key-value pairs.
     fn clear(&mut self) {
-        foreach idx in range(0u, self.buckets.len()) {
+        for idx in range(0u, self.buckets.len()) {
             self.buckets[idx] = None;
         }
         self.size = 0;
@@ -272,14 +272,6 @@ fn clear(&mut self) {
 }
 
 impl<K:Hash + Eq,V> Map<K, V> for HashMap<K, V> {
-    /// Return true if the map contains a value for the specified key
-    fn contains_key(&self, k: &K) -> bool {
-        match self.bucket_for_key(k) {
-            FoundEntry(_) => {true}
-            TableFull | FoundHole(_) => {false}
-        }
-    }
-
     /// Return a reference to the value corresponding to the key
     fn find<'a>(&'a self, k: &K) -> Option<&'a V> {
         match self.bucket_for_key(k) {
@@ -513,7 +505,7 @@ fn ne(&self, other: &HashMap<K, V>) -> bool { !self.eq(other) }
 impl<K:Hash + Eq + Clone,V:Clone> Clone for HashMap<K,V> {
     fn clone(&self) -> HashMap<K,V> {
         let mut new_map = HashMap::with_capacity(self.len());
-        foreach (key, value) in self.iter() {
+        for (key, value) in self.iter() {
             new_map.insert((*key).clone(), (*value).clone());
         }
         new_map
@@ -550,7 +542,7 @@ pub struct HashSetConsumeIterator<K> {
 impl<'self, K, V> Iterator<(&'self K, &'self V)> for HashMapIterator<'self, K, V> {
     #[inline]
     fn next(&mut self) -> Option<(&'self K, &'self V)> {
-        foreach elt in self.iter {
+        for elt in self.iter {
             match elt {
                 &Some(ref bucket) => return Some((&bucket.key, &bucket.value)),
                 &None => {},
@@ -563,7 +555,7 @@ fn next(&mut self) -> Option<(&'self K, &'self V)> {
 impl<'self, K, V> Iterator<(&'self K, &'self mut V)> for HashMapMutIterator<'self, K, V> {
     #[inline]
     fn next(&mut self) -> Option<(&'self K, &'self mut V)> {
-        foreach elt in self.iter {
+        for elt in self.iter {
             match elt {
                 &Some(ref mut bucket) => return Some((&bucket.key, &mut bucket.value)),
                 &None => {},
@@ -576,7 +568,7 @@ fn next(&mut self) -> Option<(&'self K, &'self mut V)> {
 impl<K, V> Iterator<(K, V)> for HashMapConsumeIterator<K, V> {
     #[inline]
     fn next(&mut self) -> Option<(K, V)> {
-        foreach elt in self.iter {
+        for elt in self.iter {
             match elt {
                 Some(Bucket {key, value, _}) => return Some((key, value)),
                 None => {},
@@ -589,7 +581,7 @@ fn next(&mut self) -> Option<(K, V)> {
 impl<'self, K> Iterator<&'self K> for HashSetIterator<'self, K> {
     #[inline]
     fn next(&mut self) -> Option<&'self K> {
-        foreach elt in self.iter {
+        for elt in self.iter {
             match elt {
                 &Some(ref bucket) => return Some(&bucket.key),
                 &None => {},
@@ -602,7 +594,7 @@ fn next(&mut self) -> Option<&'self K> {
 impl<K> Iterator<K> for HashSetConsumeIterator<K> {
     #[inline]
     fn next(&mut self) -> Option<K> {
-        foreach elt in self.iter {
+        for elt in self.iter {
             match elt {
                 Some(bucket) => return Some(bucket.key),
                 None => {},
@@ -623,7 +615,7 @@ fn from_iterator(iter: &mut T) -> HashMap<K, V> {
 
 impl<K: Eq + Hash, V, T: Iterator<(K, V)>> Extendable<(K, V), T> for HashMap<K, V> {
     fn extend(&mut self, iter: &mut T) {
-        foreach (k, v) in *iter {
+        for (k, v) in *iter {
             self.insert(k, v);
         }
     }
@@ -758,7 +750,7 @@ fn from_iterator(iter: &mut T) -> HashSet<K> {
 
 impl<K: Eq + Hash, T: Iterator<K>> Extendable<K, T> for HashSet<K> {
     fn extend(&mut self, iter: &mut T) {
-        foreach k in *iter {
+        for k in *iter {
             self.insert(k);
         }
     }
@@ -926,11 +918,11 @@ fn test_consume() {
     #[test]
     fn test_iterate() {
         let mut m = HashMap::with_capacity(4);
-        foreach i in range(0u, 32) {
+        for i in range(0u, 32) {
             assert!(m.insert(i, i*2));
         }
         let mut observed = 0;
-        foreach (k, v) in m.iter() {
+        for (k, v) in m.iter() {
             assert_eq!(*v, *k * 2);
             observed |= (1 << *k);
         }
@@ -1007,7 +999,7 @@ fn test_from_iter() {
 
         let map: HashMap<int, int> = xs.iter().transform(|&x| x).collect();
 
-        foreach &(k, v) in xs.iter() {
+        for &(k, v) in xs.iter() {
             assert_eq!(map.find(&k), Some(&v));
         }
     }
@@ -1074,11 +1066,11 @@ fn test_subset_and_superset() {
     #[test]
     fn test_iterate() {
         let mut a = HashSet::new();
-        foreach i in range(0u, 32) {
+        for i in range(0u, 32) {
             assert!(a.insert(i));
         }
         let mut observed = 0;
-        foreach k in a.iter() {
+        for k in a.iter() {
             observed |= (1 << *k);
         }
         assert_eq!(observed, 0xFFFF_FFFF);
@@ -1107,7 +1099,7 @@ fn test_intersection() {
 
         let mut i = 0;
         let expected = [3, 5, 11, 77];
-        foreach x in a.intersection_iter(&b) {
+        for x in a.intersection_iter(&b) {
             assert!(expected.contains(x));
             i += 1
         }
@@ -1130,7 +1122,7 @@ fn test_difference() {
 
         let mut i = 0;
         let expected = [1, 5, 11];
-        foreach x in a.difference_iter(&b) {
+        for x in a.difference_iter(&b) {
             assert!(expected.contains(x));
             i += 1
         }
@@ -1156,7 +1148,7 @@ fn test_symmetric_difference() {
 
         let mut i = 0;
         let expected = [-2, 1, 5, 11, 14, 22];
-        foreach x in a.symmetric_difference_iter(&b) {
+        for x in a.symmetric_difference_iter(&b) {
             assert!(expected.contains(x));
             i += 1
         }
@@ -1186,7 +1178,7 @@ fn test_union() {
 
         let mut i = 0;
         let expected = [-2, 1, 3, 5, 9, 11, 13, 16, 19, 24];
-        foreach x in a.union_iter(&b) {
+        for x in a.union_iter(&b) {
             assert!(expected.contains(x));
             i += 1
         }
@@ -1199,7 +1191,7 @@ fn test_from_iter() {
 
         let set: HashSet<int> = xs.iter().transform(|&x| x).collect();
 
-        foreach x in xs.iter() {
+        for x in xs.iter() {
             assert!(set.contains(x));
         }
     }
index f0d4c3a737596f93857da3b6837f39011a9d3666..1c2fc5db443f41a02a8d54c42def6491528f8cb8 100644 (file)
@@ -1282,7 +1282,7 @@ fn wb() -> c_int {
     fn wb() -> c_int { O_WRONLY as c_int }
 
     let mut fflags: c_int = wb();
-    foreach f in flags.iter() {
+    for f in flags.iter() {
         match *f {
           Append => fflags |= O_APPEND as c_int,
           Create => fflags |= O_CREAT as c_int,
@@ -1946,7 +1946,7 @@ fn check_read_ln(len : uint, s: &str, ivals: &[int]) {
                 if len <= ivals.len() {
                     assert_eq!(res.len(), len);
                 }
-                foreach (iv, c) in ivals.iter().zip(res.iter()) {
+                for (iv, c) in ivals.iter().zip(res.iter()) {
                     assert!(*iv == *c as int)
                 }
             }
@@ -2060,7 +2060,7 @@ fn test_read_write_le() {
         // write the ints to the file
         {
             let file = io::file_writer(&path, [io::Create]).unwrap();
-            foreach i in uints.iter() {
+            for i in uints.iter() {
                 file.write_le_u64(*i);
             }
         }
@@ -2068,7 +2068,7 @@ fn test_read_write_le() {
         // then read them back and check that they are the same
         {
             let file = io::file_reader(&path).unwrap();
-            foreach i in uints.iter() {
+            for i in uints.iter() {
                 assert_eq!(file.read_le_u64(), *i);
             }
         }
@@ -2082,7 +2082,7 @@ fn test_read_write_be() {
         // write the ints to the file
         {
             let file = io::file_writer(&path, [io::Create]).unwrap();
-            foreach i in uints.iter() {
+            for i in uints.iter() {
                 file.write_be_u64(*i);
             }
         }
@@ -2090,7 +2090,7 @@ fn test_read_write_be() {
         // then read them back and check that they are the same
         {
             let file = io::file_reader(&path).unwrap();
-            foreach i in uints.iter() {
+            for i in uints.iter() {
                 assert_eq!(file.read_be_u64(), *i);
             }
         }
@@ -2104,7 +2104,7 @@ fn test_read_be_int_n() {
         // write the ints to the file
         {
             let file = io::file_writer(&path, [io::Create]).unwrap();
-            foreach i in ints.iter() {
+            for i in ints.iter() {
                 file.write_be_i32(*i);
             }
         }
@@ -2112,7 +2112,7 @@ fn test_read_be_int_n() {
         // then read them back and check that they are the same
         {
             let file = io::file_reader(&path).unwrap();
-            foreach i in ints.iter() {
+            for i in ints.iter() {
                 // this tests that the sign extension is working
                 // (comparing the values as i32 would not test this)
                 assert_eq!(file.read_be_int_n(4), *i as i64);
index 3b8298414843c1d0724a1e4ca503b19b284ee211..0769aa6a7646478303936748307dc2ab682038fe 100644 (file)
@@ -295,7 +295,7 @@ fn scan<'r, St, B>(self, initial_state: St, f: &'r fn(&mut St, A) -> Option<B>)
     /// let mut it = xs.iter().flat_map_(|&x| Counter::new(0u, 1).take_(x));
     /// // Check that `it` has the same elements as `ys`
     /// let mut i = 0;
-    /// foreach x: uint in it {
+    /// for x: uint in it {
     ///     assert_eq!(x, ys[i]);
     ///     i += 1;
     /// }
@@ -330,7 +330,7 @@ fn flat_map_<'r, B, U: Iterator<B>>(self, f: &'r fn(A) -> U)
     /// ~~~ {.rust}
     /// use std::iterator::Counter;
     ///
-    /// foreach i in Counter::new(0, 10) {
+    /// for i in Counter::new(0, 10) {
     ///     printfln!("%d", i);
     /// }
     /// ~~~
@@ -577,7 +577,7 @@ fn nth(&mut self, mut n: uint) -> Option<A> {
     #[inline]
     fn last_(&mut self) -> Option<A> {
         let mut last = None;
-        foreach x in *self { last = Some(x); }
+        for x in *self { last = Some(x); }
         last
     }
 
@@ -600,20 +600,20 @@ fn len_(&mut self) -> uint { self.fold(0, |cnt, _x| cnt + 1) }
 
     #[inline]
     fn all(&mut self, f: &fn(A) -> bool) -> bool {
-        foreach x in *self { if !f(x) { return false; } }
+        for x in *self { if !f(x) { return false; } }
         true
     }
 
     #[inline]
     fn any(&mut self, f: &fn(A) -> bool) -> bool {
-        foreach x in *self { if f(x) { return true; } }
+        for x in *self { if f(x) { return true; } }
         false
     }
 
     /// Return the first element satisfying the specified predicate
     #[inline]
     fn find_(&mut self, predicate: &fn(&A) -> bool) -> Option<A> {
-        foreach x in *self {
+        for x in *self {
             if predicate(&x) { return Some(x) }
         }
         None
@@ -623,7 +623,7 @@ fn find_(&mut self, predicate: &fn(&A) -> bool) -> Option<A> {
     #[inline]
     fn position(&mut self, predicate: &fn(A) -> bool) -> Option<uint> {
         let mut i = 0;
-        foreach x in *self {
+        for x in *self {
             if predicate(x) {
                 return Some(i);
             }
@@ -635,7 +635,7 @@ fn position(&mut self, predicate: &fn(A) -> bool) -> Option<uint> {
     #[inline]
     fn count(&mut self, predicate: &fn(A) -> bool) -> uint {
         let mut i = 0;
-        foreach x in *self {
+        for x in *self {
             if predicate(x) { i += 1 }
         }
         i
@@ -1024,7 +1024,7 @@ pub struct Filter<'self, A, T> {
 impl<'self, A, T: Iterator<A>> Iterator<A> for Filter<'self, A, T> {
     #[inline]
     fn next(&mut self) -> Option<A> {
-        foreach x in self.iter {
+        for x in self.iter {
             if (self.predicate)(&x) {
                 return Some(x);
             } else {
@@ -1068,7 +1068,7 @@ pub struct FilterMap<'self, A, B, T> {
 impl<'self, A, B, T: Iterator<A>> Iterator<B> for FilterMap<'self, A, B, T> {
     #[inline]
     fn next(&mut self) -> Option<B> {
-        foreach x in self.iter {
+        for x in self.iter {
             match (self.f)(x) {
                 Some(y) => return Some(y),
                 None => ()
@@ -1373,8 +1373,8 @@ impl<'self, A, T: Iterator<A>, B, U: Iterator<B>> Iterator<B> for
     #[inline]
     fn next(&mut self) -> Option<B> {
         loop {
-            foreach inner in self.frontiter.mut_iter() {
-                foreach x in *inner {
+            for inner in self.frontiter.mut_iter() {
+                for x in *inner {
                     return Some(x)
                 }
             }
@@ -1403,7 +1403,7 @@ impl<'self,
     #[inline]
     fn next_back(&mut self) -> Option<B> {
         loop {
-            foreach inner in self.backiter.mut_iter() {
+            for inner in self.backiter.mut_iter() {
                 match inner.next_back() {
                     None => (),
                     y => return y
@@ -1577,7 +1577,7 @@ fn test_iterator_chain() {
         let expected = [0, 1, 2, 3, 4, 5, 30, 40, 50, 60];
         let mut it = xs.iter().chain_(ys.iter());
         let mut i = 0;
-        foreach &x in it {
+        for &x in it {
             assert_eq!(x, expected[i]);
             i += 1;
         }
@@ -1586,7 +1586,7 @@ fn test_iterator_chain() {
         let ys = Counter::new(30u, 10).take_(4);
         let mut it = xs.iter().transform(|&x| x).chain_(ys);
         let mut i = 0;
-        foreach x in it {
+        for x in it {
             assert_eq!(x, expected[i]);
             i += 1;
         }
@@ -1604,7 +1604,7 @@ fn test_filter_map() {
     fn test_iterator_enumerate() {
         let xs = [0u, 1, 2, 3, 4, 5];
         let mut it = xs.iter().enumerate();
-        foreach (i, &x) in it {
+        for (i, &x) in it {
             assert_eq!(i, x);
         }
     }
@@ -1615,7 +1615,7 @@ fn test_iterator_take_while() {
         let ys = [0u, 1, 2, 3, 5, 13];
         let mut it = xs.iter().take_while(|&x| *x < 15u);
         let mut i = 0;
-        foreach &x in it {
+        for &x in it {
             assert_eq!(x, ys[i]);
             i += 1;
         }
@@ -1628,7 +1628,7 @@ fn test_iterator_skip_while() {
         let ys = [15, 16, 17, 19];
         let mut it = xs.iter().skip_while(|&x| *x < 15u);
         let mut i = 0;
-        foreach &x in it {
+        for &x in it {
             assert_eq!(x, ys[i]);
             i += 1;
         }
@@ -1641,7 +1641,7 @@ fn test_iterator_skip() {
         let ys = [13, 15, 16, 17, 19, 20, 30];
         let mut it = xs.iter().skip(5);
         let mut i = 0;
-        foreach &x in it {
+        for &x in it {
             assert_eq!(x, ys[i]);
             i += 1;
         }
@@ -1654,7 +1654,7 @@ fn test_iterator_take() {
         let ys = [0u, 1, 2, 3, 5];
         let mut it = xs.iter().take_(5);
         let mut i = 0;
-        foreach &x in it {
+        for &x in it {
             assert_eq!(x, ys[i]);
             i += 1;
         }
@@ -1673,7 +1673,7 @@ fn add(old: &mut int, new: &uint) -> Option<float> {
 
         let mut it = xs.iter().scan(0, add);
         let mut i = 0;
-        foreach x in it {
+        for x in it {
             assert_eq!(x, ys[i]);
             i += 1;
         }
@@ -1686,7 +1686,7 @@ fn test_iterator_flat_map() {
         let ys = [0u, 1, 2, 3, 4, 5, 6, 7, 8];
         let mut it = xs.iter().flat_map_(|&x| Counter::new(x, 1).take_(3));
         let mut i = 0;
-        foreach x in it {
+        for x in it {
             assert_eq!(x, ys[i]);
             i += 1;
         }
@@ -1721,7 +1721,7 @@ fn count(st: &mut uint) -> Option<uint> {
 
         let mut it = Unfoldr::new(0, count);
         let mut i = 0;
-        foreach counted in it {
+        for counted in it {
             assert_eq!(counted, i);
             i += 1;
         }
@@ -1733,7 +1733,7 @@ fn test_cycle() {
         let cycle_len = 3;
         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() {
+        for (i, x) in it.take_(100).enumerate() {
             assert_eq!(i % cycle_len, x);
         }
 
@@ -1745,7 +1745,7 @@ fn test_cycle() {
     #[test]
     fn test_iterator_nth() {
         let v = &[0, 1, 2, 3, 4];
-        foreach i in range(0u, v.len()) {
+        for i in range(0u, v.len()) {
             assert_eq!(v.iter().nth(i).unwrap(), &v[i]);
         }
     }
@@ -1959,7 +1959,7 @@ fn check_randacc_iter<A: Eq, T: Clone + RandomAccessIterator<A>>(a: T, len: uint
         let mut b = a.clone();
         assert_eq!(len, b.indexable());
         let mut n = 0;
-        foreach (i, elt) in a.enumerate() {
+        for (i, elt) in a.enumerate() {
             assert_eq!(Some(elt), b.idx(i));
             n += 1;
         }
@@ -2049,7 +2049,7 @@ fn test_random_access_peek() {
         // test .transform and .peek_ that don't implement Clone
         let it = xs.iter().peek_(|_| {});
         assert_eq!(xs.len(), it.indexable());
-        foreach (i, elt) in xs.iter().enumerate() {
+        for (i, elt) in xs.iter().enumerate() {
             assert_eq!(Some(elt), it.idx(i));
         }
 
@@ -2062,7 +2062,7 @@ fn test_random_access_transform() {
         // test .transform and .peek_ that don't implement Clone
         let it = xs.iter().transform(|x| *x);
         assert_eq!(xs.len(), it.indexable());
-        foreach (i, elt) in xs.iter().enumerate() {
+        for (i, elt) in xs.iter().enumerate() {
             assert_eq!(Some(*elt), it.idx(i));
         }
     }
index 547c453b02d1a143f5697cc84ecb189a601ac9c6..417251d3740e6575016d0ae9934eca1d69553ca1 100644 (file)
@@ -502,7 +502,7 @@ fn test_option_dance() {
         let x = Some(());
         let mut y = Some(5);
         let mut y2 = 0;
-        foreach _x in x.iter() {
+        for _x in x.iter() {
             y2 = y.take_unwrap();
         }
         assert_eq!(y2, 5);
index b6c9979cc7d3df525b1ef412dd656df7187ec2bd..6d109aac4ea6cfb40166736fe614d9845b563053 100644 (file)
@@ -220,7 +220,7 @@ unsafe fn get_env_pairs() -> ~[~str] {
 
         fn env_convert(input: ~[~str]) -> ~[(~str, ~str)] {
             let mut pairs = ~[];
-            foreach p in input.iter() {
+            for p in input.iter() {
                 let vs: ~[&str] = p.splitn_iter('=', 1).collect();
                 debug!("splitting: len: %u",
                     vs.len());
@@ -1125,7 +1125,7 @@ pub fn set_exit_status(code: int) {
 
 unsafe fn load_argc_and_argv(argc: c_int, argv: **c_char) -> ~[~str] {
     let mut args = ~[];
-    foreach i in range(0u, argc as uint) {
+    for i in range(0u, argc as uint) {
         args.push(str::raw::from_c_str(*argv.offset(i as int)));
     }
     args
@@ -1174,7 +1174,7 @@ pub fn real_args() -> ~[~str] {
     let szArgList = unsafe { CommandLineToArgvW(lpCmdLine, lpArgCount) };
 
     let mut args = ~[];
-    foreach i in range(0u, nArgs as uint) {
+    for i in range(0u, nArgs as uint) {
         unsafe {
             // Determine the length of this argument.
             let ptr = *szArgList.offset(i as int);
@@ -1431,7 +1431,7 @@ pub fn new(min_len: uint, options: ~[MapOption]) -> Result<~MemoryMap, MapError>
         let mut offset: off_t = 0;
         let len = round_up(min_len, page_size()) as size_t;
 
-        foreach &o in options.iter() {
+        for &o in options.iter() {
             match o {
                 MapReadable => { prot |= libc::PROT_READ; },
                 MapWritable => { prot |= libc::PROT_WRITE; },
@@ -1504,7 +1504,7 @@ pub fn new(min_len: uint, options: ~[MapOption]) -> Result<~MemoryMap, MapError>
         let mut offset: uint = 0;
         let len = round_up(min_len, page_size()) as SIZE_T;
 
-        foreach &o in options.iter() {
+        for &o in options.iter() {
             match o {
                 MapReadable => { readable = true; },
                 MapWritable => { writable = true; },
@@ -1800,7 +1800,7 @@ fn test_self_exe_path() {
     fn test_env_getenv() {
         let e = env();
         assert!(e.len() > 0u);
-        foreach p in e.iter() {
+        for p in e.iter() {
             let (n, v) = (*p).clone();
             debug!(n.clone());
             let v2 = getenv(n);
@@ -1844,7 +1844,7 @@ fn homedir() {
         setenv("HOME", "");
         assert!(os::homedir().is_none());
 
-        foreach s in oldhome.iter() { setenv("HOME", *s) }
+        for s in oldhome.iter() { setenv("HOME", *s) }
     }
 
     #[test]
@@ -1892,7 +1892,7 @@ fn list_dir() {
         // Just assuming that we've got some contents in the current directory
         assert!(dirs.len() > 0u);
 
-        foreach dir in dirs.iter() {
+        for dir in dirs.iter() {
             debug!((*dir).clone());
         }
     }
index fe8776c21d5a38caab50bada20f5696313198467..de34ec4bed5e1cf1d7e986a6c6d572ab215a6e3d 100644 (file)
@@ -655,8 +655,8 @@ fn is_restricted(&self) -> bool {
 
     fn push_many<S: Str>(&self, cs: &[S]) -> PosixPath {
         let mut v = self.components.clone();
-        foreach e in cs.iter() {
-            foreach s in e.as_slice().split_iter(posix::is_sep) {
+        for e in cs.iter() {
+            for s in e.as_slice().split_iter(posix::is_sep) {
                 if !s.is_empty() {
                     v.push(s.to_owned())
                 }
@@ -670,7 +670,7 @@ fn push_many<S: Str>(&self, cs: &[S]) -> PosixPath {
 
     fn push(&self, s: &str) -> PosixPath {
         let mut v = self.components.clone();
-        foreach s in s.split_iter(posix::is_sep) {
+        for s in s.split_iter(posix::is_sep) {
             if !s.is_empty() {
                 v.push(s.to_owned())
             }
@@ -935,8 +935,8 @@ fn is_restricted(&self) -> bool {
 
     fn push_many<S: Str>(&self, cs: &[S]) -> WindowsPath {
         let mut v = self.components.clone();
-        foreach e in cs.iter() {
-            foreach s in e.as_slice().split_iter(windows::is_sep) {
+        for e in cs.iter() {
+            for s in e.as_slice().split_iter(windows::is_sep) {
                 if !s.is_empty() {
                     v.push(s.to_owned())
                 }
@@ -953,7 +953,7 @@ fn push_many<S: Str>(&self, cs: &[S]) -> WindowsPath {
 
     fn push(&self, s: &str) -> WindowsPath {
         let mut v = self.components.clone();
-        foreach s in s.split_iter(windows::is_sep) {
+        for s in s.split_iter(windows::is_sep) {
             if !s.is_empty() {
                 v.push(s.to_owned())
             }
@@ -1002,7 +1002,7 @@ fn is_ancestor_of(&self, other: &WindowsPath) -> bool {
 
 pub fn normalize(components: &[~str]) -> ~[~str] {
     let mut cs = ~[];
-    foreach c in components.iter() {
+    for c in components.iter() {
         if *c == ~"." && components.len() > 1 { loop; }
         if *c == ~"" { loop; }
         if *c == ~".." && cs.len() != 0 {
index 2819744c56036a262e0d0b200aedead8b035154c..1fd534825a5449b62fa37a002d350c8694b06d74 100644 (file)
@@ -598,7 +598,7 @@ pub fn wait_many<T: Selectable>(pkts: &mut [T]) -> uint {
 
     let mut data_avail = false;
     let mut ready_packet = pkts.len();
-    foreach (i, p) in pkts.mut_iter().enumerate() {
+    for (i, p) in pkts.mut_iter().enumerate() {
         unsafe {
             let p = &mut *p.header();
             let old = p.mark_blocked(this);
@@ -620,7 +620,7 @@ pub fn wait_many<T: Selectable>(pkts: &mut [T]) -> uint {
         let event = wait_event(this) as *PacketHeader;
 
         let mut pos = None;
-        foreach (i, p) in pkts.mut_iter().enumerate() {
+        for (i, p) in pkts.mut_iter().enumerate() {
             if p.header() == event {
                 pos = Some(i);
                 break;
@@ -638,7 +638,7 @@ pub fn wait_many<T: Selectable>(pkts: &mut [T]) -> uint {
 
     debug!("%?", &mut pkts[ready_packet]);
 
-    foreach p in pkts.mut_iter() {
+    for p in pkts.mut_iter() {
         unsafe {
             (*p.header()).unblock()
         }
@@ -849,7 +849,7 @@ pub fn select<T:Send,Tb:Send>(mut endpoints: ~[RecvPacketBuffered<T, Tb>])
                                     Option<T>,
                                     ~[RecvPacketBuffered<T, Tb>]) {
     let mut endpoint_headers = ~[];
-    foreach endpoint in endpoints.mut_iter() {
+    for endpoint in endpoints.mut_iter() {
         endpoint_headers.push(endpoint.header());
     }
 
index 88a915a1e55945424175cd8e0be7db36ae0fc473..84d55c55c2ff390d12945a172e332f90bea9a9a1 100644 (file)
@@ -13,8 +13,6 @@
 use cast;
 use clone::Clone;
 use option::{Option, Some, None};
-#[cfg(stage0)]
-use sys;
 use unstable::intrinsics;
 use util::swap;
 
 
 /// Calculate the offset from a pointer
 #[inline]
-#[cfg(stage0)]
-pub fn offset<T>(ptr: *T, count: int) -> *T {
-    (ptr as uint + (count as uint) * sys::size_of::<T>()) as *T
-}
-
-/// Calculate the offset from a const pointer
-#[inline]
-#[cfg(stage0)]
-pub fn const_offset<T>(ptr: *const T, count: int) -> *const T {
-    (ptr as uint + (count as uint) * sys::size_of::<T>()) as *T
-}
-
-/// Calculate the offset from a mut pointer
-#[inline]
-#[cfg(stage0)]
-pub fn mut_offset<T>(ptr: *mut T, count: int) -> *mut T {
-    (ptr as uint + (count as uint) * sys::size_of::<T>()) as *mut T
-}
-
-/// Calculate the offset from a pointer
-#[inline]
-#[cfg(not(stage0))]
 pub fn offset<T>(ptr: *T, count: int) -> *T {
     unsafe { intrinsics::offset(ptr, count) }
 }
 
 /// Calculate the offset from a const pointer
 #[inline]
-#[cfg(not(stage0))]
 pub fn const_offset<T>(ptr: *const T, count: int) -> *const T {
     unsafe { intrinsics::offset(ptr as *T, count) }
 }
 
 /// Calculate the offset from a mut pointer
 #[inline]
-#[cfg(not(stage0))]
 pub fn mut_offset<T>(ptr: *mut T, count: int) -> *mut T {
     unsafe { intrinsics::offset(ptr as *T, count) as *mut T }
 }
index 69e1852e662227ebd912a59baa5af978dd4332fb..b7d72c11ff7a888a564376f09df1f3473c1e2ba7 100644 (file)
@@ -495,7 +495,7 @@ fn gen_uint_range(&mut self, start: uint, end: uint) -> uint {
     fn gen_char_from(&mut self, chars: &str) -> char {
         assert!(!chars.is_empty());
         let mut cs = ~[];
-        foreach c in chars.iter() { cs.push(c) }
+        for c in chars.iter() { cs.push(c) }
         self.choose(cs)
     }
 
@@ -559,7 +559,7 @@ fn choose_weighted<T:Clone>(&mut self, v: &[Weighted<T>]) -> T {
     fn choose_weighted_option<T:Clone>(&mut self, v: &[Weighted<T>])
                                        -> Option<T> {
         let mut total = 0u;
-        foreach item in v.iter() {
+        for item in v.iter() {
             total += item.weight;
         }
         if total == 0u {
@@ -567,7 +567,7 @@ fn choose_weighted_option<T:Clone>(&mut self, v: &[Weighted<T>])
         }
         let chosen = self.gen_uint_range(0u, total);
         let mut so_far = 0u;
-        foreach item in v.iter() {
+        for item in v.iter() {
             so_far += item.weight;
             if so_far > chosen {
                 return Some(item.item.clone());
@@ -582,8 +582,8 @@ fn choose_weighted_option<T:Clone>(&mut self, v: &[Weighted<T>])
      */
     fn weighted_vec<T:Clone>(&mut self, v: &[Weighted<T>]) -> ~[T] {
         let mut r = ~[];
-        foreach item in v.iter() {
-            foreach _ in range(0u, item.weight) {
+        for item in v.iter() {
+            for _ in range(0u, item.weight) {
                 r.push(item.item.clone());
             }
         }
@@ -765,7 +765,7 @@ macro_rules! rngstep(
         );
 
         let r = [(0, MIDPOINT), (MIDPOINT, 0)];
-        foreach &(mr_offset, m2_offset) in r.iter() {
+        for &(mr_offset, m2_offset) in r.iter() {
             do uint::range_step(0, MIDPOINT, 4) |base| {
                 rngstep!(0, 13);
                 rngstep!(1, -6);
index edab639dfbe8b867e95fa0c721c464b4d28a5ee9..a53e3e796a790db7090bd0cc930c0223bcea53f4 100644 (file)
@@ -176,7 +176,7 @@ pub fn write<T:Repr>(&self) -> bool {
 
     pub fn write_escaped_slice(&self, slice: &str) {
         self.writer.write_char('"');
-        foreach ch in slice.iter() {
+        for ch in slice.iter() {
             self.writer.write_escaped_char(ch);
         }
         self.writer.write_char('"');
index 89803d022f84401c7601ac8fb97bfc6fdc1307e9..7a578465841bba26920f521dcd805320cd054450 100644 (file)
@@ -263,7 +263,7 @@ pub fn map<U:Clone>(&self, op: &fn(&T) -> U) -> Result<U,E> {
 pub fn map_vec<T,U,V>(ts: &[T], op: &fn(&T) -> Result<V,U>)
                       -> Result<~[V],U> {
     let mut vs: ~[V] = vec::with_capacity(ts.len());
-    foreach t in ts.iter() {
+    for t in ts.iter() {
         match op(t) {
           Ok(v) => vs.push(v),
           Err(u) => return Err(u)
index e701cb64fb6ffc263c436cf88051256bded4c17a..6f26e3bd9efe8d76c934b06e32a8db27772176f3 100644 (file)
@@ -112,7 +112,7 @@ fn get_global_ptr() -> *mut Option<~~[~str]> {
     // Copied from `os`.
     unsafe fn load_argc_and_argv(argc: int, argv: **u8) -> ~[~str] {
         let mut args = ~[];
-        foreach i in range(0u, argc as uint) {
+        for i in range(0u, argc as uint) {
             args.push(str::raw::from_c_str(*(argv as **libc::c_char).offset(i as int)));
         }
         args
index 3a51fd032c0e8d6669af793e026da312758a83ce..c18d0287bc801fc0cb1d2a8726b2cc8837de2887 100644 (file)
@@ -84,7 +84,7 @@ unsafe fn fail_borrowed(box: *mut raw::Box<()>, file: *c_char, line: size_t) {
         Some(borrow_list) => { // recording borrows
             let mut msg = ~"borrowed";
             let mut sep = " at ";
-            foreach entry in borrow_list.rev_iter() {
+            for entry in borrow_list.rev_iter() {
                 if entry.box == box {
                     msg.push_str(sep);
                     let filename = str::raw::from_c_str(entry.file);
index 2b572574b60b207d9ac1541a2e9b2e40e9fd3280..815ec9b5c61ec56284ba436caa1a35af611af5b8 100644 (file)
 
 #[deriving(Eq, TotalEq)]
 pub enum IpAddr {
-    Ipv4(u8, u8, u8, u8, Port),
-    Ipv6(u16, u16, u16, u16, u16, u16, u16, u16, Port)
+    Ipv4Addr(u8, u8, u8, u8),
+    Ipv6Addr(u16, u16, u16, u16, u16, u16, u16, u16)
 }
 
 impl ToStr for IpAddr {
     fn to_str(&self) -> ~str {
         match *self {
-            Ipv4(a, b, c, d, p) =>
-                fmt!("%u.%u.%u.%u:%u",
-                    a as uint, b as uint, c as uint, d as uint, p as uint),
+            Ipv4Addr(a, b, c, d) =>
+                fmt!("%u.%u.%u.%u",
+                    a as uint, b as uint, c as uint, d as uint),
 
             // Ipv4 Compatible address
-            Ipv6(0, 0, 0, 0, 0, 0, g, h, p) => {
+            Ipv6Addr(0, 0, 0, 0, 0, 0, g, h) => {
                 let a = fmt!("%04x", g as uint);
                 let b = FromStrRadix::from_str_radix(a.slice(2, 4), 16).unwrap();
                 let a = FromStrRadix::from_str_radix(a.slice(0, 2), 16).unwrap();
@@ -35,11 +35,11 @@ fn to_str(&self) -> ~str {
                 let d = FromStrRadix::from_str_radix(c.slice(2, 4), 16).unwrap();
                 let c = FromStrRadix::from_str_radix(c.slice(0, 2), 16).unwrap();
 
-                fmt!("[::%u.%u.%u.%u]:%u", a, b, c, d, p as uint)
+                fmt!("::%u.%u.%u.%u", a, b, c, d)
             }
 
             // Ipv4-Mapped address
-            Ipv6(0, 0, 0, 0, 0, 1, g, h, p) => {
+            Ipv6Addr(0, 0, 0, 0, 0, 1, g, h) => {
                 let a = fmt!("%04x", g as uint);
                 let b = FromStrRadix::from_str_radix(a.slice(2, 4), 16).unwrap();
                 let a = FromStrRadix::from_str_radix(a.slice(0, 2), 16).unwrap();
@@ -47,13 +47,29 @@ fn to_str(&self) -> ~str {
                 let d = FromStrRadix::from_str_radix(c.slice(2, 4), 16).unwrap();
                 let c = FromStrRadix::from_str_radix(c.slice(0, 2), 16).unwrap();
 
-                fmt!("[::FFFF:%u.%u.%u.%u]:%u", a, b, c, d, p as uint)
+                fmt!("::FFFF:%u.%u.%u.%u", a, b, c, d)
             }
 
-            Ipv6(a, b, c, d, e, f, g, h, p) =>
-                fmt!("[%x:%x:%x:%x:%x:%x:%x:%x]:%u",
+            Ipv6Addr(a, b, c, d, e, f, g, h) =>
+                fmt!("%x:%x:%x:%x:%x:%x:%x:%x",
                     a as uint, b as uint, c as uint, d as uint,
-                    e as uint, f as uint, g as uint, h as uint, p as uint)
+                    e as uint, f as uint, g as uint, h as uint)
+        }
+    }
+}
+
+#[deriving(Eq, TotalEq)]
+pub struct SocketAddr {
+    ip: IpAddr,
+    port: Port,
+}
+
+
+impl ToStr for SocketAddr {
+    fn to_str(&self) -> ~str {
+        match self.ip {
+            Ipv4Addr(*) => fmt!("%s:%u", self.ip.to_str(), self.port as uint),
+            Ipv6Addr(*) => fmt!("[%s]:%u", self.ip.to_str(), self.port as uint),
         }
     }
 }
index 764ef283eb88cb9c263314fe4bd6932f97d1346d..27222542e087d6529523316d95a81fa341218a85 100644 (file)
@@ -10,7 +10,7 @@
 
 use option::{Option, Some, None};
 use result::{Ok, Err};
-use rt::io::net::ip::IpAddr;
+use rt::io::net::ip::SocketAddr;
 use rt::io::{Reader, Writer, Listener};
 use rt::io::{io_error, read_error, EndOfFile};
 use rt::rtio::{IoFactory, IoFactoryObject,
@@ -26,7 +26,7 @@ fn new(s: ~RtioTcpStreamObject) -> TcpStream {
         TcpStream(s)
     }
 
-    pub fn connect(addr: IpAddr) -> Option<TcpStream> {
+    pub fn connect(addr: SocketAddr) -> Option<TcpStream> {
         let stream = unsafe {
             rtdebug!("borrowing io to connect");
             let io = Local::unsafe_borrow::<IoFactoryObject>();
@@ -44,7 +44,7 @@ pub fn connect(addr: IpAddr) -> Option<TcpStream> {
         }
     }
 
-    pub fn peer_name(&mut self) -> Option<IpAddr> {
+    pub fn peer_name(&mut self) -> Option<SocketAddr> {
         match (**self).peer_name() {
             Ok(pn) => Some(pn),
             Err(ioerr) => {
@@ -55,7 +55,7 @@ pub fn peer_name(&mut self) -> Option<IpAddr> {
         }
     }
 
-    pub fn socket_name(&mut self) -> Option<IpAddr> {
+    pub fn socket_name(&mut self) -> Option<SocketAddr> {
         match (**self).socket_name() {
             Ok(sn) => Some(sn),
             Err(ioerr) => {
@@ -100,7 +100,7 @@ fn flush(&mut self) { fail!() }
 pub struct TcpListener(~RtioTcpListenerObject);
 
 impl TcpListener {
-    pub fn bind(addr: IpAddr) -> Option<TcpListener> {
+    pub fn bind(addr: SocketAddr) -> Option<TcpListener> {
         let listener = unsafe {
             let io = Local::unsafe_borrow::<IoFactoryObject>();
             (*io).tcp_bind(addr)
@@ -114,7 +114,7 @@ pub fn bind(addr: IpAddr) -> Option<TcpListener> {
         }
     }
 
-    pub fn socket_name(&mut self) -> Option<IpAddr> {
+    pub fn socket_name(&mut self) -> Option<SocketAddr> {
         match (**self).socket_name() {
             Ok(sn) => Some(sn),
             Err(ioerr) => {
@@ -145,7 +145,7 @@ mod test {
     use super::*;
     use cell::Cell;
     use rt::test::*;
-    use rt::io::net::ip::Ipv4;
+    use rt::io::net::ip::{Ipv4Addr, SocketAddr};
     use rt::io::*;
     use prelude::*;
 
@@ -157,7 +157,7 @@ fn bind_error() {
                 assert!(e.kind == PermissionDenied);
                 called = true;
             }).inside {
-                let addr = Ipv4(0, 0, 0, 0, 1);
+                let addr = SocketAddr { ip: Ipv4Addr(0, 0, 0, 0), port: 1 };
                 let listener = TcpListener::bind(addr);
                 assert!(listener.is_none());
             }
@@ -173,7 +173,7 @@ fn connect_error() {
                 assert!(e.kind == ConnectionRefused);
                 called = true;
             }).inside {
-                let addr = Ipv4(0, 0, 0, 0, 1);
+                let addr = SocketAddr { ip: Ipv4Addr(0, 0, 0, 0), port: 1 };
                 let stream = TcpStream::connect(addr);
                 assert!(stream.is_none());
             }
@@ -421,7 +421,7 @@ fn multiple_connect_interleaved_greedy_schedule_ip4() {
 
             do spawntask {
                 let mut listener = TcpListener::bind(addr);
-                foreach i in range(0, MAX) {
+                for i in range(0, MAX) {
                     let stream = Cell::new(listener.accept());
                     rtdebug!("accepted");
                     // Start another task to handle the connection
@@ -437,7 +437,7 @@ fn multiple_connect_interleaved_greedy_schedule_ip4() {
 
             connect(0, addr);
 
-            fn connect(i: int, addr: IpAddr) {
+            fn connect(i: int, addr: SocketAddr) {
                 if i == MAX { return }
 
                 do spawntask {
@@ -460,7 +460,7 @@ fn multiple_connect_interleaved_greedy_schedule_ip6() {
 
             do spawntask {
                 let mut listener = TcpListener::bind(addr);
-                foreach i in range(0, MAX) {
+                for i in range(0, MAX) {
                     let stream = Cell::new(listener.accept());
                     rtdebug!("accepted");
                     // Start another task to handle the connection
@@ -476,7 +476,7 @@ fn multiple_connect_interleaved_greedy_schedule_ip6() {
 
             connect(0, addr);
 
-            fn connect(i: int, addr: IpAddr) {
+            fn connect(i: int, addr: SocketAddr) {
                 if i == MAX { return }
 
                 do spawntask {
@@ -499,7 +499,7 @@ fn multiple_connect_interleaved_lazy_schedule_ip4() {
 
             do spawntask {
                 let mut listener = TcpListener::bind(addr);
-                foreach _ in range(0, MAX) {
+                for _ in range(0, MAX) {
                     let stream = Cell::new(listener.accept());
                     rtdebug!("accepted");
                     // Start another task to handle the connection
@@ -515,7 +515,7 @@ fn multiple_connect_interleaved_lazy_schedule_ip4() {
 
             connect(0, addr);
 
-            fn connect(i: int, addr: IpAddr) {
+            fn connect(i: int, addr: SocketAddr) {
                 if i == MAX { return }
 
                 do spawntask_later {
@@ -537,7 +537,7 @@ fn multiple_connect_interleaved_lazy_schedule_ip6() {
 
             do spawntask {
                 let mut listener = TcpListener::bind(addr);
-                foreach _ in range(0, MAX) {
+                for _ in range(0, MAX) {
                     let stream = Cell::new(listener.accept());
                     rtdebug!("accepted");
                     // Start another task to handle the connection
@@ -553,7 +553,7 @@ fn multiple_connect_interleaved_lazy_schedule_ip6() {
 
             connect(0, addr);
 
-            fn connect(i: int, addr: IpAddr) {
+            fn connect(i: int, addr: SocketAddr) {
                 if i == MAX { return }
 
                 do spawntask_later {
@@ -569,7 +569,7 @@ fn connect(i: int, addr: IpAddr) {
     }
 
     #[cfg(test)]
-    fn socket_name(addr: IpAddr) {
+    fn socket_name(addr: SocketAddr) {
         do run_in_newsched_task {
             do spawntask {
                 let listener = TcpListener::bind(addr);
@@ -588,7 +588,7 @@ fn socket_name(addr: IpAddr) {
     }
 
     #[cfg(test)]
-    fn peer_name(addr: IpAddr) {
+    fn peer_name(addr: SocketAddr) {
         do run_in_newsched_task {
             do spawntask {
                 let mut listener = TcpListener::bind(addr);
index c04abfa899b1a484be767af6cd7e1062c7895871..644abcbe145ec710fe6025aa3041895111c9ad49 100644 (file)
@@ -10,7 +10,7 @@
 
 use option::{Option, Some, None};
 use result::{Ok, Err};
-use rt::io::net::ip::IpAddr;
+use rt::io::net::ip::SocketAddr;
 use rt::io::{Reader, Writer};
 use rt::io::{io_error, read_error, EndOfFile};
 use rt::rtio::{RtioSocket, RtioUdpSocketObject, RtioUdpSocket, IoFactory, IoFactoryObject};
@@ -19,7 +19,7 @@
 pub struct UdpSocket(~RtioUdpSocketObject);
 
 impl UdpSocket {
-    pub fn bind(addr: IpAddr) -> Option<UdpSocket> {
+    pub fn bind(addr: SocketAddr) -> Option<UdpSocket> {
         let socket = unsafe { (*Local::unsafe_borrow::<IoFactoryObject>()).udp_bind(addr) };
         match socket {
             Ok(s) => Some(UdpSocket(s)),
@@ -30,7 +30,7 @@ pub fn bind(addr: IpAddr) -> Option<UdpSocket> {
         }
     }
 
-    pub fn recvfrom(&mut self, buf: &mut [u8]) -> Option<(uint, IpAddr)> {
+    pub fn recvfrom(&mut self, buf: &mut [u8]) -> Option<(uint, SocketAddr)> {
         match (**self).recvfrom(buf) {
             Ok((nread, src)) => Some((nread, src)),
             Err(ioerr) => {
@@ -43,18 +43,18 @@ pub fn recvfrom(&mut self, buf: &mut [u8]) -> Option<(uint, IpAddr)> {
         }
     }
 
-    pub fn sendto(&mut self, buf: &[u8], dst: IpAddr) {
+    pub fn sendto(&mut self, buf: &[u8], dst: SocketAddr) {
         match (**self).sendto(buf, dst) {
             Ok(_) => (),
             Err(ioerr) => io_error::cond.raise(ioerr),
         }
     }
 
-    pub fn connect(self, other: IpAddr) -> UdpStream {
+    pub fn connect(self, other: SocketAddr) -> UdpStream {
         UdpStream { socket: self, connectedTo: other }
     }
 
-    pub fn socket_name(&mut self) -> Option<IpAddr> {
+    pub fn socket_name(&mut self) -> Option<SocketAddr> {
         match (***self).socket_name() {
             Ok(sn) => Some(sn),
             Err(ioerr) => {
@@ -68,7 +68,7 @@ pub fn socket_name(&mut self) -> Option<IpAddr> {
 
 pub struct UdpStream {
     socket: UdpSocket,
-    connectedTo: IpAddr
+    connectedTo: SocketAddr
 }
 
 impl UdpStream {
@@ -106,7 +106,7 @@ fn flush(&mut self) { fail!() }
 mod test {
     use super::*;
     use rt::test::*;
-    use rt::io::net::ip::Ipv4;
+    use rt::io::net::ip::{Ipv4Addr, SocketAddr};
     use rt::io::*;
     use option::{Some, None};
 
@@ -118,7 +118,7 @@ fn bind_error() {
                 assert!(e.kind == PermissionDenied);
                 called = true;
             }).inside {
-                let addr = Ipv4(0, 0, 0, 0, 1);
+                let addr = SocketAddr { ip: Ipv4Addr(0, 0, 0, 0), port: 1 };
                 let socket = UdpSocket::bind(addr);
                 assert!(socket.is_none());
             }
@@ -265,7 +265,7 @@ fn stream_smoke_test_ip6() {
     }
 
     #[cfg(test)]
-    fn socket_name(addr: IpAddr) {
+    fn socket_name(addr: SocketAddr) {
         do run_in_newsched_task {
             do spawntask {
                 let server = UdpSocket::bind(addr);
index f0f4b646103996fdfcbbb2c58e23c7657f0dd89a..4cfe0efacfefe88b8969fa8db7cf75fe908d65b3 100644 (file)
@@ -303,7 +303,7 @@ fn run_(main: ~fn(), use_main_sched: bool) -> int {
     let on_exit: ~fn(bool) = |exit_success| {
 
         let mut handles = handles.take();
-        foreach handle in handles.mut_iter() {
+        for handle in handles.mut_iter() {
             handle.send(Shutdown);
         }
 
@@ -379,7 +379,7 @@ fn run_(main: ~fn(), use_main_sched: bool) -> int {
     rtdebug!("waiting for threads");
 
     // Wait for schedulers
-    foreach thread in threads.consume_iter() {
+    for thread in threads.consume_iter() {
         thread.join();
     }
 
index d293d46e0126256ba525ad9420ee57fbb42f8025..a7c794fb5f14241967b672f2741a1438f5046a31 100644 (file)
@@ -12,7 +12,7 @@
 use result::*;
 
 use rt::io::IoError;
-use super::io::net::ip::IpAddr;
+use super::io::net::ip::{IpAddr, SocketAddr};
 use rt::uv::uvio;
 
 // XXX: ~object doesn't work currently so these are some placeholder
@@ -44,9 +44,9 @@ pub trait RemoteCallback {
 }
 
 pub trait IoFactory {
-    fn tcp_connect(&mut self, addr: IpAddr) -> Result<~RtioTcpStreamObject, IoError>;
-    fn tcp_bind(&mut self, addr: IpAddr) -> Result<~RtioTcpListenerObject, IoError>;
-    fn udp_bind(&mut self, addr: IpAddr) -> Result<~RtioUdpSocketObject, IoError>;
+    fn tcp_connect(&mut self, addr: SocketAddr) -> Result<~RtioTcpStreamObject, IoError>;
+    fn tcp_bind(&mut self, addr: SocketAddr) -> Result<~RtioTcpListenerObject, IoError>;
+    fn udp_bind(&mut self, addr: SocketAddr) -> Result<~RtioUdpSocketObject, IoError>;
     fn timer_init(&mut self) -> Result<~RtioTimerObject, IoError>;
 }
 
@@ -59,7 +59,7 @@ pub trait RtioTcpListener : RtioSocket {
 pub trait RtioTcpStream : RtioSocket {
     fn read(&mut self, buf: &mut [u8]) -> Result<uint, IoError>;
     fn write(&mut self, buf: &[u8]) -> Result<(), IoError>;
-    fn peer_name(&mut self) -> Result<IpAddr, IoError>;
+    fn peer_name(&mut self) -> Result<SocketAddr, IoError>;
     fn control_congestion(&mut self) -> Result<(), IoError>;
     fn nodelay(&mut self) -> Result<(), IoError>;
     fn keepalive(&mut self, delay_in_seconds: uint) -> Result<(), IoError>;
@@ -67,12 +67,12 @@ pub trait RtioTcpStream : RtioSocket {
 }
 
 pub trait RtioSocket {
-    fn socket_name(&mut self) -> Result<IpAddr, IoError>;
+    fn socket_name(&mut self) -> Result<SocketAddr, IoError>;
 }
 
 pub trait RtioUdpSocket : RtioSocket {
-    fn recvfrom(&mut self, buf: &mut [u8]) -> Result<(uint, IpAddr), IoError>;
-    fn sendto(&mut self, buf: &[u8], dst: IpAddr) -> Result<(), IoError>;
+    fn recvfrom(&mut self, buf: &mut [u8]) -> Result<(uint, SocketAddr), IoError>;
+    fn sendto(&mut self, buf: &[u8], dst: SocketAddr) -> Result<(), IoError>;
 
     fn join_multicast(&mut self, multi: IpAddr) -> Result<(), IoError>;
     fn leave_multicast(&mut self, multi: IpAddr) -> Result<(), IoError>;
index dfe003253c2cf2e6cd656f2da62011108a9da140..18cfeade157db96de1221f94aeb04db7ac2ab3c3 100644 (file)
@@ -761,7 +761,7 @@ fn multiple_task_test() {
         let mut task_run_count = 0;
         let task_run_count_ptr: *mut uint = &mut task_run_count;
         do run_in_newsched_task || {
-            foreach _ in range(0u, total) {
+            for _ in range(0u, total) {
                 do spawntask || {
                     unsafe { *task_run_count_ptr = *task_run_count_ptr + 1};
                 }
@@ -960,7 +960,7 @@ fn test_schedule_home_states() {
     #[test]
     fn test_stress_schedule_task_states() {
         let n = stress_factor() * 120;
-        foreach _ in range(0, n as int) {
+        for _ in range(0, n as int) {
             test_schedule_home_states();
         }
     }
index a5adb25b526a939bdba14960badcfe2c2186785e..006b777b71b1486168ae54c36a002adbefa4c61f 100644 (file)
@@ -37,7 +37,7 @@ pub fn select<A: Select>(ports: &mut [A]) -> uint {
         fail!("can't select on an empty list");
     }
 
-    foreach (index, port) in ports.mut_iter().enumerate() {
+    for (index, port) in ports.mut_iter().enumerate() {
         if port.optimistic_check() {
             return index;
         }
@@ -53,7 +53,7 @@ pub fn select<A: Select>(ports: &mut [A]) -> uint {
     do sched.deschedule_running_task_and_then |sched, task| {
         let task_handles = task.make_selectable(ports.len());
 
-        foreach (index, (port, task_handle)) in
+        for (index, (port, task_handle)) in
                 ports.mut_iter().zip(task_handles.consume_iter()).enumerate() {
             // If one of the ports has data by now, it will wake the handle.
             if port.block_on(sched, task_handle) {
@@ -66,7 +66,7 @@ pub fn select<A: Select>(ports: &mut [A]) -> uint {
     // Task resumes. Now unblock ourselves from all the ports we blocked on.
     // If the success index wasn't reset, 'take' will just take all of them.
     // Iterate in reverse so the 'earliest' index that's ready gets returned.
-    foreach (index, port) in ports.mut_slice(0, ready_index).mut_rev_iter().enumerate() {
+    for (index, port) in ports.mut_slice(0, ready_index).mut_rev_iter().enumerate() {
         if port.unblock_from() {
             ready_index = index;
         }
@@ -128,7 +128,7 @@ fn select_helper(num_ports: uint, send_on_chans: &[uint]) {
         let (ports, chans) = unzip(from_fn(num_ports, |_| oneshot::<()>()));
         let mut dead_chans = ~[];
         let mut ports = ports;
-        foreach (i, chan) in chans.consume_iter().enumerate() {
+        for (i, chan) in chans.consume_iter().enumerate() {
             if send_on_chans.contains(&i) {
                 chan.send(());
             } else {
@@ -145,7 +145,7 @@ fn select_helper(num_ports: uint, send_on_chans: &[uint]) {
         let (ports, chans) = unzip(from_fn(num_ports, |_| stream::<()>()));
         let mut dead_chans = ~[];
         let mut ports = ports;
-        foreach (i, chan) in chans.consume_iter().enumerate() {
+        for (i, chan) in chans.consume_iter().enumerate() {
             if send_on_chans.contains(&i) {
                 chan.send(());
             } else {
@@ -192,7 +192,7 @@ fn select_stream() {
             let mut ports = ports;
             let mut port = Some(port);
             let order = [5u,0,4,3,2,6,9,8,7,1];
-            foreach &index in order.iter() {
+            for &index in order.iter() {
                 // put the port in the vector at any index
                 util::swap(port.get_mut_ref(), &mut ports[index]);
                 assert!(select(ports) == index);
@@ -272,7 +272,7 @@ fn select_racing_senders_helper(killable: bool, send_on_chans: ~[uint]) {
                     let send_on_chans = send_on_chans.clone();
                     do task::spawn {
                         let mut ports = ~[];
-                        foreach i in range(0u, NUM_CHANS) {
+                        for i in range(0u, NUM_CHANS) {
                             let (p,c) = oneshot();
                             ports.push(p);
                             if send_on_chans.contains(&i) {
index b242ee13fa66807a8ab119d9e3da189bfde4fc38..abafe1cf209c748a2778c321369a9ebf73eb449e 100644 (file)
@@ -27,6 +27,7 @@
 use rt::sched::{Scheduler, SchedHandle};
 use rt::stack::{StackSegment, StackPool};
 use rt::context::Context;
+use unstable::finally::Finally;
 use task::spawn::Taskgroup;
 use cell::Cell;
 
@@ -211,40 +212,34 @@ pub fn take_unwrap_home(&mut self) -> SchedHome {
 
     pub fn run(&mut self, f: &fn()) {
         rtdebug!("run called on task: %u", borrow::to_uint(self));
-        self.unwinder.try(f);
-        // FIXME(#7544): We pass the taskgroup into death so that it can be
-        // dropped while the unkillable counter is set. This should not be
-        // necessary except for an extraneous clone() in task/spawn.rs that
-        // causes a killhandle to get dropped, which mustn't receive a kill
-        // signal since we're outside of the unwinder's try() scope.
-        // { let _ = self.taskgroup.take(); }
-        self.death.collect_failure(!self.unwinder.unwinding, self.taskgroup.take());
-        self.destroy();
-    }
 
-    /// must be called manually before finalization to clean up
-    /// thread-local resources. Some of the routines here expect
-    /// Task to be available recursively so this must be
-    /// called unsafely, without removing Task from
-    /// thread-local-storage.
-    fn destroy(&mut self) {
+        // The only try/catch block in the world. Attempt to run the task's
+        // client-specified code and catch any failures.
+        do self.unwinder.try {
 
-        rtdebug!("DESTROYING TASK: %u", borrow::to_uint(self));
+            // Run the task main function, then do some cleanup.
+            do f.finally {
 
-        do Local::borrow::<Task, ()> |task| {
-            assert!(borrow::ref_eq(task, self));
-        }
+                // Destroy task-local storage. This may run user dtors.
+                match self.storage {
+                    LocalStorage(ptr, Some(ref dtor)) => {
+                        (*dtor)(ptr)
+                    }
+                    _ => ()
+                }
 
-        match self.storage {
-            LocalStorage(ptr, Some(ref dtor)) => {
-                (*dtor)(ptr)
+                // Destroy remaining boxes. Also may run user dtors.
+                unsafe { cleanup::annihilate(); }
             }
-            _ => ()
         }
 
-        // Destroy remaining boxes
-        unsafe { cleanup::annihilate(); }
-
+        // FIXME(#7544): We pass the taskgroup into death so that it can be
+        // dropped while the unkillable counter is set. This should not be
+        // necessary except for an extraneous clone() in task/spawn.rs that
+        // causes a killhandle to get dropped, which mustn't receive a kill
+        // signal since we're outside of the unwinder's try() scope.
+        // { let _ = self.taskgroup.take(); }
+        self.death.collect_failure(!self.unwinder.unwinding, self.taskgroup.take());
         self.destroyed = true;
     }
 
index 66ae085b1a0810bb4b172c666920303cf48941f6..2427da01a0c1c700e966eeaf90843668e25853df 100644 (file)
@@ -16,7 +16,7 @@
 use container::Container;
 use iterator::{Iterator, range};
 use vec::{OwnedVector, MutableVector};
-use super::io::net::ip::{IpAddr, Ipv4, Ipv6};
+use super::io::net::ip::{SocketAddr, Ipv4Addr, Ipv6Addr};
 use rt::sched::Scheduler;
 use unstable::run_in_bare_thread;
 use rt::thread::Thread;
@@ -169,7 +169,7 @@ pub fn run_in_mt_newsched_task(f: ~fn()) {
         let mut handles = ~[];
         let mut scheds = ~[];
 
-        foreach _ in range(0u, nthreads) {
+        for _ in range(0u, nthreads) {
             let loop_ = ~UvEventLoop::new();
             let mut sched = ~Scheduler::new(loop_,
                                             work_queue.clone(),
@@ -184,7 +184,7 @@ pub fn run_in_mt_newsched_task(f: ~fn()) {
         let on_exit: ~fn(bool) = |exit_status| {
             let mut handles = handles.take();
             // Tell schedulers to exit
-            foreach handle in handles.mut_iter() {
+            for handle in handles.mut_iter() {
                 handle.send(Shutdown);
             }
 
@@ -223,7 +223,7 @@ pub fn run_in_mt_newsched_task(f: ~fn()) {
         }
 
         // Wait for schedulers
-        foreach thread in threads.consume_iter() {
+        for thread in threads.consume_iter() {
             thread.join();
         }
     }
@@ -306,13 +306,13 @@ pub fn next_test_port() -> u16 {
 }
 
 /// Get a unique IPv4 localhost:port pair starting at 9600
-pub fn next_test_ip4() -> IpAddr {
-    Ipv4(127, 0, 0, 1, next_test_port())
+pub fn next_test_ip4() -> SocketAddr {
+    SocketAddr { ip: Ipv4Addr(127, 0, 0, 1), port: next_test_port() }
 }
 
 /// Get a unique IPv6 localhost:port pair starting at 9600
-pub fn next_test_ip6() -> IpAddr {
-    Ipv6(0, 0, 0, 0, 0, 0, 0, 1, next_test_port())
+pub fn next_test_ip6() -> SocketAddr {
+    SocketAddr { ip: Ipv6Addr(0, 0, 0, 0, 0, 0, 0, 1), port: next_test_port() }
 }
 
 /*
@@ -346,7 +346,7 @@ fn base_port() -> uint {
 
     let mut final_base = base;
 
-    foreach &(dir, base) in bases.iter() {
+    for &(dir, base) in bases.iter() {
         if path.contains(dir) {
             final_base = base;
             break;
index c014d0abda2a82797ef146fc476240d96a1ee12f..247893f75de0096c2dc89806b0a444b184ad0028 100644 (file)
@@ -166,7 +166,7 @@ fn callback_send(tube: Tube<int>, i: int) {
                 sched.enqueue_blocked_task(task);
             }
 
-            foreach i in range(0, MAX) {
+            for i in range(0, MAX) {
                 let j = tube.recv();
                 assert!(j == i);
             }
index fa5c497a8776d8759d2f6c1a679a17913ce67cb2..ae5e7dd27b5f3188760e3ddd0ba1cfc5e1132591 100644 (file)
@@ -47,7 +47,7 @@
 use cast::transmute;
 use ptr::null;
 use unstable::finally::Finally;
-use rt::io::net::ip::IpAddr;
+use rt::io::net::ip::SocketAddr;
 
 use rt::io::IoError;
 
@@ -128,7 +128,7 @@ fn native_handle(&self) -> *uvll::uv_loop_t {
 pub type FsCallback = ~fn(FsRequest, Option<UvError>);
 pub type TimerCallback = ~fn(TimerWatcher, Option<UvError>);
 pub type AsyncCallback = ~fn(AsyncWatcher, Option<UvError>);
-pub type UdpReceiveCallback = ~fn(UdpWatcher, int, Buf, IpAddr, uint, Option<UvError>);
+pub type UdpReceiveCallback = ~fn(UdpWatcher, int, Buf, SocketAddr, uint, Option<UvError>);
 pub type UdpSendCallback = ~fn(UdpWatcher, Option<UvError>);
 
 
index 773adb3848ad17bab629a964d9fc3d441f3061d0..67d3bbef8a9c6880eb4094b62732f2ca21422a89 100644 (file)
 use rt::uv::{AllocCallback, ConnectionCallback, ReadCallback, UdpReceiveCallback, UdpSendCallback};
 use rt::uv::{Loop, Watcher, Request, UvError, Buf, NativeHandle, NullCallback,
              status_to_maybe_uv_error};
-use rt::io::net::ip::{IpAddr, Ipv4, Ipv6};
+use rt::io::net::ip::{SocketAddr, Ipv4Addr, Ipv6Addr};
 use rt::uv::last_uv_error;
 use vec;
 use str;
 use from_str::{FromStr};
 use num;
 
-pub enum UvIpAddr {
-    UvIpv4(*sockaddr_in),
-    UvIpv6(*sockaddr_in6),
+pub enum UvSocketAddr {
+    UvIpv4SocketAddr(*sockaddr_in),
+    UvIpv6SocketAddr(*sockaddr_in6),
 }
 
-fn sockaddr_to_UvIpAddr(addr: *uvll::sockaddr) -> UvIpAddr {
+fn sockaddr_to_UvSocketAddr(addr: *uvll::sockaddr) -> UvSocketAddr {
     unsafe {
         assert!((is_ip4_addr(addr) || is_ip6_addr(addr)));
         assert!(!(is_ip4_addr(addr) && is_ip6_addr(addr)));
         match addr {
-            _ if is_ip4_addr(addr) => UvIpv4(addr as *uvll::sockaddr_in),
-            _ if is_ip6_addr(addr) => UvIpv6(addr as *uvll::sockaddr_in6),
+            _ if is_ip4_addr(addr) => UvIpv4SocketAddr(addr as *uvll::sockaddr_in),
+            _ if is_ip6_addr(addr) => UvIpv6SocketAddr(addr as *uvll::sockaddr_in6),
             _ => fail!(),
         }
     }
 }
 
-fn ip_as_uv_ip<T>(addr: IpAddr, f: &fn(UvIpAddr) -> T) -> T {
-    let malloc = match addr {
-        Ipv4(*) => malloc_ip4_addr,
-        Ipv6(*) => malloc_ip6_addr,
+fn socket_addr_as_uv_socket_addr<T>(addr: SocketAddr, f: &fn(UvSocketAddr) -> T) -> T {
+    let malloc = match addr.ip {
+        Ipv4Addr(*) => malloc_ip4_addr,
+        Ipv6Addr(*) => malloc_ip6_addr,
     };
-    let wrap = match addr {
-        Ipv4(*) => UvIpv4,
-        Ipv6(*) => UvIpv6,
+    let wrap = match addr.ip {
+        Ipv4Addr(*) => UvIpv4SocketAddr,
+        Ipv6Addr(*) => UvIpv6SocketAddr,
     };
-    let ip_str = match addr {
-        Ipv4(x1, x2, x3, x4, _) =>
-            fmt!("%u.%u.%u.%u", x1 as uint, x2 as uint, x3 as uint, x4 as uint),
-        Ipv6(x1, x2, x3, x4, x5, x6, x7, x8, _) =>
-            fmt!("%x:%x:%x:%x:%x:%x:%x:%x",
-                  x1 as uint, x2 as uint, x3 as uint, x4 as uint,
-                  x5 as uint, x6 as uint, x7 as uint, x8 as uint),
-    };
-    let port = match addr {
-        Ipv4(_, _, _, _, p) | Ipv6(_, _, _, _, _, _, _, _, p) => p as int
-    };
-    let free = match addr {
-        Ipv4(*) => free_ip4_addr,
-        Ipv6(*) => free_ip6_addr,
+    let free = match addr.ip {
+        Ipv4Addr(*) => free_ip4_addr,
+        Ipv6Addr(*) => free_ip6_addr,
     };
 
-    let addr = unsafe { malloc(ip_str, port) };
+    let addr = unsafe { malloc(addr.ip.to_str(), addr.port as int) };
     do (|| {
         f(wrap(addr))
     }).finally {
@@ -72,39 +61,43 @@ fn ip_as_uv_ip<T>(addr: IpAddr, f: &fn(UvIpAddr) -> T) -> T {
     }
 }
 
-fn uv_ip_as_ip<T>(addr: UvIpAddr, f: &fn(IpAddr) -> T) -> T {
+fn uv_socket_addr_as_socket_addr<T>(addr: UvSocketAddr, f: &fn(SocketAddr) -> T) -> T {
     let ip_size = match addr {
-        UvIpv4(*) => 4/*groups of*/ * 3/*digits separated by*/ + 3/*periods*/,
-        UvIpv6(*) => 8/*groups of*/ * 4/*hex digits separated by*/ + 7 /*colons*/,
+        UvIpv4SocketAddr(*) => 4/*groups of*/ * 3/*digits separated by*/ + 3/*periods*/,
+        UvIpv6SocketAddr(*) => 8/*groups of*/ * 4/*hex digits separated by*/ + 7 /*colons*/,
     };
     let ip_name = {
         let buf = vec::from_elem(ip_size + 1 /*null terminated*/, 0u8);
         unsafe {
+            let buf_ptr = vec::raw::to_ptr(buf);
             match addr {
-                UvIpv4(addr) => uvll::ip4_name(addr, vec::raw::to_ptr(buf), ip_size as size_t),
-                UvIpv6(addr) => uvll::ip6_name(addr, vec::raw::to_ptr(buf), ip_size as size_t),
+                UvIpv4SocketAddr(addr) => uvll::ip4_name(addr, buf_ptr, ip_size as size_t),
+                UvIpv6SocketAddr(addr) => uvll::ip6_name(addr, buf_ptr, ip_size as size_t),
             }
         };
         buf
     };
     let ip_port = unsafe {
         let port = match addr {
-            UvIpv4(addr) => uvll::ip4_port(addr),
-            UvIpv6(addr) => uvll::ip6_port(addr),
+            UvIpv4SocketAddr(addr) => uvll::ip4_port(addr),
+            UvIpv6SocketAddr(addr) => uvll::ip6_port(addr),
         };
         port as u16
     };
     let ip_str = str::from_bytes_slice(ip_name).trim_right_chars(&'\x00');
     let ip = match addr {
-        UvIpv4(*) => {
+        UvIpv4SocketAddr(*) => {
             let ip: ~[u8] =
                 ip_str.split_iter('.')
                       .transform(|s: &str| -> u8 { FromStr::from_str(s).unwrap() })
                       .collect();
             assert_eq!(ip.len(), 4);
-            Ipv4(ip[0], ip[1], ip[2], ip[3], ip_port)
+            SocketAddr {
+                ip: Ipv4Addr(ip[0], ip[1], ip[2], ip[3]),
+                port: ip_port
+            }
         },
-        UvIpv6(*) => {
+        UvIpv6SocketAddr(*) => {
             let ip: ~[u16] = {
                 let expand_shorthand_and_convert = |s: &str| -> ~[~[u16]] {
                     let convert_each_segment = |s: &str| -> ~[u16] {
@@ -154,7 +147,10 @@ fn uv_ip_as_ip<T>(addr: UvIpAddr, f: &fn(IpAddr) -> T) -> T {
                 }
             };
             assert_eq!(ip.len(), 8);
-            Ipv6(ip[0], ip[1], ip[2], ip[3], ip[4], ip[5], ip[6], ip[7], ip_port)
+            SocketAddr {
+                ip: Ipv6Addr(ip[0], ip[1], ip[2], ip[3], ip[4], ip[5], ip[6], ip[7]),
+                port: ip_port
+            }
         },
     };
 
@@ -162,9 +158,9 @@ fn uv_ip_as_ip<T>(addr: UvIpAddr, f: &fn(IpAddr) -> T) -> T {
     f(ip)
 }
 
-pub fn uv_ip_to_ip(addr: UvIpAddr) -> IpAddr {
+pub fn uv_socket_addr_to_socket_addr(addr: UvSocketAddr) -> SocketAddr {
     use util;
-    uv_ip_as_ip(addr, util::id)
+    uv_socket_addr_as_socket_addr(addr, util::id)
 }
 
 #[cfg(test)]
@@ -172,7 +168,7 @@ pub fn uv_ip_to_ip(addr: UvIpAddr) -> IpAddr {
 fn test_ip4_conversion() {
     use rt;
     let ip4 = rt::test::next_test_ip4();
-    assert_eq!(ip4, ip_as_uv_ip(ip4, uv_ip_to_ip));
+    assert_eq!(ip4, socket_addr_as_uv_socket_addr(ip4, uv_socket_addr_to_socket_addr));
 }
 
 #[cfg(test)]
@@ -180,7 +176,7 @@ fn test_ip4_conversion() {
 fn test_ip6_conversion() {
     use rt;
     let ip6 = rt::test::next_test_ip6();
-    assert_eq!(ip6, ip_as_uv_ip(ip6, uv_ip_to_ip));
+    assert_eq!(ip6, socket_addr_as_uv_socket_addr(ip6, uv_socket_addr_to_socket_addr));
 }
 
 // uv_stream_t is the parent class of uv_tcp_t, uv_pipe_t, uv_tty_t
@@ -293,12 +289,12 @@ pub fn new(loop_: &Loop) -> TcpWatcher {
         }
     }
 
-    pub fn bind(&mut self, address: IpAddr) -> Result<(), UvError> {
-        do ip_as_uv_ip(address) |addr| {
+    pub fn bind(&mut self, address: SocketAddr) -> Result<(), UvError> {
+        do socket_addr_as_uv_socket_addr(address) |addr| {
             let result = unsafe {
                 match addr {
-                    UvIpv4(addr) => uvll::tcp_bind(self.native_handle(), addr),
-                    UvIpv6(addr) => uvll::tcp_bind6(self.native_handle(), addr),
+                    UvIpv4SocketAddr(addr) => uvll::tcp_bind(self.native_handle(), addr),
+                    UvIpv6SocketAddr(addr) => uvll::tcp_bind6(self.native_handle(), addr),
                 }
             };
             match result {
@@ -308,18 +304,18 @@ pub fn bind(&mut self, address: IpAddr) -> Result<(), UvError> {
         }
     }
 
-    pub fn connect(&mut self, address: IpAddr, cb: ConnectionCallback) {
+    pub fn connect(&mut self, address: SocketAddr, cb: ConnectionCallback) {
         unsafe {
             assert!(self.get_watcher_data().connect_cb.is_none());
             self.get_watcher_data().connect_cb = Some(cb);
 
             let connect_handle = ConnectRequest::new().native_handle();
             rtdebug!("connect_t: %x", connect_handle as uint);
-            do ip_as_uv_ip(address) |addr| {
+            do socket_addr_as_uv_socket_addr(address) |addr| {
                 let result = match addr {
-                    UvIpv4(addr) => uvll::tcp_connect(connect_handle,
+                    UvIpv4SocketAddr(addr) => uvll::tcp_connect(connect_handle,
                                                       self.native_handle(), addr, connect_cb),
-                    UvIpv6(addr) => uvll::tcp_connect6(connect_handle,
+                    UvIpv6SocketAddr(addr) => uvll::tcp_connect6(connect_handle,
                                                        self.native_handle(), addr, connect_cb),
                 };
                 assert_eq!(0, result);
@@ -388,12 +384,12 @@ pub fn new(loop_: &Loop) -> UdpWatcher {
         }
     }
 
-    pub fn bind(&mut self, address: IpAddr) -> Result<(), UvError> {
-        do ip_as_uv_ip(address) |addr| {
+    pub fn bind(&mut self, address: SocketAddr) -> Result<(), UvError> {
+        do socket_addr_as_uv_socket_addr(address) |addr| {
             let result = unsafe {
                 match addr {
-                    UvIpv4(addr) => uvll::udp_bind(self.native_handle(), addr, 0u32),
-                    UvIpv6(addr) => uvll::udp_bind6(self.native_handle(), addr, 0u32),
+                    UvIpv4SocketAddr(addr) => uvll::udp_bind(self.native_handle(), addr, 0u32),
+                    UvIpv6SocketAddr(addr) => uvll::udp_bind6(self.native_handle(), addr, 0u32),
                 }
             };
             match result {
@@ -432,7 +428,7 @@ pub fn recv_start(&mut self, alloc: AllocCallback, cb: UdpReceiveCallback) {
             let mut udp_watcher: UdpWatcher = NativeHandle::from_native_handle(handle);
             let cb = udp_watcher.get_watcher_data().udp_recv_cb.get_ref();
             let status = status_to_maybe_uv_error(udp_watcher, nread as c_int);
-            let addr = uv_ip_to_ip(sockaddr_to_UvIpAddr(addr));
+            let addr = uv_socket_addr_to_socket_addr(sockaddr_to_UvSocketAddr(addr));
             (*cb)(udp_watcher, nread as int, buf, addr, flags as uint, status);
         }
     }
@@ -441,7 +437,7 @@ pub fn recv_stop(&mut self) {
         unsafe { uvll::udp_recv_stop(self.native_handle()); }
     }
 
-    pub fn send(&mut self, buf: Buf, address: IpAddr, cb: UdpSendCallback) {
+    pub fn send(&mut self, buf: Buf, address: SocketAddr, cb: UdpSendCallback) {
         {
             let data = self.get_watcher_data();
             assert!(data.udp_send_cb.is_none());
@@ -449,12 +445,12 @@ pub fn send(&mut self, buf: Buf, address: IpAddr, cb: UdpSendCallback) {
         }
 
         let req = UdpSendRequest::new();
-        do ip_as_uv_ip(address) |addr| {
+        do socket_addr_as_uv_socket_addr(address) |addr| {
             let result = unsafe {
                 match addr {
-                    UvIpv4(addr) => uvll::udp_send(req.native_handle(),
+                    UvIpv4SocketAddr(addr) => uvll::udp_send(req.native_handle(),
                                                    self.native_handle(), [buf], addr, send_cb),
-                    UvIpv6(addr) => uvll::udp_send6(req.native_handle(),
+                    UvIpv6SocketAddr(addr) => uvll::udp_send6(req.native_handle(),
                                                     self.native_handle(), [buf], addr, send_cb),
                 }
             };
@@ -701,7 +697,7 @@ fn listen_ip4() {
                     if status.is_none() {
                         rtdebug!("got %d bytes", nread);
                         let buf = buf.unwrap();
-                        foreach byte in buf.slice(0, nread as uint).iter() {
+                        for byte in buf.slice(0, nread as uint).iter() {
                             assert!(*byte == count as u8);
                             rtdebug!("%u", *byte as uint);
                             count += 1;
@@ -777,7 +773,7 @@ fn listen_ip6() {
                         rtdebug!("got %d bytes", nread);
                         let buf = buf.unwrap();
                         let r = buf.slice(0, nread as uint);
-                        foreach byte in r.iter() {
+                        for byte in r.iter() {
                             assert!(*byte == count as u8);
                             rtdebug!("%u", *byte as uint);
                             count += 1;
@@ -848,7 +844,7 @@ fn udp_recv_ip4() {
                 rtdebug!("got %d bytes", nread);
 
                 let buf = buf.unwrap();
-                foreach &byte in buf.slice(0, nread as uint).iter() {
+                for &byte in buf.slice(0, nread as uint).iter() {
                     assert!(byte == count as u8);
                     rtdebug!("%u", byte as uint);
                     count += 1;
@@ -908,7 +904,7 @@ fn udp_recv_ip6() {
                 rtdebug!("got %d bytes", nread);
 
                 let buf = buf.unwrap();
-                foreach &byte in buf.slice(0, nread as uint).iter() {
+                for &byte in buf.slice(0, nread as uint).iter() {
                     assert!(byte == count as u8);
                     rtdebug!("%u", byte as uint);
                     count += 1;
index 071a90f4a8346531aace430293fb8969cf9bf15a..01d01de54ef20483baa230f55bdcf98079377e68 100644 (file)
@@ -19,7 +19,7 @@
 use ptr;
 use result::*;
 use rt::io::IoError;
-use rt::io::net::ip::{IpAddr, Ipv4, Ipv6};
+use rt::io::net::ip::{SocketAddr, IpAddr};
 use rt::io::{standard_error, OtherIoError};
 use rt::local::Local;
 use rt::rtio::*;
@@ -27,7 +27,7 @@
 use rt::tube::Tube;
 use rt::uv::*;
 use rt::uv::idle::IdleWatcher;
-use rt::uv::net::{UvIpv4, UvIpv6};
+use rt::uv::net::{UvIpv4SocketAddr, UvIpv6SocketAddr};
 use unstable::sync::Exclusive;
 
 #[cfg(test)] use container::Container;
@@ -44,7 +44,7 @@ enum SocketNameKind {
 }
 
 fn socket_name<T, U: Watcher + NativeHandle<*T>>(sk: SocketNameKind,
-                                                 handle: U) -> Result<IpAddr, IoError> {
+                                                 handle: U) -> Result<SocketAddr, IoError> {
 
     let getsockname = match sk {
         TcpPeer => uvll::rust_uv_tcp_getpeername,
@@ -67,9 +67,9 @@ fn socket_name<T, U: Watcher + NativeHandle<*T>>(sk: SocketNameKind,
 
     let addr = unsafe {
         if uvll::is_ip6_addr(r_addr as *uvll::sockaddr) {
-            net::uv_ip_to_ip(UvIpv6(r_addr as *uvll::sockaddr_in6))
+            net::uv_socket_addr_to_socket_addr(UvIpv6SocketAddr(r_addr as *uvll::sockaddr_in6))
         } else {
-            net::uv_ip_to_ip(UvIpv4(r_addr as *uvll::sockaddr_in))
+            net::uv_socket_addr_to_socket_addr(UvIpv4SocketAddr(r_addr as *uvll::sockaddr_in))
         }
     };
 
@@ -244,7 +244,7 @@ impl IoFactory for UvIoFactory {
     // Connect to an address and return a new stream
     // NB: This blocks the task waiting on the connection.
     // It would probably be better to return a future
-    fn tcp_connect(&mut self, addr: IpAddr) -> Result<~RtioTcpStreamObject, IoError> {
+    fn tcp_connect(&mut self, addr: SocketAddr) -> Result<~RtioTcpStreamObject, IoError> {
         // Create a cell in the task to hold the result. We will fill
         // the cell before resuming the task.
         let result_cell = Cell::new_empty();
@@ -291,7 +291,7 @@ fn tcp_connect(&mut self, addr: IpAddr) -> Result<~RtioTcpStreamObject, IoError>
         return result_cell.take();
     }
 
-    fn tcp_bind(&mut self, addr: IpAddr) -> Result<~RtioTcpListenerObject, IoError> {
+    fn tcp_bind(&mut self, addr: SocketAddr) -> Result<~RtioTcpListenerObject, IoError> {
         let mut watcher = TcpWatcher::new(self.uv_loop());
         match watcher.bind(addr) {
             Ok(_) => Ok(~UvTcpListener::new(watcher)),
@@ -309,7 +309,7 @@ fn tcp_bind(&mut self, addr: IpAddr) -> Result<~RtioTcpListenerObject, IoError>
         }
     }
 
-    fn udp_bind(&mut self, addr: IpAddr) -> Result<~RtioUdpSocketObject, IoError> {
+    fn udp_bind(&mut self, addr: SocketAddr) -> Result<~RtioUdpSocketObject, IoError> {
         let mut watcher = UdpWatcher::new(self.uv_loop());
         match watcher.bind(addr) {
             Ok(_) => Ok(~UvUdpSocket(watcher)),
@@ -365,7 +365,7 @@ fn drop(&self) {
 }
 
 impl RtioSocket for UvTcpListener {
-    fn socket_name(&mut self) -> Result<IpAddr, IoError> {
+    fn socket_name(&mut self) -> Result<SocketAddr, IoError> {
         socket_name(Tcp, self.watcher)
     }
 }
@@ -445,7 +445,7 @@ fn drop(&self) {
 }
 
 impl RtioSocket for UvTcpStream {
-    fn socket_name(&mut self) -> Result<IpAddr, IoError> {
+    fn socket_name(&mut self) -> Result<SocketAddr, IoError> {
         socket_name(Tcp, **self)
     }
 }
@@ -519,7 +519,7 @@ fn write(&mut self, buf: &[u8]) -> Result<(), IoError> {
         return result_cell.take();
     }
 
-    fn peer_name(&mut self) -> Result<IpAddr, IoError> {
+    fn peer_name(&mut self) -> Result<SocketAddr, IoError> {
         socket_name(TcpPeer, **self)
     }
 
@@ -586,15 +586,15 @@ fn drop(&self) {
 }
 
 impl RtioSocket for UvUdpSocket {
-    fn socket_name(&mut self) -> Result<IpAddr, IoError> {
+    fn socket_name(&mut self) -> Result<SocketAddr, IoError> {
         socket_name(Udp, **self)
     }
 }
 
 impl RtioUdpSocket for UvUdpSocket {
-    fn recvfrom(&mut self, buf: &mut [u8]) -> Result<(uint, IpAddr), IoError> {
+    fn recvfrom(&mut self, buf: &mut [u8]) -> Result<(uint, SocketAddr), IoError> {
         let result_cell = Cell::new_empty();
-        let result_cell_ptr: *Cell<Result<(uint, IpAddr), IoError>> = &result_cell;
+        let result_cell_ptr: *Cell<Result<(uint, SocketAddr), IoError>> = &result_cell;
 
         let scheduler = Local::take::<Scheduler>();
         let buf_ptr: *&mut [u8] = &buf;
@@ -626,7 +626,7 @@ fn recvfrom(&mut self, buf: &mut [u8]) -> Result<(uint, IpAddr), IoError> {
         return result_cell.take();
     }
 
-    fn sendto(&mut self, buf: &[u8], dst: IpAddr) -> Result<(), IoError> {
+    fn sendto(&mut self, buf: &[u8], dst: SocketAddr) -> Result<(), IoError> {
         let result_cell = Cell::new_empty();
         let result_cell_ptr: *Cell<Result<(), IoError>> = &result_cell;
         let scheduler = Local::take::<Scheduler>();
@@ -653,17 +653,8 @@ fn sendto(&mut self, buf: &[u8], dst: IpAddr) -> Result<(), IoError> {
     }
 
     fn join_multicast(&mut self, multi: IpAddr) -> Result<(), IoError> {
-        let ip_str = match multi {
-            Ipv4(x1, x2, x3, x4, _) =>
-                fmt!("%u.%u.%u.%u", x1 as uint, x2 as uint, x3 as uint, x4 as uint),
-            Ipv6(x1, x2, x3, x4, x5, x6, x7, x8, _) =>
-                fmt!("%x:%x:%x:%x:%x:%x:%x:%x",
-                      x1 as uint, x2 as uint, x3 as uint, x4 as uint,
-                      x5 as uint, x6 as uint, x7 as uint, x8 as uint),
-        };
-
         let r = unsafe {
-            do ip_str.to_c_str().with_ref |m_addr| {
+            do multi.to_str().to_c_str().with_ref |m_addr| {
                 uvll::udp_set_membership(self.native_handle(), m_addr,
                                          ptr::null(), uvll::UV_JOIN_GROUP)
             }
@@ -676,17 +667,8 @@ fn join_multicast(&mut self, multi: IpAddr) -> Result<(), IoError> {
     }
 
     fn leave_multicast(&mut self, multi: IpAddr) -> Result<(), IoError> {
-        let ip_str = match multi {
-            Ipv4(x1, x2, x3, x4, _) =>
-                fmt!("%u.%u.%u.%u", x1 as uint, x2 as uint, x3 as uint, x4 as uint),
-            Ipv6(x1, x2, x3, x4, x5, x6, x7, x8, _) =>
-                fmt!("%x:%x:%x:%x:%x:%x:%x:%x",
-                      x1 as uint, x2 as uint, x3 as uint, x4 as uint,
-                      x5 as uint, x6 as uint, x7 as uint, x8 as uint),
-        };
-
         let r = unsafe {
-            do ip_str.to_c_str().with_ref |m_addr| {
+            do multi.to_str().to_c_str().with_ref |m_addr| {
                 uvll::udp_set_membership(self.native_handle(), m_addr,
                                          ptr::null(), uvll::UV_LEAVE_GROUP)
             }
@@ -843,7 +825,7 @@ fn test_simple_tcp_server_and_client() {
                 let mut buf = [0, .. 2048];
                 let nread = stream.read(buf).unwrap();
                 assert_eq!(nread, 8);
-                foreach i in range(0u, nread) {
+                for i in range(0u, nread) {
                     rtdebug!("%u", buf[i] as uint);
                     assert_eq!(buf[i], i as u8);
                 }
@@ -873,7 +855,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);
-                foreach i in range(0u, nread) {
+                for i in range(0u, nread) {
                     rtdebug!("%u", buf[i] as uint);
                     assert_eq!(buf[i], i as u8);
                 }
@@ -908,7 +890,7 @@ fn test_read_and_block() {
 
             while current < expected {
                 let nread = stream.read(buf).unwrap();
-                foreach i in range(0u, nread) {
+                for i in range(0u, nread) {
                     let val = buf[i] as uint;
                     assert_eq!(val, current % 8);
                     current += 1;
@@ -973,7 +955,7 @@ fn test_read_read_read() {
                     let nread = stream.read(buf).unwrap();
                     rtdebug!("read %u bytes", nread as uint);
                     total_bytes_read += nread;
-                    foreach i in range(0u, nread) {
+                    for i in range(0u, nread) {
                         assert_eq!(buf[i], 1);
                     }
                 }
@@ -1065,7 +1047,7 @@ fn test_udp_many_read() {
                     let (nread, src) = res.unwrap();
                     assert_eq!(src, server_out_addr);
                     total_bytes_recv += nread;
-                    foreach i in range(0u, nread) {
+                    for i in range(0u, nread) {
                         assert_eq!(buf[i], 1);
                     }
                 }
index d0f7f307088c4e6ca835e350d507cf4f161b7ce6..72b3399c404b9fef018432a436b2c4adaf2952ca 100644 (file)
@@ -176,9 +176,9 @@ pub fn new(prog: &str, args: &[~str], options: ProcessOptions)
                                    in_fd, out_fd, err_fd);
 
         unsafe {
-            foreach pipe in in_pipe.iter() { libc::close(pipe.input); }
-            foreach pipe in out_pipe.iter() { libc::close(pipe.out); }
-            foreach pipe in err_pipe.iter() { libc::close(pipe.out); }
+            for pipe in in_pipe.iter() { libc::close(pipe.input); }
+            for pipe in out_pipe.iter() { libc::close(pipe.out); }
+            for pipe in err_pipe.iter() { libc::close(pipe.out); }
         }
 
         Process {
@@ -323,7 +323,7 @@ fn fclose_and_null(f_opt: &mut Option<*libc::FILE>) {
      * If the child has already been finished then the exit code is returned.
      */
     pub fn finish(&mut self) -> int {
-        foreach &code in self.exit_code.iter() {
+        for &code in self.exit_code.iter() {
             return code;
         }
         self.close_input();
@@ -522,7 +522,7 @@ fn spawn_process_os(prog: &str, args: &[~str],
         CloseHandle(si.hStdOutput);
         CloseHandle(si.hStdError);
 
-        foreach msg in create_err.iter() {
+        for msg in create_err.iter() {
             fail!("failure in CreateProcess: %s", *msg);
         }
 
@@ -578,7 +578,7 @@ fn zeroed_process_information() -> libc::types::os::arch::extra::PROCESS_INFORMA
 pub fn make_command_line(prog: &str, args: &[~str]) -> ~str {
     let mut cmd = ~"";
     append_arg(&mut cmd, prog);
-    foreach arg in args.iter() {
+    for arg in args.iter() {
         cmd.push_char(' ');
         append_arg(&mut cmd, *arg);
     }
@@ -589,7 +589,7 @@ fn append_arg(cmd: &mut ~str, arg: &str) {
         if quote {
             cmd.push_char('"');
         }
-        foreach i in range(0u, arg.len()) {
+        for i in range(0u, arg.len()) {
             append_char_at(cmd, arg, i);
         }
         if quote {
@@ -700,7 +700,7 @@ fn with_argv<T>(prog: &str, args: &[~str], cb: &fn(**libc::c_char) -> T) -> T {
 
     tmps.push(prog.to_c_str());
 
-    foreach arg in args.iter() {
+    for arg in args.iter() {
         tmps.push(arg.to_c_str());
     }
 
@@ -726,7 +726,7 @@ fn with_envp<T>(env: Option<&[(~str, ~str)]>, cb: &fn(*c_void) -> T) -> T {
         Some(env) => {
             let mut tmps = vec::with_capacity(env.len());
 
-            foreach pair in env.iter() {
+            for pair in env.iter() {
                 // Use of match here is just to workaround limitations
                 // in the stage0 irrefutable pattern impl.
                 let kv = fmt!("%s=%s", pair.first(), pair.second());
@@ -756,7 +756,7 @@ fn with_envp<T>(env: Option<&[(~str, ~str)]>, cb: &fn(*mut c_void) -> T) -> T {
         Some(env) => {
             let mut blk = ~[];
 
-            foreach pair in env.iter() {
+            for pair in env.iter() {
                 let kv = fmt!("%s=%s", pair.first(), pair.second());
                 blk.push_all(kv.as_bytes());
                 blk.push(0);
@@ -1314,7 +1314,7 @@ fn test_inherit_env() {
         let output = str::from_bytes(prog.finish_with_output().output);
 
         let r = os::env();
-        foreach &(ref k, ref v) in r.iter() {
+        for &(ref k, ref v) in r.iter() {
             // don't check windows magical empty-named variables
             assert!(k.is_empty() || output.contains(fmt!("%s=%s", *k, *v)));
         }
@@ -1328,7 +1328,7 @@ fn test_inherit_env() {
         let output = str::from_bytes(prog.finish_with_output().output);
 
         let r = os::env();
-        foreach &(k, v) in r.iter() {
+        for &(k, v) in r.iter() {
             // don't check android RANDOM variables
             if k != ~"RANDOM" {
                 assert!(output.contains(fmt!("%s=%s", k, v)) ||
index 5796b541186e55cbf3401772e8d5505fcee124bf..4a5fa82a22695d5cc268fd9bd7eaf5b8c4132e41 100644 (file)
@@ -162,7 +162,7 @@ pub fn from_char(ch: char) -> ~str {
 pub fn from_chars(chs: &[char]) -> ~str {
     let mut buf = ~"";
     buf.reserve(chs.len());
-    foreach ch in chs.iter() {
+    for ch in chs.iter() {
         buf.push_char(*ch)
     }
     buf
@@ -192,7 +192,7 @@ pub fn concat(&self) -> ~str {
         unsafe {
             do s.as_mut_buf |buf, _| {
                 let mut buf = buf;
-                foreach ss in self.iter() {
+                for ss in self.iter() {
                     do ss.as_slice().as_imm_buf |ssbuf, sslen| {
                         let sslen = sslen - 1;
                         ptr::copy_memory(buf, ssbuf, sslen);
@@ -217,7 +217,7 @@ pub fn concat(&self) -> ~str {
         unsafe {
             do s.as_mut_buf |buf, _| {
                 let mut buf = buf;
-                foreach ss in self.iter() {
+                for ss in self.iter() {
                     do ss.as_slice().as_imm_buf |ssbuf, sslen| {
                         ptr::copy_memory(buf, ssbuf, sslen);
                         buf = buf.offset(sslen as int);
@@ -250,7 +250,7 @@ pub fn connect(&self, sep: &str) -> ~str {
                 do sep.as_imm_buf |sepbuf, seplen| {
                     let seplen = seplen - 1;
                     let mut buf = cast::transmute_mut_unsafe(buf);
-                    foreach ss in self.iter() {
+                    for ss in self.iter() {
                         do ss.as_slice().as_imm_buf |ssbuf, sslen| {
                             let sslen = sslen - 1;
                             if first {
@@ -290,7 +290,7 @@ pub fn connect(&self, sep: &str) -> ~str {
             do s.as_mut_buf |buf, _| {
                 do sep.as_imm_buf |sepbuf, seplen| {
                     let mut buf = buf;
-                    foreach ss in self.iter() {
+                    for ss in self.iter() {
                         do ss.as_slice().as_imm_buf |ssbuf, sslen| {
                             if first {
                                 first = false;
@@ -564,7 +564,7 @@ fn next(&mut self) -> Option<&'self str> {
 pub fn replace(s: &str, from: &str, to: &str) -> ~str {
     let mut result = ~"";
     let mut last_end = 0;
-    foreach (start, end) in s.matches_index_iter(from) {
+    for (start, end) in s.matches_index_iter(from) {
         result.push_str(unsafe{raw::slice_bytes(s, last_end, start)});
         result.push_str(to);
         last_end = end;
@@ -673,7 +673,7 @@ pub fn eq(a: &~str, b: &~str) -> bool {
 // Utility used by various searching functions
 fn match_at<'a,'b>(haystack: &'a str, needle: &'b str, at: uint) -> bool {
     let mut i = at;
-    foreach c in needle.byte_iter() { if haystack[i] != c { return false; } i += 1u; }
+    for c in needle.byte_iter() { if haystack[i] != c { return false; } i += 1u; }
     return true;
 }
 
@@ -681,51 +681,63 @@ fn match_at<'a,'b>(haystack: &'a str, needle: &'b str, at: uint) -> bool {
 Section: Misc
 */
 
-// Return the initial codepoint accumulator for the first byte.
-// The first byte is special, only want bottom 5 bits for width 2, 4 bits
-// for width 3, and 3 bits for width 4
-macro_rules! utf8_first_byte(
-    ($byte:expr, $width:expr) => (($byte & (0x7F >> $width)) as uint)
-)
-
-// return the value of $ch updated with continuation byte $byte
-macro_rules! utf8_acc_cont_byte(
-    ($ch:expr, $byte:expr) => (($ch << 6) | ($byte & 63u8) as uint)
-)
-
 /// Determines if a vector of bytes contains valid UTF-8
 pub fn is_utf8(v: &[u8]) -> bool {
     let mut i = 0u;
     let total = v.len();
+    fn unsafe_get(xs: &[u8], i: uint) -> u8 {
+        unsafe { *xs.unsafe_ref(i) }
+    }
     while i < total {
-        if v[i] < 128u8 {
+        let v_i = unsafe_get(v, i);
+        if v_i < 128u8 {
             i += 1u;
         } else {
-            let w = utf8_char_width(v[i]);
+            let w = utf8_char_width(v_i);
             if w == 0u { return false; }
 
             let nexti = i + w;
             if nexti > total { return false; }
-            // 1. Make sure the correct number of continuation bytes are present
-            // 2. Check codepoint ranges (deny overlong encodings)
-            //    2-byte encoding is for codepoints  \u0080 to  \u07ff
-            //    3-byte encoding is for codepoints  \u0800 to  \uffff
-            //    4-byte encoding is for codepoints \u10000 to \u10ffff
-
-            //    2-byte encodings are correct if the width and continuation match up
-            if v[i + 1] & 192u8 != TAG_CONT_U8 { return false; }
-            if w > 2 {
-                let mut ch;
-                ch = utf8_first_byte!(v[i], w);
-                ch = utf8_acc_cont_byte!(ch, v[i + 1]);
-                if v[i + 2] & 192u8 != TAG_CONT_U8 { return false; }
-                ch = utf8_acc_cont_byte!(ch, v[i + 2]);
-                if w == 3 && ch < MAX_TWO_B { return false; }
-                if w > 3 {
-                    if v[i + 3] & 192u8 != TAG_CONT_U8 { return false; }
-                    ch = utf8_acc_cont_byte!(ch, v[i + 3]);
-                    if ch < MAX_THREE_B || ch >= MAX_UNICODE { return false; }
-                }
+
+            // 2-byte encoding is for codepoints  \u0080 to  \u07ff
+            //        first  C2 80        last DF BF
+            // 3-byte encoding is for codepoints  \u0800 to  \uffff
+            //        first  E0 A0 80     last EF BF BF
+            // 4-byte encoding is for codepoints \u10000 to \u10ffff
+            //        first  F0 90 80 80  last F4 8F BF BF
+            //
+            // Use the UTF-8 syntax from the RFC
+            //
+            // https://tools.ietf.org/html/rfc3629
+            // UTF8-1      = %x00-7F
+            // UTF8-2      = %xC2-DF UTF8-tail
+            // UTF8-3      = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
+            //               %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
+            // UTF8-4      = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
+            //               %xF4 %x80-8F 2( UTF8-tail )
+            // UTF8-tail   = %x80-BF
+            // --
+            // This code allows surrogate pairs: \uD800 to \uDFFF -> ED A0 80 to ED BF BF
+            match w {
+                2 => if unsafe_get(v, i + 1) & 192u8 != TAG_CONT_U8 {
+                    return false
+                },
+                3 => match (v_i,
+                            unsafe_get(v, i + 1),
+                            unsafe_get(v, i + 2) & 192u8) {
+                    (0xE0        , 0xA0 .. 0xBF, TAG_CONT_U8) => (),
+                    (0xE1 .. 0xEF, 0x80 .. 0xBF, TAG_CONT_U8) => (),
+                    _ => return false,
+                },
+                _ => match (v_i,
+                            unsafe_get(v, i + 1),
+                            unsafe_get(v, i + 2) & 192u8,
+                            unsafe_get(v, i + 3) & 192u8) {
+                    (0xF0        , 0x90 .. 0xBF, TAG_CONT_U8, TAG_CONT_U8) => (),
+                    (0xF1 .. 0xF3, 0x80 .. 0xBF, TAG_CONT_U8, TAG_CONT_U8) => (),
+                    (0xF4        , 0x80 .. 0x8F, TAG_CONT_U8, TAG_CONT_U8) => (),
+                    _ => return false,
+                },
             }
 
             i = nexti;
@@ -873,6 +885,18 @@ pub struct CharRange {
     next: uint
 }
 
+// Return the initial codepoint accumulator for the first byte.
+// The first byte is special, only want bottom 5 bits for width 2, 4 bits
+// for width 3, and 3 bits for width 4
+macro_rules! utf8_first_byte(
+    ($byte:expr, $width:expr) => (($byte & (0x7F >> $width)) as uint)
+)
+
+// return the value of $ch updated with continuation byte $byte
+macro_rules! utf8_acc_cont_byte(
+    ($ch:expr, $byte:expr) => (($ch << 6) | ($byte & 63u8) as uint)
+)
+
 // UTF-8 tags and ranges
 priv static TAG_CONT_U8: u8 = 128u8;
 priv static TAG_CONT: uint = 128u;
@@ -1053,7 +1077,7 @@ pub unsafe fn push_byte(s: &mut ~str, b: u8) {
     unsafe fn push_bytes(s: &mut ~str, bytes: &[u8]) {
         let new_len = s.len() + bytes.len();
         s.reserve_at_least(new_len);
-        foreach byte in bytes.iter() { push_byte(&mut *s, *byte); }
+        for byte in bytes.iter() { push_byte(&mut *s, *byte); }
     }
 
     /// Removes the last byte from a string and returns it. (Not UTF-8 safe).
@@ -1137,7 +1161,7 @@ fn add(&self, rhs: & &'self str) -> ~str {
     impl<'self> TotalOrd for &'self str {
         #[inline]
         fn cmp(&self, other: & &'self str) -> Ordering {
-            foreach (s_b, o_b) in self.byte_iter().zip(other.byte_iter()) {
+            for (s_b, o_b) in self.byte_iter().zip(other.byte_iter()) {
                 match s_b.cmp(&o_b) {
                     Greater => return Greater,
                     Less => return Less,
@@ -1657,7 +1681,7 @@ fn ends_with(&self, needle: &str) -> bool {
     fn escape_default(&self) -> ~str {
         let mut out: ~str = ~"";
         out.reserve_at_least(self.len());
-        foreach c in self.iter() {
+        for c in self.iter() {
             do c.escape_default |c| {
                 out.push_char(c);
             }
@@ -1669,7 +1693,7 @@ fn escape_default(&self) -> ~str {
     fn escape_unicode(&self) -> ~str {
         let mut out: ~str = ~"";
         out.reserve_at_least(self.len());
-        foreach c in self.iter() {
+        for c in self.iter() {
             do c.escape_unicode |c| {
                 out.push_char(c);
             }
@@ -1771,7 +1795,7 @@ fn trim_right_chars<C: CharEq>(&self, to_trim: &C) -> &'self str {
     pub fn replace(&self, from: &str, to: &str) -> ~str {
         let mut result = ~"";
         let mut last_end = 0;
-        foreach (start, end) in self.matches_index_iter(from) {
+        for (start, end) in self.matches_index_iter(from) {
             result.push_str(unsafe{raw::slice_bytes(*self, last_end, start)});
             result.push_str(to);
             last_end = end;
@@ -1837,7 +1861,7 @@ fn to_managed(&self) -> @str {
     /// Converts to a vector of `u16` encoded as UTF-16.
     fn to_utf16(&self) -> ~[u16] {
         let mut u = ~[];
-        foreach ch in self.iter() {
+        for ch in self.iter() {
             // Arithmetic with u32 literals is easier on the eyes than chars.
             let mut ch = ch as u32;
 
@@ -1999,12 +2023,12 @@ fn as_bytes(&self) -> &'self [u8] {
     /// or `None` if there is no match
     fn find<C: CharEq>(&self, search: C) -> Option<uint> {
         if search.only_ascii() {
-            foreach (i, b) in self.byte_iter().enumerate() {
+            for (i, b) in self.byte_iter().enumerate() {
                 if search.matches(b as char) { return Some(i) }
             }
         } else {
             let mut index = 0;
-            foreach c in self.iter() {
+            for c in self.iter() {
                 if search.matches(c) { return Some(index); }
                 index += c.len_utf8_bytes();
             }
@@ -2022,12 +2046,12 @@ fn find<C: CharEq>(&self, search: C) -> Option<uint> {
     fn rfind<C: CharEq>(&self, search: C) -> Option<uint> {
         let mut index = self.len();
         if search.only_ascii() {
-            foreach b in self.byte_rev_iter() {
+            for b in self.byte_rev_iter() {
                 index -= 1;
                 if search.matches(b as char) { return Some(index); }
             }
         } else {
-            foreach c in self.rev_iter() {
+            for c in self.rev_iter() {
                 index -= c.len_utf8_bytes();
                 if search.matches(c) { return Some(index); }
             }
@@ -2118,7 +2142,7 @@ fn slice_shift_char(&self) -> (char, &'self str) {
     /// Apply a function to each character.
     fn map_chars(&self, ff: &fn(char) -> char) -> ~str {
         let mut result = with_capacity(self.len());
-        foreach cc in self.iter() {
+        for cc in self.iter() {
             result.push_char(ff(cc));
         }
         result
@@ -2134,12 +2158,12 @@ fn lev_distance(&self, t: &str) -> uint {
 
         let mut dcol = vec::from_fn(tlen + 1, |x| x);
 
-        foreach (i, sc) in self.iter().enumerate() {
+        for (i, sc) in self.iter().enumerate() {
 
             let mut current = i;
             dcol[0] = current + 1;
 
-            foreach (j, tc) in t.iter().enumerate() {
+            for (j, tc) in t.iter().enumerate() {
 
                 let next = dcol[j + 1];
 
@@ -2166,7 +2190,7 @@ fn lev_distance(&self, t: &str) -> uint {
     /// ~~~ {.rust}
     /// let string = "a\nb\nc";
     /// let mut lines = ~[];
-    /// foreach line in string.line_iter() { lines.push(line) }
+    /// for line in string.line_iter() { lines.push(line) }
     ///
     /// assert!(string.subslice_offset(lines[0]) == 0); // &"a"
     /// assert!(string.subslice_offset(lines[1]) == 2); // &"b"
@@ -2507,7 +2531,7 @@ fn extend(&mut self, iterator: &mut T) {
         let (lower, _) = iterator.size_hint();
         let reserve = lower + self.len();
         self.reserve_at_least(reserve);
-        foreach ch in *iterator {
+        for ch in *iterator {
             self.push_char(ch)
         }
     }
@@ -3100,13 +3124,21 @@ fn test_from_bytes() {
     }
 
     #[test]
-    fn test_is_utf8_deny_overlong() {
+    fn test_is_utf8() {
         assert!(!is_utf8([0xc0, 0x80]));
         assert!(!is_utf8([0xc0, 0xae]));
         assert!(!is_utf8([0xe0, 0x80, 0x80]));
         assert!(!is_utf8([0xe0, 0x80, 0xaf]));
         assert!(!is_utf8([0xe0, 0x81, 0x81]));
         assert!(!is_utf8([0xf0, 0x82, 0x82, 0xac]));
+        assert!(!is_utf8([0xf4, 0x90, 0x80, 0x80]));
+
+        assert!(is_utf8([0xC2, 0x80]));
+        assert!(is_utf8([0xDF, 0xBF]));
+        assert!(is_utf8([0xE0, 0xA0, 0x80]));
+        assert!(is_utf8([0xEF, 0xBF, 0xBF]));
+        assert!(is_utf8([0xF0, 0x90, 0x80, 0x80]));
+        assert!(is_utf8([0xF4, 0x8F, 0xBF, 0xBF]));
     }
 
 
@@ -3238,7 +3270,7 @@ fn test_subslice_offset() {
 
         let string = "a\nb\nc";
         let mut lines = ~[];
-        foreach line in string.line_iter() { lines.push(line) }
+        for line in string.line_iter() { lines.push(line) }
         assert_eq!(string.subslice_offset(lines[0]), 0);
         assert_eq!(string.subslice_offset(lines[1]), 2);
         assert_eq!(string.subslice_offset(lines[2]), 4);
@@ -3342,7 +3374,7 @@ fn test_utf16() {
                 0xd801_u16, 0xdc95_u16, 0xd801_u16, 0xdc86_u16,
                 0x000a_u16 ]) ];
 
-        foreach p in pairs.iter() {
+        for p in pairs.iter() {
             let (s, u) = (*p).clone();
             assert!(s.to_utf16() == u);
             assert!(from_utf16(u) == s);
@@ -3356,7 +3388,7 @@ fn test_char_at() {
         let s = ~"ศไทย中华Việt Nam";
         let v = ~['ศ','ไ','ท','ย','中','华','V','i','ệ','t',' ','N','a','m'];
         let mut pos = 0;
-        foreach ch in v.iter() {
+        for ch in v.iter() {
             assert!(s.char_at(pos) == *ch);
             pos += from_char(*ch).len();
         }
@@ -3367,7 +3399,7 @@ fn test_char_at_reverse() {
         let s = ~"ศไทย中华Việt Nam";
         let v = ~['ศ','ไ','ท','ย','中','华','V','i','ệ','t',' ','N','a','m'];
         let mut pos = s.len();
-        foreach ch in v.rev_iter() {
+        for ch in v.rev_iter() {
             assert!(s.char_at_reverse(pos) == *ch);
             pos -= from_char(*ch).len();
         }
@@ -3459,7 +3491,7 @@ fn test_iterator() {
         let mut pos = 0;
         let mut it = s.iter();
 
-        foreach c in it {
+        for c in it {
             assert_eq!(c, v[pos]);
             pos += 1;
         }
@@ -3475,7 +3507,7 @@ fn test_rev_iterator() {
         let mut pos = 0;
         let mut it = s.rev_iter();
 
-        foreach c in it {
+        for c in it {
             assert_eq!(c, v[pos]);
             pos += 1;
         }
@@ -3492,7 +3524,7 @@ fn test_byte_iterator() {
         ];
         let mut pos = 0;
 
-        foreach b in s.byte_iter() {
+        for b in s.byte_iter() {
             assert_eq!(b, v[pos]);
             pos += 1;
         }
@@ -3508,7 +3540,7 @@ fn test_byte_rev_iterator() {
         ];
         let mut pos = v.len();
 
-        foreach b in s.byte_rev_iter() {
+        for b in s.byte_rev_iter() {
             pos -= 1;
             assert_eq!(b, v[pos]);
         }
@@ -3524,7 +3556,7 @@ fn test_char_offset_iterator() {
         let mut pos = 0;
         let mut it = s.char_offset_iter();
 
-        foreach c in it {
+        for c in it {
             assert_eq!(c, (p[pos], v[pos]));
             pos += 1;
         }
@@ -3542,7 +3574,7 @@ fn test_char_offset_rev_iterator() {
         let mut pos = 0;
         let mut it = s.char_offset_rev_iter();
 
-        foreach c in it {
+        for c in it {
             assert_eq!(c, (p[pos], v[pos]));
             pos += 1;
         }
index f1ffa1b3bce16c5ca7ddd35e1b62eedb24b15d23..5ffb7efab314e0563689fccea535f635853b36fa 100644 (file)
@@ -96,7 +96,7 @@ unsafe fn to_ascii_nocheck(&self) -> &'self[Ascii] {
 
     #[inline]
     fn is_ascii(&self) -> bool {
-        foreach b in self.iter() {
+        for b in self.iter() {
             if !b.is_ascii() { return false; }
         }
         true
index 69c4bb20caff23cb67fe94121da1ce94d07590cd..95d3cbaf89b10185de74ca9fda0c27a8f6244c8d 100644 (file)
@@ -167,7 +167,7 @@ pub unsafe fn local_pop<T: 'static>(handle: Handle,
     let map = get_local_map(handle);
     let key_value = key_to_key_value(key);
 
-    foreach entry in map.mut_iter() {
+    for entry in map.mut_iter() {
         match *entry {
             Some((k, _, loan)) if k == key_value => {
                 if loan != NoLoan {
index e6f115958fd40fd843f35b7614fae60ce5a89f20..3bf2f255f57511ab2bca818ec0a4edfe7f2086ad 100644 (file)
@@ -299,7 +299,7 @@ fn iterate(ancestors:       &mut AncestorList,
                         // safe to skip it. This will leave our TaskHandle
                         // hanging around in the group even after it's freed,
                         // but that's ok because, by virtue of the group being
-                        // dead, nobody will ever kill-all (foreach) over it.)
+                        // dead, nobody will ever kill-all (for) over it.)
                         if nobe_is_dead { true } else { forward_blk(tg_opt) }
                     };
                 /*##########################################################*
@@ -357,7 +357,7 @@ fn drop(&self) {
             // If we are failing, the whole taskgroup needs to die.
             do RuntimeGlue::with_task_handle_and_failing |me, failing| {
                 if failing {
-                    foreach x in this.notifier.mut_iter() {
+                    for x in this.notifier.mut_iter() {
                         x.failed = true;
                     }
                     // Take everybody down with us.
@@ -387,7 +387,7 @@ pub fn Taskgroup(tasks: TaskGroupArc,
        ancestors: AncestorList,
        is_main: bool,
        mut notifier: Option<AutoNotify>) -> Taskgroup {
-    foreach x in notifier.mut_iter() {
+    for x in notifier.mut_iter() {
         x.failed = false;
     }
 
@@ -465,13 +465,13 @@ fn kill_taskgroup(state: TaskGroupInner, me: &TaskHandle, is_main: bool) {
         if newstate.is_some() {
             let TaskGroupData { members: members, descendants: descendants } =
                 newstate.unwrap();
-            foreach sibling in members.consume() {
+            for sibling in members.consume() {
                 // Skip self - killing ourself won't do much good.
                 if &sibling != me {
                     RuntimeGlue::kill_task(sibling);
                 }
             }
-            foreach child in descendants.consume() {
+            for child in descendants.consume() {
                 assert!(&child != me);
                 RuntimeGlue::kill_task(child);
             }
index b87a165706516ff3ae56256284521d06497d87ff..4649aac08b9e0aabc940e4b87720c201147d4d86 100644 (file)
@@ -56,7 +56,7 @@ impl<A:ToStr+Hash+Eq, B:ToStr> ToStr for HashMap<A, B> {
     fn to_str(&self) -> ~str {
         let mut acc = ~"{";
         let mut first = true;
-        foreach (key, value) in self.iter() {
+        for (key, value) in self.iter() {
             if first {
                 first = false;
             }
@@ -77,7 +77,7 @@ impl<A:ToStr+Hash+Eq> ToStr for HashSet<A> {
     fn to_str(&self) -> ~str {
         let mut acc = ~"{";
         let mut first = true;
-        foreach element in self.iter() {
+        for element in self.iter() {
             if first {
                 first = false;
             }
@@ -126,7 +126,7 @@ impl<'self,A:ToStr> ToStr for &'self [A] {
     fn to_str(&self) -> ~str {
         let mut acc = ~"[";
         let mut first = true;
-        foreach elt in self.iter() {
+        for elt in self.iter() {
             if first {
                 first = false;
             }
@@ -145,7 +145,7 @@ impl<A:ToStr> ToStr for ~[A] {
     fn to_str(&self) -> ~str {
         let mut acc = ~"[";
         let mut first = true;
-        foreach elt in self.iter() {
+        for elt in self.iter() {
             if first {
                 first = false;
             }
@@ -164,7 +164,7 @@ impl<A:ToStr> ToStr for @[A] {
     fn to_str(&self) -> ~str {
         let mut acc = ~"[";
         let mut first = true;
-        foreach elt in self.iter() {
+        for elt in self.iter() {
             if first {
                 first = false;
             }
index 9bcf430ff906d7ee90b0c28ff1fbd710d75b0776..679d36b87f18e0c2ea883467d4010dceb9d3fad2 100644 (file)
@@ -48,12 +48,6 @@ fn clear(&mut self) {
 }
 
 impl<T> Map<uint, T> for TrieMap<T> {
-    /// Return true if the map contains a value for the specified key
-    #[inline]
-    fn contains_key(&self, key: &uint) -> bool {
-        self.find(key).is_some()
-    }
-
     /// Return a reference to the value corresponding to the key
     #[inline]
     fn find<'a>(&'a self, key: &uint) -> Option<&'a T> {
@@ -164,7 +158,7 @@ fn from_iterator(iter: &mut Iter) -> TrieMap<T> {
 
 impl<T, Iter: Iterator<(uint, T)>> Extendable<(uint, T), Iter> for TrieMap<T> {
     fn extend(&mut self, iter: &mut Iter) {
-        foreach (k, v) in *iter {
+        for (k, v) in *iter {
             self.insert(k, v);
         }
     }
@@ -235,7 +229,7 @@ fn from_iterator(iter: &mut Iter) -> TrieSet {
 
 impl<Iter: Iterator<uint>> Extendable<uint, Iter> for TrieSet {
     fn extend(&mut self, iter: &mut Iter) {
-        foreach elem in *iter {
+        for elem in *iter {
             self.insert(elem);
         }
     }
@@ -261,7 +255,7 @@ fn new() -> TrieNode<T> {
 
 impl<T> TrieNode<T> {
     fn each<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) -> bool {
-        foreach idx in range(0u, self.children.len()) {
+        for 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 },
@@ -282,7 +276,7 @@ fn each_reverse<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) -> bool {
     }
 
     fn mutate_values<'a>(&'a mut self, f: &fn(&uint, &mut T) -> bool) -> bool {
-        foreach child in self.children.mut_iter() {
+        for child in self.children.mut_iter() {
             match *child {
                 Internal(ref mut x) => if !x.mutate_values(|i,t| f(i,t)) {
                     return false
@@ -378,7 +372,7 @@ pub fn check_integrity<T>(trie: &TrieNode<T>) {
 
     let mut sum = 0;
 
-    foreach x in trie.children.iter() {
+    for x in trie.children.iter() {
         match *x {
           Nothing => (),
           Internal(ref y) => {
@@ -430,7 +424,7 @@ fn test_step() {
             true
         };
 
-        foreach x in range(0u, n) {
+        for x in range(0u, n) {
             assert!(trie.contains_key(&x));
             assert!(!trie.insert(x, x + 1));
             check_integrity(&trie.root);
@@ -555,7 +549,7 @@ fn test_from_iter() {
 
         let map: TrieMap<int> = xs.iter().transform(|&x| x).collect();
 
-        foreach &(k, v) in xs.iter() {
+        for &(k, v) in xs.iter() {
             assert_eq!(map.find(&k), Some(&v));
         }
     }
@@ -596,7 +590,7 @@ fn test_from_iter() {
 
         let set: TrieSet = xs.iter().transform(|&x| x).collect();
 
-        foreach x in xs.iter() {
+        for x in xs.iter() {
             assert!(set.contains(x));
         }
     }
index 6f66cdbe8a78b851c4b113c42d938d9875753f38..2cfe63d99266f97531c16f21781254cef0b92f72 100644 (file)
@@ -509,7 +509,7 @@ pub unsafe fn atomic_xor<T>(dst: &mut T, val: T, order: Ordering) -> T {
  *
  * Accepts `Acquire`, `Release`, `AcqRel` and `SeqCst` orderings.
  */
-#[inline] #[cfg(not(stage0))]
+#[inline]
 pub fn fence(order: Ordering) {
     unsafe {
         match order {
index a08851df626c6240276029684a09f82dbe47b2db..d63f914bc7386f215f98f86d5264f04ac601e0ff 100644 (file)
@@ -617,7 +617,7 @@ pub fn pad(cv: Conv, s: &str, head: Option<char>, mode: PadMode,
         let headsize = match head { Some(_) => 1, _ => 0 };
         let uwidth : uint = match cv.width {
             CountImplied => {
-                foreach &c in head.iter() {
+                for &c in head.iter() {
                     buf.push_char(c);
                 }
                 return buf.push_str(s);
@@ -626,7 +626,7 @@ pub fn pad(cv: Conv, s: &str, head: Option<char>, mode: PadMode,
         };
         let strlen = s.char_len() + headsize;
         if uwidth <= strlen {
-            foreach &c in head.iter() {
+            for &c in head.iter() {
                 buf.push_char(c);
             }
             return buf.push_str(s);
@@ -634,7 +634,7 @@ pub fn pad(cv: Conv, s: &str, head: Option<char>, mode: PadMode,
         let mut padchar = ' ';
         let diff = uwidth - strlen;
         if have_flag(cv.flags, flag_left_justify) {
-            foreach &c in head.iter() {
+            for &c in head.iter() {
                 buf.push_char(c);
             }
             buf.push_str(s);
@@ -668,7 +668,7 @@ fn have_precision(cv: Conv) -> bool {
         // instead.
 
         if signed && zero_padding {
-            foreach &head in head.iter() {
+            for &head in head.iter() {
                 if head == '+' || head == '-' || head == ' ' {
                     buf.push_char(head);
                     buf.push_str(padstr);
@@ -678,7 +678,7 @@ fn have_precision(cv: Conv) -> bool {
             }
         }
         buf.push_str(padstr);
-        foreach &c in head.iter() {
+        for &c in head.iter() {
             buf.push_char(c);
         }
         buf.push_str(s);
index 50d9c7e4dede07ca40244ceb5fdbc15768a8a1a1..1270a80c354990aeee037520b1fe4f1221faf192 100644 (file)
@@ -256,13 +256,9 @@ fn visit_leave_fn(&self, purity: uint, proto: uint,
     pub fn atomic_umax_acqrel(dst: &mut int, src: int) -> int;
     pub fn atomic_umax_relaxed(dst: &mut int, src: int) -> int;
 
-    #[cfg(not(stage0))]
     pub fn atomic_fence();
-    #[cfg(not(stage0))]
     pub fn atomic_fence_acq();
-    #[cfg(not(stage0))]
     pub fn atomic_fence_rel();
-    #[cfg(not(stage0))]
     pub fn atomic_fence_acqrel();
 
     /// The size of a type in bytes.
@@ -325,7 +321,6 @@ fn visit_leave_fn(&self, purity: uint, proto: uint,
     ///
     /// This is implemented as an intrinsic to avoid converting to and from an
     /// integer, since the conversion would throw away aliasing information.
-    #[cfg(not(stage0))]
     pub fn offset<T>(dst: *T, offset: int) -> *T;
 
     /// Equivalent to the `llvm.memcpy.p0i8.0i8.i32` intrinsic, with a size of
index 88c9c6ccb3aa4d9fc4af614a081f30c9f985615d..225ac5c92adcf8bfa32fc12aeebe5326ab998056 100644 (file)
@@ -456,13 +456,13 @@ fn exclusive_new_arc() {
 
             let total = Exclusive::new(~0);
 
-            foreach _ in range(0u, num_tasks) {
+            for _ in range(0u, num_tasks) {
                 let total = total.clone();
                 let (port, chan) = comm::stream();
                 futures.push(port);
 
                 do task::spawn || {
-                    foreach _ in range(0u, count) {
+                    for _ in range(0u, count) {
                         do total.with |count| {
                             **count += 1;
                         }
@@ -471,7 +471,7 @@ fn exclusive_new_arc() {
                 }
             };
 
-            foreach f in futures.iter() { f.recv() }
+            for f in futures.iter() { f.recv() }
 
             do total.with |total| {
                 assert!(**total == num_tasks * count)
index 1f6adaf040b7e45c6f57f43ffd14863a06513618..f037aa2b7e789299758d38064fc52a2e2cde4cab 100644 (file)
@@ -295,7 +295,7 @@ pub fn append_one<T>(lhs: ~[T], x: T) -> ~[T] {
  */
 pub fn flat_map<T, U>(v: &[T], f: &fn(t: &T) -> ~[U]) -> ~[U] {
     let mut result = ~[];
-    foreach elem in v.iter() { result.push_all_move(f(elem)); }
+    for elem in v.iter() { result.push_all_move(f(elem)); }
     result
 }
 
@@ -329,7 +329,7 @@ pub fn concat_vec(&self) -> ~[T] {
     pub fn connect_vec(&self, sep: &T) -> ~[T] {
         let mut r = ~[];
         let mut first = true;
-        foreach inner in self.iter() {
+        for inner in self.iter() {
             if first { first = false; } else { r.push((*sep).clone()); }
             r.push_all((*inner).clone());
         }
@@ -347,7 +347,7 @@ pub fn concat_vec(&self) -> ~[T] {
     pub fn connect_vec(&self, sep: &T) -> ~[T] {
         let mut r = ~[];
         let mut first = true;
-        foreach &inner in self.iter() {
+        for &inner in self.iter() {
             if first { first = false; } else { r.push((*sep).clone()); }
             r.push_all(inner);
         }
@@ -365,7 +365,7 @@ pub fn connect_vec(&self, sep: &T) -> ~[T] {
 pub fn unzip_slice<T:Clone,U:Clone>(v: &[(T, U)]) -> (~[T], ~[U]) {
     let mut ts = ~[];
     let mut us = ~[];
-    foreach p in v.iter() {
+    for p in v.iter() {
         let (t, u) = (*p).clone();
         ts.push(t);
         us.push(u);
@@ -384,7 +384,7 @@ pub fn unzip_slice<T:Clone,U:Clone>(v: &[(T, U)]) -> (~[T], ~[U]) {
 pub fn unzip<T,U>(v: ~[(T, U)]) -> (~[T], ~[U]) {
     let mut ts = ~[];
     let mut us = ~[];
-    foreach p in v.consume_iter() {
+    for p in v.consume_iter() {
         let (t, u) = p;
         ts.push(t);
         us.push(u);
@@ -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
-        foreach i in range(k, length) {
+        for i in range(k, length) {
             permutation[i] = values[indices[i]].clone();
         }
     }
@@ -589,7 +589,7 @@ fn equiv(&self, other: &V) -> bool { self.as_slice() == other.as_slice() }
 
     impl<'self,T:TotalOrd> TotalOrd for &'self [T] {
         fn cmp(&self, other: & &'self [T]) -> Ordering {
-            foreach (s,o) in self.iter().zip(other.iter()) {
+            for (s,o) in self.iter().zip(other.iter()) {
                 match s.cmp(o) {
                     Equal => {},
                     non_eq => { return non_eq; }
@@ -611,7 +611,7 @@ fn cmp(&self, other: &@[T]) -> Ordering { self.as_slice().cmp(&other.as_slice())
 
     impl<'self,T:Ord> Ord for &'self [T] {
         fn lt(&self, other: & &'self [T]) -> bool {
-            foreach (s,o) in self.iter().zip(other.iter()) {
+            for (s,o) in self.iter().zip(other.iter()) {
                 if *s < *o { return true; }
                 if *s > *o { return false; }
             }
@@ -725,7 +725,7 @@ impl<'self,T:Clone> CopyableVector<T> for &'self [T] {
     #[inline]
     fn to_owned(&self) -> ~[T] {
         let mut result = with_capacity(self.len());
-        foreach e in self.iter() {
+        for e in self.iter() {
             result.push((*e).clone());
         }
         result
@@ -880,7 +880,7 @@ fn rsplitn_iter(self, n: uint, pred: &'self fn(&T) -> bool) -> RSplitIterator<'s
      *
      * ~~~ {.rust}
      * let v = &[1,2,3,4];
-     * foreach win in v.window_iter() {
+     * for win in v.window_iter() {
      *     printfln!(win);
      * }
      * ~~~
@@ -909,7 +909,7 @@ fn window_iter(self, size: uint) -> WindowIter<'self, T> {
      *
      * ~~~ {.rust}
      * let v = &[1,2,3,4,5];
-     * foreach win in v.chunk_iter() {
+     * for win in v.chunk_iter() {
      *     printfln!(win);
      * }
      * ~~~
@@ -975,7 +975,7 @@ fn last_opt(&self) -> Option<&'self T> {
      */
     #[inline]
     fn rposition(&self, f: &fn(t: &T) -> bool) -> Option<uint> {
-        foreach (i, t) in self.rev_iter().enumerate() {
+        for (i, t) in self.rev_iter().enumerate() {
             if f(t) { return Some(self.len() - i - 1); }
         }
         None
@@ -1075,7 +1075,7 @@ fn rposition_elem(&self, t: &T) -> Option<uint> {
 
     /// Return true if a vector contains an element with the given value
     fn contains(&self, x: &T) -> bool {
-        foreach elt in self.iter() { if *x == *elt { return true; } }
+        for elt in self.iter() { if *x == *elt { return true; } }
         false
     }
 }
@@ -1113,7 +1113,7 @@ fn partitioned(&self, f: &fn(&T) -> bool) -> (~[T], ~[T]) {
         let mut lefts  = ~[];
         let mut rights = ~[];
 
-        foreach elt in self.iter() {
+        for elt in self.iter() {
             if f(elt) {
                 lefts.push((*elt).clone());
             } else {
@@ -1170,7 +1170,7 @@ impl<T> OwnedVector<T> for ~[T] {
     ///
     /// ~~~ {.rust}
     /// let v = ~[~"a", ~"b"];
-    /// foreach s in v.consume_iter() {
+    /// for s in v.consume_iter() {
     ///   // s has type ~str, not &~str
     ///   println(s);
     /// }
@@ -1461,7 +1461,7 @@ fn truncate(&mut self, newlen: uint) {
             assert!(newlen <= oldlen);
             unsafe {
                 // This loop is optimized out for non-drop types.
-                foreach i in range(newlen, oldlen) {
+                for i in range(newlen, oldlen) {
                     ptr::read_and_zero_ptr(ptr::mut_offset(p, i as int));
                 }
             }
@@ -1477,7 +1477,7 @@ fn retain(&mut self, f: &fn(t: &T) -> bool) {
         let len = self.len();
         let mut deleted: uint = 0;
 
-        foreach i in range(0u, len) {
+        for i in range(0u, len) {
             if !f(&self[i]) {
                 deleted += 1;
             } else if deleted > 0 {
@@ -1499,7 +1499,7 @@ fn partition(self, f: &fn(&T) -> bool) -> (~[T], ~[T]) {
         let mut lefts  = ~[];
         let mut rights = ~[];
 
-        foreach elt in self.consume_iter() {
+        for elt in self.consume_iter() {
             if f(&elt) {
                 lefts.push(elt);
             } else {
@@ -1561,7 +1561,7 @@ fn push_all(&mut self, rhs: &[T]) {
         let new_len = self.len() + rhs.len();
         self.reserve(new_len);
 
-        foreach i in range(0u, rhs.len()) {
+        for i in range(0u, rhs.len()) {
             self.push(unsafe { raw::get(rhs, i) })
         }
     }
@@ -1832,7 +1832,7 @@ fn reverse(self) {
 
     #[inline]
     fn move_from(self, mut src: ~[T], start: uint, end: uint) -> uint {
-        foreach (a, b) in self.mut_iter().zip(src.mut_slice(start, end).mut_iter()) {
+        for (a, b) in self.mut_iter().zip(src.mut_slice(start, end).mut_iter()) {
             util::swap(a, b);
         }
         cmp::min(self.len(), end-start)
@@ -1867,7 +1867,7 @@ pub trait MutableCloneableVector<T> {
 impl<'self, T:Clone> MutableCloneableVector<T> for &'self mut [T] {
     #[inline]
     fn copy_from(self, src: &[T]) -> uint {
-        foreach (a, b) in self.mut_iter().zip(src.iter()) {
+        for (a, b) in self.mut_iter().zip(src.iter()) {
             *a = b.clone();
         }
         cmp::min(self.len(), src.len())
@@ -2276,7 +2276,7 @@ impl<A, T: Iterator<A>> FromIterator<A, T> for ~[A] {
     fn from_iterator(iterator: &mut T) -> ~[A] {
         let (lower, _) = iterator.size_hint();
         let mut xs = with_capacity(lower);
-        foreach x in *iterator {
+        for x in *iterator {
             xs.push(x);
         }
         xs
@@ -2288,7 +2288,7 @@ fn extend(&mut self, iterator: &mut T) {
         let (lower, _) = iterator.size_hint();
         let len = self.len();
         self.reserve(len + lower);
-        foreach x in *iterator {
+        for x in *iterator {
             self.push(x);
         }
     }
@@ -3246,7 +3246,7 @@ fn test_iter_clone() {
     fn test_mut_iterator() {
         use iterator::*;
         let mut xs = [1, 2, 3, 4, 5];
-        foreach x in xs.mut_iter() {
+        for x in xs.mut_iter() {
             *x += 1;
         }
         assert_eq!(xs, [2, 3, 4, 5, 6])
@@ -3259,7 +3259,7 @@ fn test_rev_iterator() {
         let xs = [1, 2, 5, 10, 11];
         let ys = [11, 10, 5, 2, 1];
         let mut i = 0;
-        foreach &x in xs.rev_iter() {
+        for &x in xs.rev_iter() {
             assert_eq!(x, ys[i]);
             i += 1;
         }
@@ -3270,7 +3270,7 @@ fn test_rev_iterator() {
     fn test_mut_rev_iterator() {
         use iterator::*;
         let mut xs = [1u, 2, 3, 4, 5];
-        foreach (i,x) in xs.mut_rev_iter().enumerate() {
+        for (i,x) in xs.mut_rev_iter().enumerate() {
             *x += i;
         }
         assert_eq!(xs, [5, 5, 5, 5, 5])
@@ -3514,12 +3514,12 @@ fn test_mut_split() {
         {
             let (left, right) = values.mut_split(2);
             assert_eq!(left.slice(0, left.len()), [1, 2]);
-            foreach p in left.mut_iter() {
+            for p in left.mut_iter() {
                 *p += 1;
             }
 
             assert_eq!(right.slice(0, right.len()), [3, 4, 5]);
-            foreach p in right.mut_iter() {
+            for p in right.mut_iter() {
                 *p += 2;
             }
         }
@@ -3536,25 +3536,25 @@ fn test_iter_zero_sized() {
         assert_eq!(v.len(), 3);
         let mut cnt = 0;
 
-        foreach f in v.iter() {
+        for f in v.iter() {
             assert!(*f == Foo);
             cnt += 1;
         }
         assert_eq!(cnt, 3);
 
-        foreach f in v.slice(1, 3).iter() {
+        for f in v.slice(1, 3).iter() {
             assert!(*f == Foo);
             cnt += 1;
         }
         assert_eq!(cnt, 5);
 
-        foreach f in v.mut_iter() {
+        for f in v.mut_iter() {
             assert!(*f == Foo);
             cnt += 1;
         }
         assert_eq!(cnt, 8);
 
-        foreach f in v.consume_iter() {
+        for f in v.consume_iter() {
             assert!(f == Foo);
             cnt += 1;
         }
@@ -3566,7 +3566,7 @@ fn test_iter_zero_sized() {
         let xs: [Foo, ..3] = [Foo, Foo, Foo];
         assert_eq!(fmt!("%?", xs.slice(0, 2).to_owned()), ~"~[{}, {}]");
         cnt = 0;
-        foreach f in xs.iter() {
+        for f in xs.iter() {
             assert!(*f == Foo);
             cnt += 1;
         }
@@ -3588,7 +3588,7 @@ fn iterator(bh: &mut BenchHarness) {
 
         do bh.iter {
             let mut sum = 0;
-            foreach x in v.iter() {
+            for x in v.iter() {
                 sum += *x;
             }
             // sum == 11806, to stop dead code elimination.
@@ -3602,7 +3602,7 @@ fn mut_iterator(bh: &mut BenchHarness) {
 
         do bh.iter {
             let mut i = 0;
-            foreach x in v.mut_iter() {
+            for x in v.mut_iter() {
                 *x = i;
                 i += 1;
             }
index dc6919efcf9009576885ade19c0d229aaa5886b3..e6bbd45dae770b9e8e6aa4842d06647de3b105e1 100644 (file)
@@ -217,9 +217,9 @@ pub fn check_valid(&self) -> Option<(Abi, Abi)> {
         let mut abis = ~[];
         do self.each |abi| { abis.push(abi); true };
 
-        foreach (i, abi) in abis.iter().enumerate() {
+        for (i, abi) in abis.iter().enumerate() {
             let data = abi.data();
-            foreach other_abi in abis.slice(0, i).iter() {
+            for other_abi in abis.slice(0, i).iter() {
                 let other_data = other_abi.data();
                 debug!("abis=(%?,%?) datas=(%?,%?)",
                        abi, data.abi_arch,
@@ -381,7 +381,7 @@ fn abi_to_str_rust() {
 
 #[test]
 fn indices_are_correct() {
-    foreach (i, abi_data) in AbiDatas.iter().enumerate() {
+    for (i, abi_data) in AbiDatas.iter().enumerate() {
         assert!(i == abi_data.abi.index());
     }
 
@@ -396,7 +396,7 @@ fn indices_are_correct() {
 #[cfg(test)]
 fn check_arch(abis: &[Abi], arch: Architecture, expect: Option<Abi>) {
     let mut set = AbiSet::empty();
-    foreach &abi in abis.iter() {
+    for &abi in abis.iter() {
         set.add(abi);
     }
     let r = set.for_arch(arch);
index 11f2c7005bceeced3dd9c33c41a50c114c521b39..cf7a1e51798ac56ee3499dab5dfded7b797894e9 100644 (file)
@@ -472,11 +472,6 @@ pub enum expr_ {
     expr_loop(Block, Option<ident>),
     expr_match(@expr, ~[arm]),
     expr_fn_block(fn_decl, Block),
-    // Inner expr is always an expr_fn_block. We need the wrapping node to
-    // easily type this (a function returning nil on the inside but bool on
-    // the outside).
-    expr_loop_body(@expr),
-    // Like expr_loop_body but for 'do' blocks
     expr_do_body(@expr),
     expr_block(Block),
 
index 9c0f2d34a6cc9423f61c903a5470fdb4ae9addb4..5cba22a8e2375a69426df537a04133e23d1e645d 100644 (file)
@@ -136,7 +136,7 @@ fn map_expr(@mut self, ex: @expr) {
         // Expressions which are or might be calls:
         {
             let r = ex.get_callee_id();
-            foreach callee_id in r.iter() {
+            for callee_id in r.iter() {
                 self.map.insert(*callee_id, node_callee_scope(ex));
             }
         }
@@ -150,7 +150,7 @@ fn map_fn(@mut self,
               body: &Block,
               sp: codemap::span,
               id: NodeId) {
-        foreach a in decl.inputs.iter() {
+        for a in decl.inputs.iter() {
             self.map.insert(a.id, node_arg);
         }
         visit::visit_fn(self as @Visitor<()>, fk, decl, body, sp, id, ());
@@ -189,12 +189,12 @@ fn visit_item(@mut self, i: @item, _: ()) {
         match i.node {
             item_impl(_, _, _, ref ms) => {
                 let impl_did = ast_util::local_def(i.id);
-                foreach m in ms.iter() {
+                for m in ms.iter() {
                     self.map_method(impl_did, self.extend(i.ident), *m, false)
                 }
             }
             item_enum(ref enum_definition, _) => {
-                foreach v in (*enum_definition).variants.iter() {
+                for v in (*enum_definition).variants.iter() {
                     // FIXME #2543: bad clone
                     self.map.insert(v.node.id,
                                     node_variant((*v).clone(),
@@ -203,7 +203,7 @@ fn visit_item(@mut self, i: @item, _: ()) {
                 }
             }
             item_foreign_mod(ref nm) => {
-                foreach nitem in nm.items.iter() {
+                for nitem in nm.items.iter() {
                     // Compute the visibility for this native item.
                     let visibility = match nitem.vis {
                         public => public,
@@ -233,10 +233,10 @@ fn visit_item(@mut self, i: @item, _: ()) {
                                     i.ident)
             }
             item_trait(_, ref traits, ref methods) => {
-                foreach p in traits.iter() {
+                for p in traits.iter() {
                     self.map.insert(p.ref_id, node_item(i, item_path));
                 }
-                foreach tm in methods.iter() {
+                for tm in methods.iter() {
                     let id = ast_util::trait_method_to_ty_method(tm).id;
                     let d_id = ast_util::local_def(i.id);
                     self.map.insert(id,
index 45238c30d730e6e5b88740c7e063ce26163c9d99..11d3740be3f519bfc41850984367323e1e6483e3 100644 (file)
@@ -279,7 +279,7 @@ pub fn split_trait_methods(trait_methods: &[trait_method])
     -> (~[TypeMethod], ~[@method]) {
     let mut reqd = ~[];
     let mut provd = ~[];
-    foreach trt_method in trait_methods.iter() {
+    for trt_method in trait_methods.iter() {
         match *trt_method {
           required(ref tm) => reqd.push((*tm).clone()),
           provided(m) => provd.push(m)
@@ -398,10 +398,10 @@ struct IdVisitor {
 
 impl IdVisitor {
     fn visit_generics_helper(@mut self, generics: &Generics) {
-        foreach type_parameter in generics.ty_params.iter() {
+        for type_parameter in generics.ty_params.iter() {
             (self.visit_callback)(type_parameter.id)
         }
-        foreach lifetime in generics.lifetimes.iter() {
+        for lifetime in generics.lifetimes.iter() {
             (self.visit_callback)(lifetime.id)
         }
     }
@@ -423,7 +423,7 @@ fn visit_view_item(@mut self, view_item: &view_item, env: ()) {
                 (self.visit_callback)(node_id)
             }
             view_item_use(ref view_paths) => {
-                foreach view_path in view_paths.iter() {
+                for view_path in view_paths.iter() {
                     match view_path.node {
                         view_path_simple(_, _, node_id) |
                         view_path_glob(_, node_id) => {
@@ -431,7 +431,7 @@ fn visit_view_item(@mut self, view_item: &view_item, env: ()) {
                         }
                         view_path_list(_, ref paths, node_id) => {
                             (self.visit_callback)(node_id);
-                            foreach path in paths.iter() {
+                            for path in paths.iter() {
                                 (self.visit_callback)(path.node.id)
                             }
                         }
@@ -459,7 +459,7 @@ fn visit_item(@mut self, item: @item, env: ()) {
         (self.visit_callback)(item.id);
         match item.node {
             item_enum(ref enum_definition, _) => {
-                foreach variant in enum_definition.variants.iter() {
+                for variant in enum_definition.variants.iter() {
                     (self.visit_callback)(variant.node.id)
                 }
             }
@@ -504,7 +504,7 @@ fn visit_decl(@mut self, declaration: @decl, env: ()) {
     fn visit_expr(@mut self, expression: @expr, env: ()) {
         {
             let optional_callee_id = expression.get_callee_id();
-            foreach callee_id in optional_callee_id.iter() {
+            for callee_id in optional_callee_id.iter() {
                 (self.visit_callback)(*callee_id)
             }
         }
@@ -559,7 +559,7 @@ fn visit_fn(@mut self,
             visit::fk_anon(_) | visit::fk_fn_block => {}
         }
 
-        foreach argument in function_declaration.inputs.iter() {
+        for argument in function_declaration.inputs.iter() {
             (self.visit_callback)(argument.id)
         }
 
index 615b47e56813b58d063d8abf18e1ff677ba0f862..d1ddebfc347af259d797786a605358876f5ac7c3 100644 (file)
@@ -228,7 +228,7 @@ pub fn sort_meta_items(items: &[@MetaItem]) -> ~[@MetaItem] {
  */
 pub fn find_linkage_metas(attrs: &[Attribute]) -> ~[@MetaItem] {
     let mut result = ~[];
-    foreach attr in attrs.iter().filter(|at| "link" == at.name()) {
+    for attr in attrs.iter().filter(|at| "link" == at.name()) {
         match attr.meta().node {
             MetaList(_, ref items) => result.push_all(*items),
             _ => ()
@@ -316,7 +316,7 @@ pub fn test_cfg<AM: AttrMetaMethods, It: Iterator<AM>>
 pub fn require_unique_names(diagnostic: @span_handler,
                             metas: &[@MetaItem]) {
     let mut set = HashSet::new();
-    foreach meta in metas.iter() {
+    for meta in metas.iter() {
         let name = meta.name();
 
         // FIXME: How do I silence the warnings? --pcw (#2619)
index 04b9fdce666e81a0bb8ec0e69a93ec80bef0d206..0da424ce54cddb2b75e7b11578cbef7f570add25 100644 (file)
@@ -363,7 +363,7 @@ pub fn span_to_lines(&self, sp: span) -> @FileLines {
         let lo = self.lookup_char_pos(sp.lo);
         let hi = self.lookup_char_pos(sp.hi);
         let mut lines = ~[];
-        foreach i in range(lo.line - 1u, hi.line as uint) {
+        for i in range(lo.line - 1u, hi.line as uint) {
             lines.push(i);
         };
         return @FileLines {file: lo.file, lines: lines};
@@ -378,7 +378,7 @@ pub fn span_to_snippet(&self, sp: span) -> ~str {
     }
 
     pub fn get_filemap(&self, filename: &str) -> @FileMap {
-        foreach fm in self.files.iter() { if filename == fm.name { return *fm; } }
+        for fm in self.files.iter() { if filename == fm.name { return *fm; } }
         //XXjdm the following triggers a mismatched type bug
         //      (or expected function, found _|_)
         fail!(); // ("asking for " + filename + " which we don't know about");
@@ -464,7 +464,7 @@ fn bytepos_to_local_charpos(&self, bpos: BytePos) -> CharPos {
         // The number of extra bytes due to multibyte chars in the FileMap
         let mut total_extra_bytes = 0;
 
-        foreach mbc in map.multibyte_chars.iter() {
+        for mbc in map.multibyte_chars.iter() {
             debug!("codemap: %?-byte char at %?", mbc.bytes, mbc.pos);
             if mbc.pos < bpos {
                 total_extra_bytes += mbc.bytes;
index 01f55e8c4f4b8858b0d1545dbe37490b767df5eb..8b5014366413527ef93381f22b4b7f02e6c98880 100644 (file)
@@ -267,7 +267,7 @@ fn highlight_lines(cm: @codemap::CodeMap,
         elided = true;
     }
     // Print the offending lines
-    foreach line in display_lines.iter() {
+    for line in display_lines.iter() {
         io::stderr().write_str(fmt!("%s:%u ", fm.name, *line + 1u));
         let s = fm.get_line(*line as int) + "\n";
         io::stderr().write_str(s);
@@ -305,7 +305,7 @@ fn highlight_lines(cm: @codemap::CodeMap,
             s.push_char(' ');
         }
         let orig = fm.get_line(lines.lines[0] as int);
-        foreach pos in range(0u, left-skip) {
+        for 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).
@@ -331,7 +331,7 @@ fn highlight_lines(cm: @codemap::CodeMap,
 }
 
 fn print_macro_backtrace(cm: @codemap::CodeMap, sp: span) {
-    foreach ei in sp.expn_info.iter() {
+    for ei in sp.expn_info.iter() {
         let ss = ei.callee.span.map_default(~"", |span| cm.span_to_str(*span));
         print_diagnostic(ss, note,
                          fmt!("in expansion of %s!", ei.callee.name));
index 9b2b37fe402a5643be218dd75a4e3dd3a589abdf..8d2d24327365eabf0a0e89f87008c7d1fe51f544 100644 (file)
@@ -21,13 +21,13 @@ pub fn expand_syntax_ext(cx: @ExtCtxt, sp: span, tts: &[ast::token_tree]) -> bas
     let exprs = get_exprs_from_tts(cx, sp, tts);
     let mut bytes = ~[];
 
-    foreach expr in exprs.iter() {
+    for expr in exprs.iter() {
         match expr.node {
             // expression is a literal
             ast::expr_lit(lit) => match lit.node {
                 // string literal, push each byte to vector expression
                 ast::lit_str(s) => {
-                    foreach byte in s.byte_iter() {
+                    for byte in s.byte_iter() {
                         bytes.push(cx.expr_u8(sp, byte));
                     }
                 }
index e47e3078636780037b9af1568c71b67c38aa20c3..edb5c634d5698b78d175bab9f779d59dc20570df 100644 (file)
@@ -18,7 +18,7 @@
 pub fn expand_syntax_ext(cx: @ExtCtxt, sp: span, tts: &[ast::token_tree])
     -> base::MacResult {
     let mut res_str = ~"";
-    foreach (i, e) in tts.iter().enumerate() {
+    for (i, e) in tts.iter().enumerate() {
         if i & 1 == 1 {
             match *e {
                 ast::tt_tok(_, token::COMMA) => (),
index 77b5bf5bf2ca6cc31922dde33d5cc07d8796366e..59b7da16c2bcbb684c70ca475449a27fdff2bbdf 100644 (file)
@@ -83,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);
-                        foreach i in range(0, n) {
+                        for i in range(0, n) {
                             fields.push(getarg(fmt!("_field%u", i).to_managed(), i));
                         }
                         cx.expr_call_ident(span, substr.type_ident, fields)
@@ -109,7 +109,7 @@ fn decodable_substructure(cx: @ExtCtxt, span: span,
             let mut variants = ~[];
             let rvariant_arg = cx.ident_of("read_enum_variant_arg");
 
-            foreach (i, f) in fields.iter().enumerate() {
+            for (i, f) in fields.iter().enumerate() {
                 let (name, parts) = match *f { (i, ref p) => (i, p) };
                 variants.push(cx.expr_str(span, cx.str_of(name)));
 
@@ -125,7 +125,7 @@ fn decodable_substructure(cx: @ExtCtxt, span: span,
                             cx.expr_ident(span, name)
                         } else {
                             let mut fields = vec::with_capacity(n);
-                            foreach i in range(0u, n) {
+                            for i in range(0u, n) {
                                 fields.push(getarg(i));
                             }
                             cx.expr_call_ident(span, name, fields)
index 0a2731f2f879dd6b292c8b7200f96c91d05cee0b..f16fea7bb0614b96051202ed429e09f417adfd74 100644 (file)
@@ -122,7 +122,7 @@ fn encodable_substructure(cx: @ExtCtxt, span: span,
         Struct(ref fields) => {
             let emit_struct_field = cx.ident_of("emit_struct_field");
             let mut stmts = ~[];
-            foreach (i, f) in fields.iter().enumerate() {
+            for (i, f) in fields.iter().enumerate() {
                 let (name, val) = match *f {
                     (Some(id), e, _) => (cx.str_of(id), e),
                     (None, e, _) => (fmt!("_field%u", i).to_managed(), e)
@@ -153,7 +153,7 @@ fn encodable_substructure(cx: @ExtCtxt, span: span,
             let encoder = cx.expr_ident(span, blkarg);
             let emit_variant_arg = cx.ident_of("emit_enum_variant_arg");
             let mut stmts = ~[];
-            foreach (i, f) in fields.iter().enumerate() {
+            for (i, f) in fields.iter().enumerate() {
                 let val = match *f { (_, e, _) => e };
                 let enc = cx.expr_method_call(span, val, encode, ~[blkencoder]);
                 let lambda = cx.lambda_expr_1(span, enc, blkarg);
index 8038b9878efebc50974d07fea55fdd9e2046871a..f5eb57c94b76f104cda5a7393e12b726c6ddeb76 100644 (file)
@@ -283,7 +283,7 @@ pub fn expand(&self, cx: @ExtCtxt,
                   _mitem: @ast::MetaItem,
                   in_items: ~[@ast::item]) -> ~[@ast::item] {
         let mut result = ~[];
-        foreach item in in_items.iter() {
+        for item in in_items.iter() {
             result.push(*item);
             match item.node {
                 ast::item_struct(struct_def, ref generics) => {
@@ -321,11 +321,11 @@ fn create_derived_impl(&self, cx: @ExtCtxt, span: span,
 
         let mut trait_generics = self.generics.to_generics(cx, span, type_ident, generics);
         // Copy the lifetimes
-        foreach l in generics.lifetimes.iter() {
+        for l in generics.lifetimes.iter() {
             trait_generics.lifetimes.push(*l)
         };
         // Create the type parameters.
-        foreach ty_param in generics.ty_params.iter() {
+        for ty_param in generics.ty_params.iter() {
             // I don't think this can be moved out of the loop, since
             // a TyParamBound requires an ast id
             let mut bounds = opt_vec::from(
@@ -485,7 +485,7 @@ fn split_self_nonself_args(&self, cx: @ExtCtxt, span: span,
             None => respan(span, ast::sty_static),
         };
 
-        foreach (i, ty) in self.args.iter().enumerate() {
+        for (i, ty) in self.args.iter().enumerate() {
             let ast_ty = ty.to_ty(cx, span, type_ident, generics);
             let ident = cx.ident_of(fmt!("__arg_%u", i));
             arg_tys.push((ident, ast_ty));
@@ -579,7 +579,7 @@ fn expand_struct_method_body(&self,
         let mut raw_fields = ~[]; // ~[[fields of self],
                                  // [fields of next Self arg], [etc]]
         let mut patterns = ~[];
-        foreach i in range(0u, self_args.len()) {
+        for 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);
@@ -614,7 +614,7 @@ fn expand_struct_method_body(&self,
         // make a series of nested matches, to destructure the
         // structs. This is actually right-to-left, but it shoudn't
         // matter.
-        foreach (&arg_expr, &pat) in self_args.iter().zip(patterns.iter()) {
+        for (&arg_expr, &pat) in self_args.iter().zip(patterns.iter()) {
             body = cx.expr_match(span, arg_expr,
                                  ~[ cx.arm(span, ~[pat], body) ])
         }
@@ -738,10 +738,10 @@ fn build_enum_match(&self,
 
                     let mut enum_matching_fields = vec::from_elem(self_vec.len(), ~[]);
 
-                    foreach triple in matches_so_far.tail().iter() {
+                    for triple in matches_so_far.tail().iter() {
                         match triple {
                             &(_, _, ref other_fields) => {
-                                foreach (i, pair) in other_fields.iter().enumerate() {
+                                for (i, pair) in other_fields.iter().enumerate() {
                                     enum_matching_fields[i].push(pair.second());
                                 }
                             }
@@ -814,7 +814,7 @@ fn build_enum_match(&self,
                 }
             } else {
                 // create an arm matching on each variant
-                foreach (index, variant) in enum_def.variants.iter().enumerate() {
+                for (index, variant) in enum_def.variants.iter().enumerate() {
                     let (pattern, idents) = create_enum_variant_pattern(cx, span,
                                                                        variant,
                                                                        current_match_str,
@@ -877,7 +877,7 @@ fn summarise_struct(cx: @ExtCtxt, span: span,
                     struct_def: &struct_def) -> Either<uint, ~[ident]> {
     let mut named_idents = ~[];
     let mut unnamed_count = 0;
-    foreach field in struct_def.fields.iter() {
+    for field in struct_def.fields.iter() {
         match field.node.kind {
             ast::named_field(ident, _) => named_idents.push(ident),
             ast::unnamed_field => unnamed_count += 1,
@@ -931,7 +931,7 @@ fn create_struct_pattern(cx: @ExtCtxt,
     let mut ident_expr = ~[];
     let mut struct_type = Unknown;
 
-    foreach (i, struct_field) in struct_def.fields.iter().enumerate() {
+    for (i, struct_field) in struct_def.fields.iter().enumerate() {
         let opt_id = match struct_field.node.kind {
             ast::named_field(ident, _) if (struct_type == Unknown ||
                                            struct_type == Record) => {
@@ -959,7 +959,7 @@ fn create_struct_pattern(cx: @ExtCtxt,
     // must be nonempty to reach here
     let pattern = if struct_type == Record {
         let field_pats = do vec::build |push| {
-            foreach (&pat, &(id, _)) in subpats.iter().zip(ident_expr.iter()) {
+            for (&pat, &(id, _)) in subpats.iter().zip(ident_expr.iter()) {
                 // id is guaranteed to be Some
                 push(ast::field_pat { ident: id.get(), pat: pat })
             }
@@ -991,7 +991,7 @@ fn create_enum_variant_pattern(cx: @ExtCtxt,
 
             let mut paths = ~[];
             let mut ident_expr = ~[];
-            foreach i in range(0u, variant_args.len()) {
+            for i in range(0u, variant_args.len()) {
                 let path = cx.path_ident(span,
                                          cx.ident_of(fmt!("%s_%u", prefix, i)));
 
index 215d5ca837dd45f38b5ad227bd01cb98ac442a1b..b0f442ee638054552eb6793dcd114f75e6c1b6b4 100644 (file)
@@ -81,7 +81,7 @@ fn iter_bytes_substructure(cx: @ExtCtxt, span: span, substr: &Substructure) -> @
         _ => cx.span_bug(span, "Impossible substructure in `deriving(IterBytes)`")
     }
 
-    foreach &(_, field, _) in fields.iter() {
+    for &(_, field, _) in fields.iter() {
         exprs.push(call_iterbytes(field));
     }
 
index c0f472ff456300041932817feca45a8003839fd5..3425352ff0c5a48fb6a0c525cb916b1ce76fb0a4 100644 (file)
@@ -64,7 +64,7 @@ fn to_str_substructure(cx: @ExtCtxt, span: span,
                 stmts.push(cx.stmt_expr(call));
             };
 
-            foreach (i, &(name, e, _)) in fields.iter().enumerate() {
+            for (i, &(name, e, _)) in fields.iter().enumerate() {
                 if i > 0 {
                     push(cx.expr_str(span, @", "));
                 }
index 0ec367653c04ce4cee5d7983ec452d9be200dba5..a6c5526b5a9b4968624db792fa6f17bc06c2f1db 100644 (file)
@@ -102,7 +102,7 @@ pub fn expand_expr(extsbox: @mut SyntaxEnv,
         }
 
         // Desugar expr_for_loop
-        // From: `foreach <src_pat> in <src_expr> <src_loop_block>`
+        // From: `for <src_pat> in <src_expr> <src_loop_block>`
         ast::expr_for_loop(src_pat, src_expr, ref src_loop_block) => {
             let src_pat = src_pat.clone();
             let src_expr = src_expr.clone();
@@ -543,7 +543,7 @@ fn visit_pat(@mut self, pattern: @ast::pat, _: ()) {
                     _ => ()
                 }
                 // visit optional subpattern of pat_ident:
-                foreach subpat in inner.iter() {
+                for subpat in inner.iter() {
                     self.visit_pat(*subpat, ())
                 }
             }
index be8c0e2bd99d4f615e9662894a9d38e8afbf957f..2dbf6887a214e4b156a8f7f0cb44625cf38e1980 100644 (file)
@@ -67,7 +67,7 @@ fn make_rt_path_expr(cx: @ExtCtxt, sp: span, nm: &str) -> @ast::expr {
     fn make_rt_conv_expr(cx: @ExtCtxt, sp: span, cnv: &Conv) -> @ast::expr {
         fn make_flags(cx: @ExtCtxt, sp: span, flags: &[Flag]) -> @ast::expr {
             let mut tmp_expr = make_rt_path_expr(cx, sp, "flag_none");
-            foreach f in flags.iter() {
+            for f in flags.iter() {
                 let fstr = match *f {
                   FlagLeftJustify => "flag_left_justify",
                   FlagLeftZeroPad => "flag_left_zero_pad",
@@ -153,7 +153,7 @@ fn is_signed_type(cnv: &Conv) -> bool {
           option::None => (),
           _ => cx.span_unimpl(sp, unsupported)
         }
-        foreach f in cnv.flags.iter() {
+        for f in cnv.flags.iter() {
             match *f {
               FlagLeftJustify => (),
               FlagSignAlways => {
@@ -203,7 +203,7 @@ fn log_conv(c: &Conv) {
           Some(p) => { debug!("param: %s", p.to_str()); }
           _ => debug!("param: none")
         }
-        foreach f in c.flags.iter() {
+        for f in c.flags.iter() {
             match *f {
               FlagLeftJustify => debug!("flag: left justify"),
               FlagLeftZeroPad => debug!("flag: left zero pad"),
@@ -269,7 +269,7 @@ fn log_conv(c: &Conv) {
        corresponding function in std::unstable::extfmt. Each function takes a
        buffer to insert data into along with the data being formatted. */
     let npieces = pieces.len();
-    foreach (i, pc) in pieces.consume_iter().enumerate() {
+    for (i, pc) in pieces.consume_iter().enumerate() {
         match pc {
             /* Raw strings get appended via str::push_str */
             PieceString(s) => {
index d5f032cd97831c158d8468a54a5be8c169d91ee0..d218be5e47637467013de96f0e260e4dbbb68aa5 100644 (file)
@@ -632,7 +632,7 @@ fn mk_tt(cx: @ExtCtxt, sp: span, tt: &ast::token_tree)
 fn mk_tts(cx: @ExtCtxt, sp: span, tts: &[ast::token_tree])
     -> ~[@ast::stmt] {
     let mut ss = ~[];
-    foreach tt in tts.iter() {
+    for tt in tts.iter() {
         ss.push_all_move(mk_tt(cx, sp, tt));
     }
     ss
index 982e605af2221835b0f3b057ed2123cd09ccb417..5a1317034b2211aba47e95ea2f1d5df984392bb2 100644 (file)
@@ -137,7 +137,7 @@ pub fn count_names(ms: &[matcher]) -> uint {
 pub fn initial_matcher_pos(ms: ~[matcher], sep: Option<Token>, lo: BytePos)
                         -> ~MatcherPos {
     let mut match_idx_hi = 0u;
-    foreach elt in ms.iter() {
+    for elt in ms.iter() {
         match elt.node {
           match_tok(_) => (),
           match_seq(_,_,_,_,hi) => {
@@ -194,7 +194,7 @@ fn n_rec(p_s: @mut ParseSess, m: &matcher, res: &[@named_match],
         match *m {
           codemap::spanned {node: match_tok(_), _} => (),
           codemap::spanned {node: match_seq(ref more_ms, _, _, _, _), _} => {
-            foreach next_m in more_ms.iter() {
+            for next_m in more_ms.iter() {
                 n_rec(p_s, next_m, res, ret_val)
             };
           }
@@ -210,7 +210,7 @@ fn n_rec(p_s: @mut ParseSess, m: &matcher, res: &[@named_match],
         }
     }
     let mut ret_val = HashMap::new();
-    foreach m in ms.iter() { n_rec(p_s, m, res, &mut ret_val) }
+    for m in ms.iter() { n_rec(p_s, m, res, &mut ret_val) }
     ret_val
 }
 
@@ -279,7 +279,7 @@ pub fn parse(
                         // most of the time.
 
                         // Only touch the binders we have actually bound
-                        foreach idx in range(ei.match_lo, ei.match_hi) {
+                        for idx in range(ei.match_lo, ei.match_hi) {
                             let sub = ei.matches[idx].clone();
                             new_pos.matches[idx]
                                 .push(@matched_seq(sub,
@@ -320,7 +320,7 @@ pub fn parse(
                         let mut new_ei = ei.clone();
                         new_ei.idx += 1u;
                         //we specifically matched zero repeats.
-                        foreach idx in range(match_idx_lo, match_idx_hi) {
+                        for idx in range(match_idx_lo, match_idx_hi) {
                             new_ei.matches[idx].push(@matched_seq(~[], sp));
                         }
 
@@ -355,7 +355,7 @@ pub fn parse(
         if tok == EOF {
             if eof_eis.len() == 1u {
                 let mut v = ~[];
-                foreach dv in eof_eis[0u].matches.mut_iter() {
+                for dv in eof_eis[0u].matches.mut_iter() {
                     v.push(dv.pop());
                 }
                 return success(nameize(sess, ms, v));
index 304cf4756e116841563dced2c5d09ff657ae7b56..10735dad32f00e9b93b46d37e9dbf6df7dbefd43 100644 (file)
@@ -93,7 +93,7 @@ fn generic_extension(cx: @ExtCtxt, sp: span, name: ident,
 
         let s_d = cx.parse_sess().span_diagnostic;
 
-        foreach (i, lhs) in lhses.iter().enumerate() { // try each arm's matchers
+        for (i, lhs) in lhses.iter().enumerate() { // try each arm's matchers
             match *lhs {
               @matched_nonterminal(nt_matchers(ref mtcs)) => {
                 // `none` is because we're not interpolating
index 9bda1189a8eb399a79217810a9ab8c069fc40f06..7ffed13940e8a6f144c3a9a92c7ce9efe0f6c28a 100644 (file)
@@ -379,7 +379,7 @@ fn noop_fold_method(m: @method, fld: @ast_fold) -> @method {
 pub fn noop_fold_block(b: &Block, fld: @ast_fold) -> Block {
     let view_items = b.view_items.map(|x| fld.fold_view_item(x));
     let mut stmts = ~[];
-    foreach stmt in b.stmts.iter() {
+    for stmt in b.stmts.iter() {
         match fld.fold_stmt(*stmt) {
             None => {}
             Some(stmt) => stmts.push(stmt)
@@ -541,7 +541,6 @@ fn fold_field_(field: Field, fld: @ast_fold) -> Field {
                 fld.fold_expr(ohs)
             )
         }
-        expr_loop_body(f) => expr_loop_body(fld.fold_expr(f)),
         expr_do_body(f) => expr_do_body(fld.fold_expr(f)),
         expr_lit(_) => (*e).clone(),
         expr_cast(expr, ref ty) => {
index 2de4aa474e51e059cfe1cdfb4754146dacab0aa5..295003c6ef5383e2827f8baa615a16e4b990bb66 100644 (file)
@@ -126,10 +126,10 @@ pub fn visit_mod<E:Clone>(m: &_mod,
                           _sp: span,
                           _id: NodeId,
                           (e, v): (E, vt<E>)) {
-    foreach vi in m.view_items.iter() {
+    for vi in m.view_items.iter() {
         (v.visit_view_item)(vi, (e.clone(), v));
     }
-    foreach i in m.items.iter() {
+    for i in m.items.iter() {
         (v.visit_item)(*i, (e.clone(), v));
     }
 }
@@ -173,10 +173,10 @@ pub fn visit_item<E:Clone>(i: &item, (e, v): (E, vt<E>)) {
         }
         item_mod(ref m) => (v.visit_mod)(m, i.span, i.id, (e, v)),
         item_foreign_mod(ref nm) => {
-            foreach vi in nm.view_items.iter() {
+            for vi in nm.view_items.iter() {
                 (v.visit_view_item)(vi, (e.clone(), v));
             }
-            foreach ni in nm.items.iter() {
+            for ni in nm.items.iter() {
                 (v.visit_foreign_item)(*ni, (e.clone(), v));
             }
         }
@@ -194,11 +194,11 @@ pub fn visit_item<E:Clone>(i: &item, (e, v): (E, vt<E>)) {
         }
         item_impl(ref tps, ref traits, ref ty, ref methods) => {
             (v.visit_generics)(tps, (e.clone(), v));
-            foreach p in traits.iter() {
+            for p in traits.iter() {
                 visit_trait_ref(p, (e.clone(), v));
             }
             (v.visit_ty)(ty, (e.clone(), v));
-            foreach m in methods.iter() {
+            for m in methods.iter() {
                 visit_method_helper(*m, (e.clone(), v))
             }
         }
@@ -208,10 +208,10 @@ pub fn visit_item<E:Clone>(i: &item, (e, v): (E, vt<E>)) {
         }
         item_trait(ref generics, ref traits, ref methods) => {
             (v.visit_generics)(generics, (e.clone(), v));
-            foreach p in traits.iter() {
+            for p in traits.iter() {
                 visit_path(&p.path, (e.clone(), v));
             }
-            foreach m in methods.iter() {
+            for m in methods.iter() {
                 (v.visit_trait_method)(m, (e.clone(), v));
             }
         }
@@ -222,10 +222,10 @@ pub fn visit_item<E:Clone>(i: &item, (e, v): (E, vt<E>)) {
 pub fn visit_enum_def<E:Clone>(enum_definition: &ast::enum_def,
                                tps: &Generics,
                                (e, v): (E, vt<E>)) {
-    foreach vr in enum_definition.variants.iter() {
+    for vr in enum_definition.variants.iter() {
         match vr.node.kind {
             tuple_variant_kind(ref variant_args) => {
-                foreach va in variant_args.iter() {
+                for va in variant_args.iter() {
                     (v.visit_ty)(&va.ty, (e.clone(), v));
                 }
             }
@@ -235,7 +235,7 @@ pub fn visit_enum_def<E:Clone>(enum_definition: &ast::enum_def,
             }
         }
         // Visit the disr expr if it exists
-        foreach ex in vr.node.disr_expr.iter() {
+        for ex in vr.node.disr_expr.iter() {
             (v.visit_expr)(*ex, (e.clone(), v))
         }
     }
@@ -250,12 +250,12 @@ pub fn visit_ty<E:Clone>(t: &Ty, (e, v): (E, vt<E>)) {
             (v.visit_ty)(mt.ty, (e, v));
         },
         ty_tup(ref ts) => {
-            foreach tt in ts.iter() {
+            for tt in ts.iter() {
                 (v.visit_ty)(tt, (e.clone(), v));
             }
         },
         ty_closure(ref f) => {
-            foreach a in f.decl.inputs.iter() {
+            for a in f.decl.inputs.iter() {
                 (v.visit_ty)(&a.ty, (e.clone(), v));
             }
             (v.visit_ty)(&f.decl.output, (e.clone(), v));
@@ -264,7 +264,7 @@ pub fn visit_ty<E:Clone>(t: &Ty, (e, v): (E, vt<E>)) {
             };
         },
         ty_bare_fn(ref f) => {
-            foreach a in f.decl.inputs.iter() {
+            for a in f.decl.inputs.iter() {
                 (v.visit_ty)(&a.ty, (e.clone(), v));
             }
             (v.visit_ty)(&f.decl.output, (e, v));
@@ -284,27 +284,27 @@ pub fn visit_ty<E:Clone>(t: &Ty, (e, v): (E, vt<E>)) {
 }
 
 pub fn visit_path<E:Clone>(p: &Path, (e, v): (E, vt<E>)) {
-    foreach tp in p.types.iter() { (v.visit_ty)(tp, (e.clone(), v)); }
+    for tp in p.types.iter() { (v.visit_ty)(tp, (e.clone(), v)); }
 }
 
 pub fn visit_pat<E:Clone>(p: &pat, (e, v): (E, vt<E>)) {
     match p.node {
         pat_enum(ref path, ref children) => {
             visit_path(path, (e.clone(), v));
-            foreach children in children.iter() {
-                foreach child in children.iter() {
+            for children in children.iter() {
+                for child in children.iter() {
                     (v.visit_pat)(*child, (e.clone(), v));
                 }
             }
         }
         pat_struct(ref path, ref fields, _) => {
             visit_path(path, (e.clone(), v));
-            foreach f in fields.iter() {
+            for f in fields.iter() {
                 (v.visit_pat)(f.pat, (e.clone(), v));
             }
         }
         pat_tup(ref elts) => {
-            foreach elt in elts.iter() {
+            for elt in elts.iter() {
                 (v.visit_pat)(*elt, (e.clone(), v))
             }
         },
@@ -313,7 +313,7 @@ pub fn visit_pat<E:Clone>(p: &pat, (e, v): (E, vt<E>)) {
         },
         pat_ident(_, ref path, ref inner) => {
             visit_path(path, (e.clone(), v));
-            foreach subpat in inner.iter() {
+            for subpat in inner.iter() {
                 (v.visit_pat)(*subpat, (e.clone(), v))
             }
         }
@@ -324,13 +324,13 @@ pub fn visit_pat<E:Clone>(p: &pat, (e, v): (E, vt<E>)) {
         }
         pat_wild => (),
         pat_vec(ref before, ref slice, ref after) => {
-            foreach elt in before.iter() {
+            for elt in before.iter() {
                 (v.visit_pat)(*elt, (e.clone(), v));
             }
-            foreach elt in slice.iter() {
+            for elt in slice.iter() {
                 (v.visit_pat)(*elt, (e.clone(), v));
             }
-            foreach tail in after.iter() {
+            for tail in after.iter() {
                 (v.visit_pat)(*tail, (e.clone(), v));
             }
         }
@@ -351,7 +351,7 @@ pub fn visit_foreign_item<E:Clone>(ni: &foreign_item, (e, v): (E, vt<E>)) {
 
 pub fn visit_ty_param_bounds<E:Clone>(bounds: &OptVec<TyParamBound>,
                                       (e, v): (E, vt<E>)) {
-    foreach bound in bounds.iter() {
+    for bound in bounds.iter() {
         match *bound {
             TraitTyParamBound(ref ty) => visit_trait_ref(ty, (e.clone(), v)),
             RegionTyParamBound => {}
@@ -360,13 +360,13 @@ pub fn visit_ty_param_bounds<E:Clone>(bounds: &OptVec<TyParamBound>,
 }
 
 pub fn visit_generics<E:Clone>(generics: &Generics, (e, v): (E, vt<E>)) {
-    foreach tp in generics.ty_params.iter() {
+    for tp in generics.ty_params.iter() {
         visit_ty_param_bounds(&tp.bounds, (e.clone(), v));
     }
 }
 
 pub fn visit_fn_decl<E:Clone>(fd: &fn_decl, (e, v): (E, vt<E>)) {
-    foreach a in fd.inputs.iter() {
+    for a in fd.inputs.iter() {
         (v.visit_pat)(a.pat, (e.clone(), v));
         (v.visit_ty)(&a.ty, (e.clone(), v));
     }
@@ -399,7 +399,7 @@ pub fn visit_fn<E:Clone>(fk: &fn_kind,
 }
 
 pub fn visit_ty_method<E:Clone>(m: &TypeMethod, (e, v): (E, vt<E>)) {
-    foreach a in m.decl.inputs.iter() {
+    for a in m.decl.inputs.iter() {
         (v.visit_ty)(&a.ty, (e.clone(), v));
     }
     (v.visit_generics)(&m.generics, (e.clone(), v));
@@ -420,7 +420,7 @@ pub fn visit_struct_def<E:Clone>(
     _id: NodeId,
     (e, v): (E, vt<E>)
 ) {
-    foreach f in sd.fields.iter() {
+    for f in sd.fields.iter() {
         (v.visit_struct_field)(*f, (e.clone(), v));
     }
 }
@@ -430,10 +430,10 @@ pub fn visit_struct_field<E:Clone>(sf: &struct_field, (e, v): (E, vt<E>)) {
 }
 
 pub fn visit_block<E:Clone>(b: &Block, (e, v): (E, vt<E>)) {
-    foreach vi in b.view_items.iter() {
+    for vi in b.view_items.iter() {
         (v.visit_view_item)(vi, (e.clone(), v));
     }
-    foreach s in b.stmts.iter() {
+    for s in b.stmts.iter() {
         (v.visit_stmt)(*s, (e.clone(), v));
     }
     visit_expr_opt(b.expr, (e, v));
@@ -460,7 +460,7 @@ pub fn visit_expr_opt<E>(eo: Option<@expr>, (e, v): (E, vt<E>)) {
 }
 
 pub fn visit_exprs<E:Clone>(exprs: &[@expr], (e, v): (E, vt<E>)) {
-    foreach ex in exprs.iter() { (v.visit_expr)(*ex, (e.clone(), v)); }
+    for ex in exprs.iter() { (v.visit_expr)(*ex, (e.clone(), v)); }
 }
 
 pub fn visit_mac<E>(_m: &mac, (_e, _v): (E, vt<E>)) {
@@ -477,13 +477,13 @@ pub fn visit_expr<E:Clone>(ex: @expr, (e, v): (E, vt<E>)) {
         }
         expr_struct(ref p, ref flds, base) => {
             visit_path(p, (e.clone(), v));
-            foreach f in flds.iter() {
+            for f in flds.iter() {
                 (v.visit_expr)(f.expr, (e.clone(), v));
             }
             visit_expr_opt(base, (e.clone(), v));
         }
         expr_tup(ref elts) => {
-            foreach el in elts.iter() { (v.visit_expr)(*el, (e.clone(), v)) }
+            for el in elts.iter() { (v.visit_expr)(*el, (e.clone(), v)) }
         }
         expr_call(callee, ref args, _) => {
             visit_exprs(*args, (e.clone(), v));
@@ -491,7 +491,7 @@ pub fn visit_expr<E:Clone>(ex: @expr, (e, v): (E, vt<E>)) {
         }
         expr_method_call(_, callee, _, ref tys, ref args, _) => {
             visit_exprs(*args, (e.clone(), v));
-            foreach tp in tys.iter() {
+            for tp in tys.iter() {
                 (v.visit_ty)(tp, (e.clone(), v));
             }
             (v.visit_expr)(callee, (e.clone(), v));
@@ -501,7 +501,7 @@ pub fn visit_expr<E:Clone>(ex: @expr, (e, v): (E, vt<E>)) {
             (v.visit_expr)(b, (e.clone(), v));
         }
         expr_addr_of(_, x) | expr_unary(_, _, x) |
-        expr_loop_body(x) | expr_do_body(x) => (v.visit_expr)(x, (e.clone(), v)),
+        expr_do_body(x) => (v.visit_expr)(x, (e.clone(), v)),
         expr_lit(_) => (),
         expr_cast(x, ref t) => {
             (v.visit_expr)(x, (e.clone(), v));
@@ -524,7 +524,7 @@ pub fn visit_expr<E:Clone>(ex: @expr, (e, v): (E, vt<E>)) {
         expr_loop(ref b, _) => (v.visit_block)(b, (e.clone(), v)),
         expr_match(x, ref arms) => {
             (v.visit_expr)(x, (e.clone(), v));
-            foreach a in arms.iter() { (v.visit_arm)(a, (e.clone(), v)); }
+            for a in arms.iter() { (v.visit_arm)(a, (e.clone(), v)); }
         }
         expr_fn_block(ref decl, ref body) => {
             (v.visit_fn)(
@@ -547,7 +547,7 @@ pub fn visit_expr<E:Clone>(ex: @expr, (e, v): (E, vt<E>)) {
         }
         expr_field(x, _, ref tys) => {
             (v.visit_expr)(x, (e.clone(), v));
-            foreach tp in tys.iter() {
+            for tp in tys.iter() {
                 (v.visit_ty)(tp, (e.clone(), v));
             }
         }
@@ -567,10 +567,10 @@ pub fn visit_expr<E:Clone>(ex: @expr, (e, v): (E, vt<E>)) {
         expr_mac(ref mac) => visit_mac(mac, (e.clone(), v)),
         expr_paren(x) => (v.visit_expr)(x, (e.clone(), v)),
         expr_inline_asm(ref a) => {
-            foreach &(_, input) in a.inputs.iter() {
+            for &(_, input) in a.inputs.iter() {
                 (v.visit_expr)(input, (e.clone(), v));
             }
-            foreach &(_, out) in a.outputs.iter() {
+            for &(_, out) in a.outputs.iter() {
                 (v.visit_expr)(out, (e.clone(), v));
             }
         }
@@ -579,7 +579,7 @@ pub fn visit_expr<E:Clone>(ex: @expr, (e, v): (E, vt<E>)) {
 }
 
 pub fn visit_arm<E:Clone>(a: &arm, (e, v): (E, vt<E>)) {
-    foreach p in a.pats.iter() { (v.visit_pat)(*p, (e.clone(), v)); }
+    for p in a.pats.iter() { (v.visit_pat)(*p, (e.clone(), v)); }
     visit_expr_opt(a.guard, (e.clone(), v));
     (v.visit_block)(&a.body, (e.clone(), v));
 }
index c5454a2ca95d29356809cba6d401ffe2ea7e9793..41379e6599c6e8b47e3835f9d5c9b4aa5c31379e 100644 (file)
@@ -73,8 +73,8 @@ fn horizontal_trim(lines: ~[~str]) -> ~[~str] {
         let mut i = uint::max_value;
         let mut can_trim = true;
         let mut first = true;
-        foreach line in lines.iter() {
-            foreach (j, c) in line.iter().enumerate() {
+        for line in lines.iter() {
+            for (j, c) in line.iter().enumerate() {
                 if j > i || !"* \t".contains_char(c) {
                     can_trim = false;
                     break;
index 3259d49fcd10d64fd0211f5664977497c08f011d..49deafeda40bb55c2a38f8a2e8f42fb7506d0e9e 100644 (file)
@@ -837,7 +837,7 @@ fn setup(teststr: @str) -> Env {
     // check that the given reader produces the desired stream
     // of tokens (stop checking after exhausting the expected vec)
     fn check_tokenization (env: Env, expected: ~[token::Token]) {
-        foreach expected_tok in expected.iter() {
+        for expected_tok in expected.iter() {
             let TokenAndSpan {tok:actual_tok, sp: _} =
                 env.string_reader.next_token();
             assert_eq!(&actual_tok,expected_tok);
index ac3c50a53defb230491ed8c1d7f22022f9173cd3..afa2e7a5e42f5da00dd09ac0bf08a06f26b8a1ce 100644 (file)
@@ -1623,8 +1623,6 @@ pub fn parse_bottom_expr(&self) -> @expr {
             hi = self.span.hi;
         } else if self.eat_keyword(keywords::If) {
             return self.parse_if_expr();
-        } else if self.eat_keyword(keywords::ForEach) {
-            return self.parse_for_expr();
         } else if self.eat_keyword(keywords::For) {
             return self.parse_for_expr();
         } else if self.eat_keyword(keywords::Do) {
@@ -3150,7 +3148,7 @@ fn parse_block_tail_(&self, lo: BytePos, s: BlockCheckMode,
         } = self.parse_items_and_view_items(first_item_attrs,
                                             false, false);
 
-        foreach item in items.iter() {
+        for item in items.iter() {
             let decl = @spanned(item.span.lo, item.span.hi, decl_item(*item));
             stmts.push(@spanned(item.span.lo, item.span.hi,
                                 stmt_decl(decl, self.get_id())));
@@ -3755,7 +3753,7 @@ fn parse_item_struct(&self) -> item_info {
             fields = ~[];
             while *self.token != token::RBRACE {
                 let r = self.parse_struct_decl_field();
-                foreach struct_field in r.iter() {
+                for struct_field in r.iter() {
                     fields.push(*struct_field)
                 }
             }
@@ -4038,7 +4036,7 @@ fn eval_src_mod_from_path(&self,
             Some(i) => {
                 let stack = &self.sess.included_mod_stack;
                 let mut err = ~"circular modules: ";
-                foreach p in stack.slice(i, stack.len()).iter() {
+                for p in stack.slice(i, stack.len()).iter() {
                     err.push_str(p.to_str());
                     err.push_str(" -> ");
                 }
@@ -4252,7 +4250,7 @@ fn parse_struct_def(&self) -> @struct_def {
         let mut fields: ~[@struct_field] = ~[];
         while *self.token != token::RBRACE {
             let r = self.parse_struct_decl_field();
-            foreach struct_field in r.iter() {
+            for struct_field in r.iter() {
                 fields.push(*struct_field);
             }
         }
@@ -4292,7 +4290,7 @@ fn parse_enum_def(&self, _generics: &ast::Generics) -> enum_def {
                     seq_sep_trailing_disallowed(token::COMMA),
                     |p| p.parse_ty(false)
                 );
-                foreach ty in arg_tys.consume_iter() {
+                for ty in arg_tys.consume_iter() {
                     args.push(ast::variant_arg {
                         ty: ty,
                         id: self.get_id(),
@@ -4401,7 +4399,7 @@ fn parse_opt_abis(&self) -> Option<AbiSet> {
                 self.bump();
                 let the_string = ident_to_str(&s);
                 let mut abis = AbiSet::empty();
-                foreach word in the_string.word_iter() {
+                for word in the_string.word_iter() {
                     match abi::lookup(word) {
                         Some(abi) => {
                             if abis.contains(abi) {
index 706357320a5f4d0f5cc80139209c35e6901cdff6..39668e5c8b29b22613e30ab034fd5fcbd5b7e198 100644 (file)
@@ -471,10 +471,9 @@ fn mk_fresh_ident_interner() -> @ident_interner {
         "use",                // 61
         "while",              // 62
         "in",                 // 63
-        "foreach",            // 64
 
-        "be",                 // 65
-        "pure",               // 66
+        "be",                 // 64
+        "pure",               // 65
     ];
 
     @ident_interner {
@@ -571,7 +570,6 @@ pub enum Keyword {
         False,
         Fn,
         For,
-        ForEach,
         If,
         Impl,
         In,
@@ -615,7 +613,6 @@ pub fn to_ident(&self) -> ident {
                 False => ident { name: 39, ctxt: 0 },
                 Fn => ident { name: 40, ctxt: 0 },
                 For => ident { name: 41, ctxt: 0 },
-                ForEach => ident { name: 64, ctxt: 0 },
                 If => ident { name: 42, ctxt: 0 },
                 Impl => ident { name: 43, ctxt: 0 },
                 In => ident { name: 63, ctxt: 0 },
@@ -628,7 +625,7 @@ pub fn to_ident(&self) -> ident {
                 Once => ident { name: 50, ctxt: 0 },
                 Priv => ident { name: 51, ctxt: 0 },
                 Pub => ident { name: 52, ctxt: 0 },
-                Pure => ident { name: 66, ctxt: 0 },
+                Pure => ident { name: 65, ctxt: 0 },
                 Ref => ident { name: 53, ctxt: 0 },
                 Return => ident { name: 54, ctxt: 0 },
                 Static => ident { name: 27, ctxt: 0 },
@@ -641,7 +638,7 @@ pub fn to_ident(&self) -> ident {
                 Unsafe => ident { name: 60, ctxt: 0 },
                 Use => ident { name: 61, ctxt: 0 },
                 While => ident { name: 62, ctxt: 0 },
-                Be => ident { name: 65, ctxt: 0 },
+                Be => ident { name: 64, ctxt: 0 },
             }
         }
     }
@@ -657,7 +654,7 @@ pub fn is_keyword(kw: keywords::Keyword, tok: &Token) -> bool {
 pub fn is_any_keyword(tok: &Token) -> bool {
     match *tok {
         token::IDENT(sid, false) => match sid.name {
-            8 | 27 | 32 .. 66 => true,
+            8 | 27 | 32 .. 65 => true,
             _ => false,
         },
         _ => false
@@ -667,7 +664,7 @@ pub fn is_any_keyword(tok: &Token) -> bool {
 pub fn is_strict_keyword(tok: &Token) -> bool {
     match *tok {
         token::IDENT(sid, false) => match sid.name {
-            8 | 27 | 32 .. 64 => true,
+            8 | 27 | 32 .. 63 => true,
             _ => false,
         },
         _ => false,
@@ -677,7 +674,7 @@ pub fn is_strict_keyword(tok: &Token) -> bool {
 pub fn is_reserved_keyword(tok: &Token) -> bool {
     match *tok {
         token::IDENT(sid, false) => match sid.name {
-            65 .. 66 => true,
+            64 .. 65 => true,
             _ => false,
         },
         _ => false,
index 7d885837a60655e7509eae2e5e4795c7f276dd2d..174b0f8e4517cba240162b4cfadec27f40876390 100644 (file)
@@ -320,7 +320,7 @@ pub fn synth_comment(s: @ps, text: ~str) {
 pub fn commasep<T>(s: @ps, b: breaks, elts: &[T], op: &fn(@ps, &T)) {
     box(s, 0u, b);
     let mut first = true;
-    foreach elt in elts.iter() {
+    for elt in elts.iter() {
         if first { first = false; } else { word_space(s, ","); }
         op(s, elt);
     }
@@ -333,7 +333,7 @@ pub fn commasep_cmnt<T>(s: @ps, b: breaks, elts: &[T], op: &fn(@ps, &T),
     box(s, 0u, b);
     let len = elts.len();
     let mut i = 0u;
-    foreach elt in elts.iter() {
+    for elt in elts.iter() {
         maybe_print_comment(s, get_span(elt).hi);
         op(s, elt);
         i += 1u;
@@ -353,23 +353,23 @@ pub fn commasep_exprs(s: @ps, b: breaks, exprs: &[@ast::expr]) {
 
 pub fn print_mod(s: @ps, _mod: &ast::_mod, attrs: &[ast::Attribute]) {
     print_inner_attributes(s, attrs);
-    foreach vitem in _mod.view_items.iter() {
+    for vitem in _mod.view_items.iter() {
         print_view_item(s, vitem);
     }
-    foreach item in _mod.items.iter() { print_item(s, *item); }
+    for item in _mod.items.iter() { print_item(s, *item); }
 }
 
 pub fn print_foreign_mod(s: @ps, nmod: &ast::foreign_mod,
                          attrs: &[ast::Attribute]) {
     print_inner_attributes(s, attrs);
-    foreach vitem in nmod.view_items.iter() {
+    for vitem in nmod.view_items.iter() {
         print_view_item(s, vitem);
     }
-    foreach item in nmod.items.iter() { print_foreign_item(s, *item); }
+    for item in nmod.items.iter() { print_foreign_item(s, *item); }
 }
 
 pub fn print_opt_lifetime(s: @ps, lifetime: &Option<ast::Lifetime>) {
-    foreach l in lifetime.iter() {
+    for l in lifetime.iter() {
         print_lifetime(s, l);
         nbsp(s);
     }
@@ -589,7 +589,7 @@ pub fn print_item(s: @ps, item: &ast::item) {
             word(s.s, ";");
         } else {
             bopen(s);
-            foreach meth in methods.iter() {
+            for meth in methods.iter() {
                print_method(s, *meth);
             }
             bclose(s, item.span);
@@ -601,7 +601,7 @@ pub fn print_item(s: @ps, item: &ast::item) {
         print_generics(s, generics);
         if traits.len() != 0u {
             word(s.s, ":");
-            foreach (i, trait_) in traits.iter().enumerate() {
+            for (i, trait_) in traits.iter().enumerate() {
                 nbsp(s);
                 if i != 0 {
                     word_space(s, "+");
@@ -611,7 +611,7 @@ pub fn print_item(s: @ps, item: &ast::item) {
         }
         word(s.s, " ");
         bopen(s);
-        foreach meth in methods.iter() {
+        for meth in methods.iter() {
             print_trait_method(s, meth);
         }
         bclose(s, item.span);
@@ -650,7 +650,7 @@ pub fn print_variants(s: @ps,
                       variants: &[ast::variant],
                       span: codemap::span) {
     bopen(s);
-    foreach v in variants.iter() {
+    for v in variants.iter() {
         space_if_not_bol(s);
         maybe_print_comment(s, v.span.lo);
         print_outer_attributes(s, v.node.attrs);
@@ -715,7 +715,7 @@ pub fn print_struct(s: @ps,
         bopen(s);
         hardbreak_if_not_bol(s);
 
-        foreach field in struct_def.fields.iter() {
+        for field in struct_def.fields.iter() {
             match field.node.kind {
                 ast::unnamed_field => fail!("unexpected unnamed field"),
                 ast::named_field(ident, visibility) => {
@@ -750,7 +750,7 @@ pub fn print_tt(s: @ps, tt: &ast::token_tree) {
       }
       ast::tt_seq(_, ref tts, ref sep, zerok) => {
         word(s.s, "$(");
-        foreach tt_elt in (*tts).iter() { print_tt(s, tt_elt); }
+        for tt_elt in (*tts).iter() { print_tt(s, tt_elt); }
         word(s.s, ")");
         match (*sep) {
           Some(ref tk) => word(s.s, parse::token::to_str(s.intr, tk)),
@@ -767,7 +767,7 @@ pub fn print_tt(s: @ps, tt: &ast::token_tree) {
 
 pub fn print_tts(s: @ps, tts: & &[ast::token_tree]) {
     ibox(s, 0);
-    foreach (i, tt) in tts.iter().enumerate() {
+    for (i, tt) in tts.iter().enumerate() {
         if i != 0 {
             space(s.s);
         }
@@ -844,7 +844,7 @@ pub fn print_method(s: @ps, meth: &ast::method) {
 
 pub fn print_outer_attributes(s: @ps, attrs: &[ast::Attribute]) {
     let mut count = 0;
-    foreach attr in attrs.iter() {
+    for attr in attrs.iter() {
         match attr.node.style {
           ast::AttrOuter => { print_attribute(s, attr); count += 1; }
           _ => {/* fallthrough */ }
@@ -855,7 +855,7 @@ pub fn print_outer_attributes(s: @ps, attrs: &[ast::Attribute]) {
 
 pub fn print_inner_attributes(s: @ps, attrs: &[ast::Attribute]) {
     let mut count = 0;
-    foreach attr in attrs.iter() {
+    for attr in attrs.iter() {
         match attr.node.style {
           ast::AttrInner => {
             print_attribute(s, attr);
@@ -960,8 +960,8 @@ pub fn print_possibly_embedded_block_(s: @ps,
 
     print_inner_attributes(s, attrs);
 
-    foreach vi in blk.view_items.iter() { print_view_item(s, vi); }
-    foreach st in blk.stmts.iter() {
+    for vi in blk.view_items.iter() { print_view_item(s, vi); }
+    for st in blk.stmts.iter() {
         print_stmt(s, *st);
     }
     match blk.expr {
@@ -1087,7 +1087,7 @@ pub fn print_call_post(s: @ps,
         nbsp(s);
         match blk.get().node {
           // need to handle closures specifically
-          ast::expr_do_body(e) | ast::expr_loop_body(e) => {
+          ast::expr_do_body(e) => {
             end(s); // we close our head box; closure
                     // will create it's own.
             print_expr(s, e);
@@ -1228,7 +1228,7 @@ fn print_field(s: @ps, field: &ast::Field) {
         print_block(s, blk);
       }
       ast::expr_for_loop(pat, iter, ref blk) => {
-        head(s, "foreach");
+        head(s, "for");
         print_pat(s, pat);
         space(s.s);
         word_space(s, "in");
@@ -1237,7 +1237,7 @@ fn print_field(s: @ps, field: &ast::Field) {
         print_block(s, blk);
       }
       ast::expr_loop(ref blk, opt_ident) => {
-        foreach ident in opt_ident.iter() {
+        for ident in opt_ident.iter() {
             word(s.s, "'");
             print_ident(s, *ident);
             word_space(s, ":");
@@ -1254,12 +1254,12 @@ fn print_field(s: @ps, field: &ast::Field) {
         space(s.s);
         bopen(s);
         let len = arms.len();
-        foreach (i, arm) in arms.iter().enumerate() {
+        for (i, arm) in arms.iter().enumerate() {
             space(s.s);
             cbox(s, indent_unit);
             ibox(s, 0u);
             let mut first = true;
-            foreach p in arm.pats.iter() {
+            for p in arm.pats.iter() {
                 if first {
                     first = false;
                 } else { space(s.s); word_space(s, "|"); }
@@ -1338,9 +1338,6 @@ fn print_field(s: @ps, field: &ast::Field) {
         // empty box to satisfy the close.
         ibox(s, 0);
       }
-      ast::expr_loop_body(body) => {
-        print_expr(s, body);
-      }
       ast::expr_do_body(body) => {
         print_expr(s, body);
       }
@@ -1385,7 +1382,7 @@ fn print_field(s: @ps, field: &ast::Field) {
       ast::expr_break(opt_ident) => {
         word(s.s, "break");
         space(s.s);
-        foreach ident in opt_ident.iter() {
+        for ident in opt_ident.iter() {
             word(s.s, "'");
             print_ident(s, *ident);
             space(s.s);
@@ -1394,7 +1391,7 @@ fn print_field(s: @ps, field: &ast::Field) {
       ast::expr_again(opt_ident) => {
         word(s.s, "loop");
         space(s.s);
-        foreach ident in opt_ident.iter() {
+        for ident in opt_ident.iter() {
             word(s.s, "'");
             print_ident(s, *ident);
             space(s.s)
@@ -1425,7 +1422,7 @@ fn print_field(s: @ps, field: &ast::Field) {
         popen(s);
         print_string(s, a.asm);
         word_space(s, ":");
-        foreach &(co, o) in a.outputs.iter() {
+        for &(co, o) in a.outputs.iter() {
             print_string(s, co);
             popen(s);
             print_expr(s, o);
@@ -1433,7 +1430,7 @@ fn print_field(s: @ps, field: &ast::Field) {
             word_space(s, ",");
         }
         word_space(s, ":");
-        foreach &(co, o) in a.inputs.iter() {
+        for &(co, o) in a.inputs.iter() {
             print_string(s, co);
             popen(s);
             print_expr(s, o);
@@ -1512,7 +1509,7 @@ fn print_path_(s: @ps, path: &ast::Path, colons_before_params: bool,
     maybe_print_comment(s, path.span.lo);
     if path.global { word(s.s, "::"); }
     let mut first = true;
-    foreach id in path.idents.iter() {
+    for id in path.idents.iter() {
         if first { first = false; } else { word(s.s, "::"); }
         print_ident(s, *id);
     }
@@ -1525,7 +1522,7 @@ fn print_path_(s: @ps, path: &ast::Path, colons_before_params: bool,
         if path.rp.is_some() || !path.types.is_empty() {
             word(s.s, "<");
 
-            foreach r in path.rp.iter() {
+            for r in path.rp.iter() {
                 print_lifetime(s, r);
                 if !path.types.is_empty() {
                     word_space(s, ",");
@@ -1639,7 +1636,7 @@ fn print_field(s: @ps, f: &ast::field_pat) {
         do commasep(s, inconsistent, *before) |s, &p| {
             print_pat(s, p);
         }
-        foreach &p in slice.iter() {
+        for &p in slice.iter() {
             if !before.is_empty() { word_space(s, ","); }
             word(s.s, "..");
             print_pat(s, p);
@@ -1699,11 +1696,11 @@ pub fn print_fn_args(s: @ps, decl: &ast::fn_decl,
     // self type and the args all in the same box.
     box(s, 0u, inconsistent);
     let mut first = true;
-    foreach explicit_self in opt_explicit_self.iter() {
+    for explicit_self in opt_explicit_self.iter() {
         first = !print_explicit_self(s, *explicit_self);
     }
 
-    foreach arg in decl.inputs.iter() {
+    for arg in decl.inputs.iter() {
         if first { first = false; } else { word_space(s, ","); }
         print_arg(s, arg);
     }
@@ -1750,7 +1747,7 @@ pub fn print_bounds(s: @ps, bounds: &OptVec<ast::TyParamBound>,
     if !bounds.is_empty() {
         word(s.s, ":");
         let mut first = true;
-        foreach bound in bounds.iter() {
+        for bound in bounds.iter() {
             nbsp(s);
             if first {
                 first = false;
@@ -1790,7 +1787,7 @@ fn print_item(s: @ps, generics: &ast::Generics, idx: uint) {
         }
 
         let mut ints = ~[];
-        foreach i in range(0u, total) {
+        for i in range(0u, total) {
             ints.push(i);
         }
 
@@ -1949,10 +1946,10 @@ pub fn print_ty_fn(s: @ps,
     // self type and the args all in the same box.
     box(s, 0u, inconsistent);
     let mut first = true;
-    foreach explicit_self in opt_explicit_self.iter() {
+    for explicit_self in opt_explicit_self.iter() {
         first = !print_explicit_self(s, *explicit_self);
     }
-    foreach arg in decl.inputs.iter() {
+    for arg in decl.inputs.iter() {
         if first { first = false; } else { word_space(s, ","); }
         print_arg(s, arg);
     }
@@ -2108,7 +2105,7 @@ pub fn print_comment(s: @ps, cmnt: &comments::cmnt) {
       }
       comments::isolated => {
         pprust::hardbreak_if_not_bol(s);
-        foreach line in cmnt.lines.iter() {
+        for line in cmnt.lines.iter() {
             // Don't print empty lines because they will end up as trailing
             // whitespace
             if !line.is_empty() { word(s.s, *line); }
@@ -2122,7 +2119,7 @@ pub fn print_comment(s: @ps, cmnt: &comments::cmnt) {
             hardbreak(s.s);
         } else {
             ibox(s, 0u);
-            foreach line in cmnt.lines.iter() {
+            for line in cmnt.lines.iter() {
                 if !line.is_empty() { word(s.s, *line); }
                 hardbreak(s.s);
             }
index b9c8c3f4e4c89a45bbe65d7faf74b6f7b51a71c3..46676ce1093fba81e917b8a8aebcc535d2bfb5b9 100644 (file)
@@ -31,7 +31,7 @@ pub fn new() -> Interner<T> {
 
     pub fn prefill(init: &[T]) -> Interner<T> {
         let rv = Interner::new();
-        foreach v in init.iter() {
+        for v in init.iter() {
             rv.intern((*v).clone());
         }
         rv
@@ -93,7 +93,7 @@ pub fn new() -> StrInterner {
 
     pub fn prefill(init: &[&str]) -> StrInterner {
         let rv = StrInterner::new();
-        foreach &v in init.iter() { rv.intern(v); }
+        for &v in init.iter() { rv.intern(v); }
         rv
     }
 
index 6f228a9a43b984a5c9a38f28aeedf931fded6331..7aa52bc13e341af01b30b4d3703c8ef3f460238e 100644 (file)
@@ -93,10 +93,10 @@ pub fn visit_crate<E:Clone>(visitor: @Visitor<E>, crate: &Crate, env: E) {
 }
 
 pub fn visit_mod<E:Clone>(visitor: @Visitor<E>, module: &_mod, env: E) {
-    foreach view_item in module.view_items.iter() {
+    for view_item in module.view_items.iter() {
         visitor.visit_view_item(view_item, env.clone())
     }
-    foreach item in module.items.iter() {
+    for item in module.items.iter() {
         visitor.visit_item(*item, env.clone())
     }
 }
@@ -138,10 +138,10 @@ pub fn visit_item<E:Clone>(visitor: @Visitor<E>, item: &item, env: E) {
             visitor.visit_mod(module, item.span, item.id, env)
         }
         item_foreign_mod(ref foreign_module) => {
-            foreach view_item in foreign_module.view_items.iter() {
+            for view_item in foreign_module.view_items.iter() {
                 visitor.visit_view_item(view_item, env.clone())
             }
-            foreach foreign_item in foreign_module.items.iter() {
+            for foreign_item in foreign_module.items.iter() {
                 visitor.visit_foreign_item(*foreign_item, env.clone())
             }
         }
@@ -158,11 +158,11 @@ pub fn visit_item<E:Clone>(visitor: @Visitor<E>, item: &item, env: E) {
                   ref typ,
                   ref methods) => {
             visitor.visit_generics(type_parameters, env.clone());
-            foreach trait_reference in trait_references.iter() {
+            for trait_reference in trait_references.iter() {
                 visit_trait_ref(visitor, trait_reference, env.clone())
             }
             visitor.visit_ty(typ, env.clone());
-            foreach method in methods.iter() {
+            for method in methods.iter() {
                 visit_method_helper(visitor, *method, env.clone())
             }
         }
@@ -176,10 +176,10 @@ pub fn visit_item<E:Clone>(visitor: @Visitor<E>, item: &item, env: E) {
         }
         item_trait(ref generics, ref trait_paths, ref methods) => {
             visitor.visit_generics(generics, env.clone());
-            foreach trait_path in trait_paths.iter() {
+            for trait_path in trait_paths.iter() {
                 visit_path(visitor, &trait_path.path, env.clone())
             }
-            foreach method in methods.iter() {
+            for method in methods.iter() {
                 visitor.visit_trait_method(method, env.clone())
             }
         }
@@ -191,10 +191,10 @@ pub fn visit_enum_def<E:Clone>(visitor: @Visitor<E>,
                                enum_definition: &ast::enum_def,
                                generics: &Generics,
                                env: E) {
-    foreach variant in enum_definition.variants.iter() {
+    for variant in enum_definition.variants.iter() {
         match variant.node.kind {
             tuple_variant_kind(ref variant_arguments) => {
-                foreach variant_argument in variant_arguments.iter() {
+                for variant_argument in variant_arguments.iter() {
                     visitor.visit_ty(&variant_argument.ty, env.clone())
                 }
             }
@@ -221,28 +221,28 @@ pub fn visit_ty<E:Clone>(visitor: @Visitor<E>, typ: &Ty, env: E) {
             visitor.visit_ty(mutable_type.ty, env)
         }
         ty_tup(ref tuple_element_types) => {
-            foreach tuple_element_type in tuple_element_types.iter() {
+            for tuple_element_type in tuple_element_types.iter() {
                 visitor.visit_ty(tuple_element_type, env.clone())
             }
         }
         ty_closure(ref function_declaration) => {
-             foreach argument in function_declaration.decl.inputs.iter() {
+             for argument in function_declaration.decl.inputs.iter() {
                 visitor.visit_ty(&argument.ty, env.clone())
              }
              visitor.visit_ty(&function_declaration.decl.output, env.clone());
-             foreach bounds in function_declaration.bounds.iter() {
+             for bounds in function_declaration.bounds.iter() {
                 visit_ty_param_bounds(visitor, bounds, env.clone())
              }
         }
         ty_bare_fn(ref function_declaration) => {
-            foreach argument in function_declaration.decl.inputs.iter() {
+            for argument in function_declaration.decl.inputs.iter() {
                 visitor.visit_ty(&argument.ty, env.clone())
             }
             visitor.visit_ty(&function_declaration.decl.output, env.clone())
         }
         ty_path(ref path, ref bounds, _) => {
             visit_path(visitor, path, env.clone());
-            foreach bounds in bounds.iter() {
+            for bounds in bounds.iter() {
                 visit_ty_param_bounds(visitor, bounds, env.clone())
             }
         }
@@ -255,7 +255,7 @@ pub fn visit_ty<E:Clone>(visitor: @Visitor<E>, typ: &Ty, env: E) {
 }
 
 pub fn visit_path<E:Clone>(visitor: @Visitor<E>, path: &Path, env: E) {
-    foreach typ in path.types.iter() {
+    for typ in path.types.iter() {
         visitor.visit_ty(typ, env.clone())
     }
 }
@@ -264,20 +264,20 @@ pub fn visit_pat<E:Clone>(visitor: @Visitor<E>, pattern: &pat, env: E) {
     match pattern.node {
         pat_enum(ref path, ref children) => {
             visit_path(visitor, path, env.clone());
-            foreach children in children.iter() {
-                foreach child in children.iter() {
+            for children in children.iter() {
+                for child in children.iter() {
                     visitor.visit_pat(*child, env.clone())
                 }
             }
         }
         pat_struct(ref path, ref fields, _) => {
             visit_path(visitor, path, env.clone());
-            foreach field in fields.iter() {
+            for field in fields.iter() {
                 visitor.visit_pat(field.pat, env.clone())
             }
         }
         pat_tup(ref tuple_elements) => {
-            foreach tuple_element in tuple_elements.iter() {
+            for tuple_element in tuple_elements.iter() {
                 visitor.visit_pat(*tuple_element, env.clone())
             }
         }
@@ -300,13 +300,13 @@ pub fn visit_pat<E:Clone>(visitor: @Visitor<E>, pattern: &pat, env: E) {
         }
         pat_wild => (),
         pat_vec(ref prepattern, ref slice_pattern, ref postpatterns) => {
-            foreach prepattern in prepattern.iter() {
+            for prepattern in prepattern.iter() {
                 visitor.visit_pat(*prepattern, env.clone())
             }
-            foreach slice_pattern in slice_pattern.iter() {
+            for slice_pattern in slice_pattern.iter() {
                 visitor.visit_pat(*slice_pattern, env.clone())
             }
-            foreach postpattern in postpatterns.iter() {
+            for postpattern in postpatterns.iter() {
                 visitor.visit_pat(*postpattern, env.clone())
             }
         }
@@ -328,7 +328,7 @@ pub fn visit_foreign_item<E:Clone>(visitor: @Visitor<E>,
 pub fn visit_ty_param_bounds<E:Clone>(visitor: @Visitor<E>,
                                       bounds: &OptVec<TyParamBound>,
                                       env: E) {
-    foreach bound in bounds.iter() {
+    for bound in bounds.iter() {
         match *bound {
             TraitTyParamBound(ref typ) => {
                 visit_trait_ref(visitor, typ, env.clone())
@@ -341,7 +341,7 @@ pub fn visit_ty_param_bounds<E:Clone>(visitor: @Visitor<E>,
 pub fn visit_generics<E:Clone>(visitor: @Visitor<E>,
                                generics: &Generics,
                                env: E) {
-    foreach type_parameter in generics.ty_params.iter() {
+    for type_parameter in generics.ty_params.iter() {
         visit_ty_param_bounds(visitor, &type_parameter.bounds, env.clone())
     }
 }
@@ -349,7 +349,7 @@ pub fn visit_generics<E:Clone>(visitor: @Visitor<E>,
 pub fn visit_fn_decl<E:Clone>(visitor: @Visitor<E>,
                               function_declaration: &fn_decl,
                               env: E) {
-    foreach argument in function_declaration.inputs.iter() {
+    for argument in function_declaration.inputs.iter() {
         visitor.visit_pat(argument.pat, env.clone());
         visitor.visit_ty(&argument.ty, env.clone())
     }
@@ -387,7 +387,7 @@ pub fn visit_fn<E:Clone>(visitor: @Visitor<E>,
 pub fn visit_ty_method<E:Clone>(visitor: @Visitor<E>,
                                 method_type: &TypeMethod,
                                 env: E) {
-    foreach argument_type in method_type.decl.inputs.iter() {
+    for argument_type in method_type.decl.inputs.iter() {
         visitor.visit_ty(&argument_type.ty, env.clone())
     }
     visitor.visit_generics(&method_type.generics, env.clone());
@@ -411,7 +411,7 @@ pub fn visit_struct_def<E:Clone>(visitor: @Visitor<E>,
                                  _: &Generics,
                                  _: NodeId,
                                  env: E) {
-    foreach field in struct_definition.fields.iter() {
+    for field in struct_definition.fields.iter() {
         visitor.visit_struct_field(*field, env.clone())
     }
 }
@@ -423,10 +423,10 @@ pub fn visit_struct_field<E:Clone>(visitor: @Visitor<E>,
 }
 
 pub fn visit_block<E:Clone>(visitor: @Visitor<E>, block: &Block, env: E) {
-    foreach view_item in block.view_items.iter() {
+    for view_item in block.view_items.iter() {
         visitor.visit_view_item(view_item, env.clone())
     }
-    foreach statement in block.stmts.iter() {
+    for statement in block.stmts.iter() {
         visitor.visit_stmt(*statement, env.clone())
     }
     visit_expr_opt(visitor, block.expr, env)
@@ -461,7 +461,7 @@ pub fn visit_expr_opt<E>(visitor: @Visitor<E>,
 pub fn visit_exprs<E:Clone>(visitor: @Visitor<E>,
                             expressions: &[@expr],
                             env: E) {
-    foreach expression in expressions.iter() {
+    for expression in expressions.iter() {
         visitor.visit_expr(*expression, env.clone())
     }
 }
@@ -484,25 +484,25 @@ pub fn visit_expr<E:Clone>(visitor: @Visitor<E>, expression: @expr, env: E) {
         }
         expr_struct(ref path, ref fields, optional_base) => {
             visit_path(visitor, path, env.clone());
-            foreach field in fields.iter() {
+            for field in fields.iter() {
                 visitor.visit_expr(field.expr, env.clone())
             }
             visit_expr_opt(visitor, optional_base, env.clone())
         }
         expr_tup(ref subexpressions) => {
-            foreach subexpression in subexpressions.iter() {
+            for subexpression in subexpressions.iter() {
                 visitor.visit_expr(*subexpression, env.clone())
             }
         }
         expr_call(callee_expression, ref arguments, _) => {
-            foreach argument in arguments.iter() {
+            for argument in arguments.iter() {
                 visitor.visit_expr(*argument, env.clone())
             }
             visitor.visit_expr(callee_expression, env.clone())
         }
         expr_method_call(_, callee, _, ref types, ref arguments, _) => {
             visit_exprs(visitor, *arguments, env.clone());
-            foreach typ in types.iter() {
+            for typ in types.iter() {
                 visitor.visit_ty(typ, env.clone())
             }
             visitor.visit_expr(callee, env.clone())
@@ -513,7 +513,6 @@ pub fn visit_expr<E:Clone>(visitor: @Visitor<E>, expression: @expr, env: E) {
         }
         expr_addr_of(_, subexpression) |
         expr_unary(_, _, subexpression) |
-        expr_loop_body(subexpression) |
         expr_do_body(subexpression) => {
             visitor.visit_expr(subexpression, env.clone())
         }
@@ -539,7 +538,7 @@ pub fn visit_expr<E:Clone>(visitor: @Visitor<E>, expression: @expr, env: E) {
         expr_loop(ref block, _) => visitor.visit_block(block, env.clone()),
         expr_match(subexpression, ref arms) => {
             visitor.visit_expr(subexpression, env.clone());
-            foreach arm in arms.iter() {
+            for arm in arms.iter() {
                 visitor.visit_arm(arm, env.clone())
             }
         }
@@ -562,7 +561,7 @@ pub fn visit_expr<E:Clone>(visitor: @Visitor<E>, expression: @expr, env: E) {
         }
         expr_field(subexpression, _, ref types) => {
             visitor.visit_expr(subexpression, env.clone());
-            foreach typ in types.iter() {
+            for typ in types.iter() {
                 visitor.visit_ty(typ, env.clone())
             }
         }
@@ -584,10 +583,10 @@ pub fn visit_expr<E:Clone>(visitor: @Visitor<E>, expression: @expr, env: E) {
             visitor.visit_expr(subexpression, env.clone())
         }
         expr_inline_asm(ref assembler) => {
-            foreach &(_, input) in assembler.inputs.iter() {
+            for &(_, input) in assembler.inputs.iter() {
                 visitor.visit_expr(input, env.clone())
             }
-            foreach &(_, output) in assembler.outputs.iter() {
+            for &(_, output) in assembler.outputs.iter() {
                 visitor.visit_expr(output, env.clone())
             }
         }
@@ -597,7 +596,7 @@ pub fn visit_expr<E:Clone>(visitor: @Visitor<E>, expression: @expr, env: E) {
 }
 
 pub fn visit_arm<E:Clone>(visitor: @Visitor<E>, arm: &arm, env: E) {
-    foreach pattern in arm.pats.iter() {
+    for pattern in arm.pats.iter() {
         visitor.visit_pat(*pattern, env.clone())
     }
     visit_expr_opt(visitor, arm.guard, env.clone());
index 2e9f0d21fe321849a4759a01fc28eae82ef196d6..f67442eee27d3d075a65cf7f9a70f7ec6649ffd1 160000 (submodule)
--- a/src/llvm
+++ b/src/llvm
@@ -1 +1 @@
-Subproject commit 2e9f0d21fe321849a4759a01fc28eae82ef196d6
+Subproject commit f67442eee27d3d075a65cf7f9a70f7ec6649ffd1
index 72979d67eefc86ff7612ef7b6e33d5eacffccb78..2f6b8acb0725c3c12996f5c08a7b6d0991ab3af8 100644 (file)
@@ -609,10 +609,21 @@ when unwinding through __morestack).
 void
 rust_task::reset_stack_limit() {
     uintptr_t sp = get_sp();
+    bool reseted = false;
     while (!sp_in_stk_seg(sp, stk)) {
+        reseted = true;
         prev_stack();
         assert(stk != NULL && "Failed to find the current stack");
     }
+
+    // Each call to prev_stack will record the stack limit. If we *didn't*
+    // call prev_stack then we still need to record it now to catch a corner case:
+    // the throw to initiate unwinding starts on the C stack while sp limit is 0.
+    // If we don't set the limit here then the rust code run subsequently will
+    // will veer into the red zone. Lame!
+    if (!reseted) {
+        record_stack_limit();
+    }
 }
 
 void
index beaa7e1daef9c1101ec19c93a56941684607b13d..04c062072d6cb4d8fd9dc4152f0af3f028f95f25 100644 (file)
@@ -113,6 +113,7 @@ public:
 
   virtual uint8_t *allocateDataSection(uintptr_t Size, unsigned Alignment,
                                        unsigned SectionID, bool isReadOnly);
+  bool finalizeMemory(std::string *ErrMsg) { return false; }
 
   virtual bool applyPermissions(std::string *Str);
 
@@ -340,7 +341,6 @@ LLVMRustBuildJIT(void* mem,
 
   std::string Err;
   TargetOptions Options;
-  Options.JITExceptionHandling = true;
   Options.JITEmitDebugInfo = true;
   Options.NoFramePointerElim = true;
   Options.EnableSegmentedStacks = EnableSegmentedStacks;
@@ -516,15 +516,6 @@ extern "C" LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B,
 extern "C" LLVMValueRef LLVMBuildAtomicFence(LLVMBuilderRef B, AtomicOrdering order) {
     return wrap(unwrap(B)->CreateFence(order));
 }
-extern "C" LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B,
-                                           AtomicRMWInst::BinOp op,
-                                           LLVMValueRef target,
-                                           LLVMValueRef source,
-                                           AtomicOrdering order) {
-    return wrap(unwrap(B)->CreateAtomicRMW(op,
-                                           unwrap(target), unwrap(source),
-                                           order));
-}
 
 extern "C" void LLVMSetDebug(int Enabled) {
 #ifndef NDEBUG
index 9b8f0e3a46214d9585abfc862cd478df702129e2..670eebbed132743548cd4cfb70d98314a5e8de7d 100644 (file)
@@ -1,4 +1,4 @@
 # If this file is modified, then llvm will be forcibly cleaned and then rebuilt.
 # The actual contents of this file do not matter, but to trigger a change on the
 # build bots then the contents should be changed so git updates the mtime.
-2013-07-03
+2013-07-04
index d4202abd2854e685a9e6c0774143bbf67b5eb6fd..eeefb19883eb38666957f25fa5f4247439556e3f 100644 (file)
@@ -8,8 +8,10 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
 #include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
 #include "llvm/Linker.h"
 #include "llvm/PassManager.h"
 #include "llvm/IR/InlineAsm.h"
index 42da4f7d4331f1d583dbe3727702050ada8f6a8d..d5c27fb74eb950f8f83087cf8529f50052f22b03 100644 (file)
@@ -1,3 +1,11 @@
+S 2013-08-03 18e3db7
+  freebsd-x86_64 addf91b20416bf21a7c53ea9508bc302ec957ce9
+  linux-i386 ce103c323c0a0b75d1307014f1d6f8ff4d03c873
+  linux-x86_64 6828d854d174c7b514a4350dfdd92c059df059d6
+  macos-i386 ef4b67859146cacce54367f9243b5da9f9fde386
+  macos-x86_64 936d4e170d8207b40df64c5eca3a3a27b3eee08a
+  winnt-i386 332f0181fb68fcbeaaae342d5fb22889aa902152
+
 S 2013-07-31 389aba0
   freebsd-x86_64 c9783bb5723404be8ae371d265bbb9a1c679e4db
   linux-i386 7413d98325b23dc461ced92757e5e19bec750dbd
index 85f968cc2e1ca19c2e7ccaa065b2271d4c7bf387..c9809438d94622020cd6798cdab3c2f50b3559c2 100644 (file)
@@ -28,7 +28,7 @@ pub fn alist_get<A:Clone + 'static,
                  k: A)
                  -> B {
     let eq_fn = lst.eq_fn;
-    foreach entry in lst.data.iter() {
+    for entry in lst.data.iter() {
         if eq_fn(entry.key.clone(), k.clone()) {
             return entry.value.clone();
         }
index 10d9c1a6b9b4671fe53da0ad29e3fb7229cb17e1..da1c3596ff6c94030711fc4ae3fe7ff663048d55 100644 (file)
@@ -31,19 +31,19 @@ fn ascending<M: MutableMap<uint, uint>>(map: &mut M, n_keys: uint) {
     io::println(" Ascending integers:");
 
     do timed("insert") {
-        foreach i in range(0u, n_keys) {
+        for i in range(0u, n_keys) {
             map.insert(i, i + 1);
         }
     }
 
     do timed("search") {
-        foreach i in range(0u, n_keys) {
+        for i in range(0u, n_keys) {
             assert_eq!(map.find(&i).unwrap(), &(i + 1));
         }
     }
 
     do timed("remove") {
-        foreach i in range(0, n_keys) {
+        for i in range(0, n_keys) {
             assert!(map.remove(&i));
         }
     }
@@ -77,19 +77,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") {
-        foreach i in range(0u, n_keys) {
+        for i in range(0u, n_keys) {
             map.insert(dist[i], i + 1);
         }
     }
 
     do timed("search") {
-        foreach i in range(0u, n_keys) {
+        for i in range(0u, n_keys) {
             assert_eq!(map.find(&dist[i]).unwrap(), &(i + 1));
         }
     }
 
     do timed("remove") {
-        foreach i in range(0u, n_keys) {
+        for i in range(0u, n_keys) {
             assert!(map.remove(&dist[i]));
         }
     }
index c6234f40cfc13ebc997e5287cdab6462faa3a484..2c412e2eecd807fe52ec9f4bd9c1a8bf0a3c3305 100644 (file)
@@ -46,11 +46,11 @@ pub fn bench_int<T:MutableSet<uint>,
         {
             let mut set = f();
             do timed(&mut self.sequential_ints) {
-                foreach i in range(0u, num_keys) {
+                for i in range(0u, num_keys) {
                     set.insert(i);
                 }
 
-                foreach i in range(0u, num_keys) {
+                for i in range(0u, num_keys) {
                     assert!(set.contains(&i));
                 }
             }
@@ -67,12 +67,12 @@ pub fn bench_int<T:MutableSet<uint>,
 
         {
             let mut set = f();
-            foreach i in range(0u, num_keys) {
+            for i in range(0u, num_keys) {
                 set.insert(i);
             }
 
             do timed(&mut self.delete_ints) {
-                foreach i in range(0u, num_keys) {
+                for i in range(0u, num_keys) {
                     assert!(set.remove(&i));
                 }
             }
@@ -88,12 +88,12 @@ pub fn bench_str<T:MutableSet<~str>,
         {
             let mut set = f();
             do timed(&mut self.sequential_strings) {
-                foreach i in range(0u, num_keys) {
+                for i in range(0u, num_keys) {
                     let s = uint::to_str(i);
                     set.insert(s);
                 }
 
-                foreach i in range(0u, num_keys) {
+                for i in range(0u, num_keys) {
                     let s = uint::to_str(i);
                     assert!(set.contains(&s));
                 }
@@ -112,11 +112,11 @@ pub fn bench_str<T:MutableSet<~str>,
 
         {
             let mut set = f();
-            foreach i in range(0u, num_keys) {
+            for i in range(0u, num_keys) {
                 set.insert(uint::to_str(i));
             }
             do timed(&mut self.delete_strings) {
-                foreach i in range(0u, num_keys) {
+                for i in range(0u, num_keys) {
                     assert!(set.remove(&uint::to_str(i)));
                 }
             }
index 100d9d673faf7302e594f59f552def62f45062a7..a0ceb654b526908b1a386fc3c72eb94e9cf5874a 100644 (file)
@@ -74,7 +74,7 @@ fn read_line() {
     let path = Path(env!("CFG_SRC_DIR"))
         .push_rel(&Path("src/test/bench/shootout-k-nucleotide.data"));
 
-    foreach _ in range(0, 3) {
+    for _ 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 = ~[];
-    foreach i in range(0u, 1500) {
+    for 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] = ~[];
-    foreach _ in range(0u, 20000) {
+    for _ 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]= ~[];
-    foreach _ in range(0u, 5000) {
+    for _ in range(0u, 5000) {
         v.push_all(s.as_bytes());
         if !str::is_utf8(v) {
             fail!("is_utf8 failed");
index 3e975e8f025d79f741c82cf5ff9bc0a891d95168..8924a9beb6e5ee8c9f449f8612342e123bb65eda 100644 (file)
@@ -23,7 +23,7 @@ fn main() {
 
     let n = uint::from_str(args[1]).get();
 
-    foreach i in range(0u, n) {
+    for i in range(0u, n) {
         let x = uint::to_str(i);
         info!(x);
     }
index 10bfb4f60ed632178ec0b650391b38b5cb2a5a7a..2557680f7b507853abac8a06fe0e1e5fa88c7218 100644 (file)
@@ -87,7 +87,7 @@ fn make_graph(N: uint, edges: ~[(node_id, node_id)]) -> graph {
         HashSet::new()
     };
 
-    foreach e in edges.iter() {
+    for e in edges.iter() {
         match *e {
             (i, j) => {
                 graph[i].insert(j);
@@ -98,7 +98,7 @@ fn make_graph(N: uint, edges: ~[(node_id, node_id)]) -> graph {
 
     do graph.consume_iter().transform |v| {
         let mut vec = ~[];
-        foreach i in v.consume() {
+        for i in v.consume() {
             vec.push(i);
         }
         vec
@@ -119,7 +119,7 @@ fn gen_search_keys(graph: &[~[node_id]], n: uint) -> ~[node_id] {
         }
     }
     let mut vec = ~[];
-    foreach i in keys.consume() {
+    for i in keys.consume() {
         vec.push(i);
     }
     return vec;
@@ -435,7 +435,7 @@ fn main() {
     let stop = time::precise_time_s();
 
     let mut total_edges = 0;
-    foreach edges in graph.iter() { total_edges += edges.len(); }
+    for edges in graph.iter() { total_edges += edges.len(); }
 
     io::stdout().write_line(fmt!("Generated graph with %? edges in %? seconds.",
                                  total_edges / 2,
index 77d7dd868da9f3f97d2520ac06455e4e3df29999..186923da43b8ccad194fbfb1d3c4ab47b1d6e8b0 100644 (file)
@@ -64,12 +64,12 @@ fn run(args: &[~str]) {
     let num_bytes = 100;
     let start = extra::time::precise_time_s();
     let mut worker_results = ~[];
-    foreach _ in range(0u, workers) {
+    for _ 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 {
-            foreach _ in range(0u, size / workers) {
+            for _ in range(0u, size / workers) {
                 //error!("worker %?: sending %? bytes", i, num_bytes);
                 to_child.send(bytes(num_bytes));
             }
@@ -80,7 +80,7 @@ fn run(args: &[~str]) {
         server(&from_parent, &to_parent);
     }
 
-    foreach r in worker_results.iter() {
+    for r in worker_results.iter() {
         r.recv();
     }
 
index 70d94c27375f151d4200329746bc6a813418131b..05ace5fd8e6c75b75ed10c069ca0ca82d03a626f 100644 (file)
@@ -58,12 +58,12 @@ fn run(args: &[~str]) {
     let num_bytes = 100;
     let start = extra::time::precise_time_s();
     let mut worker_results = ~[];
-    foreach _ in range(0u, workers) {
+    for _ 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 {
-            foreach _ in range(0u, size / workers) {
+            for _ in range(0u, size / workers) {
                 //error!("worker %?: sending %? bytes", i, num_bytes);
                 to_child.send(bytes(num_bytes));
             }
@@ -74,7 +74,7 @@ fn run(args: &[~str]) {
         server(&from_parent, &to_parent);
     }
 
-    foreach r in worker_results.iter() {
+    for r in worker_results.iter() {
         r.recv();
     }
 
index 626fa25766bdb87536258588941bcb893119ddcd..649d029e60e8b7a3c20441da9a5f1e5262e85185 100644 (file)
@@ -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.
-    foreach j in range(0u, count) {
+    for 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 = ~[];
 
-    foreach i in range(1u, num_tasks) {
+    for i in range(1u, num_tasks) {
         //error!("spawning %?", i);
         let (new_chan, num_port) = init();
         let num_chan2 = Cell::new(num_chan.take());
@@ -108,7 +108,7 @@ fn main() {
     thread_ring(0, msg_per_task, num_chan.take(), num_port);
 
     // synchronize
-    foreach f in futures.mut_iter() {
+    for f in futures.mut_iter() {
         f.get()
     }
 
index 1a92b8b2fe86be967e6c97f7e448e406c6b094e4..7f9d7aa588906b9837105a76dab73050abf64ab1 100644 (file)
@@ -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.
-    foreach j in range(0u, count) {
+    for 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 = ~[];
 
-    foreach i in range(1u, num_tasks) {
+    for i in range(1u, num_tasks) {
         //error!("spawning %?", i);
         let (new_chan, num_port) = init();
         let num_chan2 = Cell::new(num_chan.take());
@@ -104,7 +104,7 @@ fn main() {
     thread_ring(0, msg_per_task, num_chan.take(), num_port);
 
     // synchronize
-    foreach f in futures.mut_iter() {
+    for f in futures.mut_iter() {
         let _ = f.get();
     }
 
index ef6bac16d743285c38f5202e68c6ae9d0d45ab55..19380feea6df4beca237cfa16e6033ea27cecb39 100644 (file)
@@ -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 ];
-        foreach i in range(0, 256) {
+        for i in range(0, 256) {
             rgradients[i] = random_gradient(&mut r);
         }
         let mut permutations = [ 0, ..256 ];
-        foreach i in range(0, 256) {
+        for 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 {
-        foreach y in range(0, 256) {
-            foreach x in range(0, 256) {
+        for y in range(0, 256) {
+            for 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() {
         };
     };
 
-    foreach y in range(0, 256) {
-        foreach x in range(0, 256) {
+    for y in range(0, 256) {
+        for x in range(0, 256) {
             print(symbols[(pixels[y*256+x] / 0.2f32) as int]);
         }
         println("");
index 4ad96a21b88d29a0b815eeae5697f82ff8c5410f..f48c15329463e890b854c5dd6185c49ff716a998 100644 (file)
@@ -22,8 +22,8 @@
 
 fn print_complements() {
     let all = [Blue, Red, Yellow];
-    foreach aa in all.iter() {
-        foreach bb in all.iter() {
+    for aa in all.iter() {
+        for bb in all.iter() {
             println(show_color(*aa) + " + " + show_color(*bb) +
                     " -> " + show_color(transform(*aa, *bb)));
         }
@@ -47,7 +47,7 @@ fn show_color(cc: color) -> ~str {
 
 fn show_color_list(set: ~[color]) -> ~str {
     let mut out = ~"";
-    foreach col in set.iter() {
+    for col in set.iter() {
         out.push_char(' ');
         out.push_str(show_color(*col));
     }
@@ -180,13 +180,13 @@ fn rendezvous(nn: uint, set: ~[color]) {
     }
 
     // tell each creature to stop
-    foreach to_one in to_creature.iter() {
+    for to_one in to_creature.iter() {
         to_one.send(None);
     }
 
     // save each creature's meeting stats
     let mut report = ~[];
-    foreach _to_one in to_creature.iter() {
+    for _to_one in to_creature.iter() {
         report.push(from_creatures_log.recv());
     }
 
@@ -194,7 +194,7 @@ fn rendezvous(nn: uint, set: ~[color]) {
     io::println(show_color_list(set));
 
     // print each creature's stats
-    foreach rep in report.iter() {
+    for rep in report.iter() {
         io::println(*rep);
     }
 
index d8766fdd643493b8ad621b67db711204aba30c77..bf942cf61a38c1bd2ebc1f52061c9540e12f612c 100644 (file)
@@ -28,7 +28,7 @@ fn fannkuch_redux(n: i32) -> i32 {
                 r -= 1;
             }
 
-            foreach (perm_i, perm1_i) in perm.mut_iter().zip(perm1.iter()) {
+            for (perm_i, perm1_i) in perm.mut_iter().zip(perm1.iter()) {
                 *perm_i = *perm1_i;
             }
 
@@ -41,7 +41,7 @@ fn fannkuch_redux(n: i32) -> i32 {
                 }
 
                 let k2 = (k+1) >> 1;
-                foreach i in range(0i32, k2) {
+                for i in range(0i32, k2) {
                     let (perm_i, perm_k_i) = {
                         (perm.unsafe_get(i as uint),
                             perm.unsafe_get((k-i) as uint))
index b5336add4e4c5836af12e47ec384ce66de023c9c..af96170c79c8701318f62111146b95c91d8a9e71 100644 (file)
@@ -58,7 +58,7 @@
 fn sum_and_scale(a: &'static [AminoAcid]) -> ~[AminoAcid] {
     let mut result = ~[];
     let mut p = 0f32;
-    foreach a_i in a.iter() {
+    for a_i in a.iter() {
         let mut a_i = *a_i;
         p += a_i.p;
         a_i.p = p * LOOKUP_SCALE;
@@ -134,7 +134,7 @@ fn new(stdout: *FILE, a: &[AminoAcid]) -> RandomFasta {
     fn make_lookup(a: &[AminoAcid]) -> [AminoAcid, ..LOOKUP_SIZE] {
         let mut lookup = [ NULL_AMINO_ACID, ..LOOKUP_SIZE ];
         let mut j = 0;
-        foreach (i, slot) in lookup.mut_iter().enumerate() {
+        for (i, slot) in lookup.mut_iter().enumerate() {
             while a[j].p < (i as f32) {
                 j += 1;
             }
@@ -150,7 +150,7 @@ fn rng(&mut self, max: f32) -> f32 {
 
     fn nextc(&mut self) -> u8 {
         let r = self.rng(1.0);
-        foreach a in self.lookup.iter() {
+        for a in self.lookup.iter() {
             if a.p >= r {
                 return a.c;
             }
@@ -165,7 +165,7 @@ fn make(&mut self, n: uint) {
             let mut buf = [0, ..LINE_LEN + 1];
 
             do lines.times {
-                foreach i in range(0u, LINE_LEN) {
+                for i in range(0u, LINE_LEN) {
                     buf[i] = self.nextc();
                 }
                 buf[LINE_LEN] = '\n' as u8;
@@ -174,7 +174,7 @@ fn make(&mut self, n: uint) {
                        1,
                        self.stdout);
             }
-            foreach i in range(0u, chars_left) {
+            for i in range(0u, chars_left) {
                 buf[i] = self.nextc();
             }
             fwrite(transmute(&buf[0]), chars_left as size_t, 1, self.stdout);
index 6cee2c4e5ffea2c4350b1114120d1def268f8126..3a90c6647e08e5d732b9f8ad0ae7deee053fff51 100644 (file)
@@ -46,7 +46,7 @@ struct AminoAcids {
 fn make_cumulative(aa: ~[AminoAcids]) -> ~[AminoAcids] {
     let mut cp: u32 = 0u32;
     let mut ans: ~[AminoAcids] = ~[];
-    foreach a in aa.iter() {
+    for a in aa.iter() {
         cp += a.prob;
         ans.push(AminoAcids {ch: a.ch, prob: cp});
     }
@@ -81,7 +81,7 @@ fn make_random_fasta(wr: @io::Writer,
         last: rng.next()
     };
     let mut op: ~str = ~"";
-    foreach _ in range(0u, n as uint) {
+    for _ 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();
-    foreach i in range(0u, n as uint) {
+    for i in range(0u, n as uint) {
         if (op.len() >= LINE_LENGTH) {
             wr.write_line( op );
             op = str::with_capacity( LINE_LENGTH );
index 6c40ede76825b8cae4dae725369c07bbba72e8da..8c4e9092ce0a6f1d9640ebc9759079cdf3f53fc0 100644 (file)
@@ -62,7 +62,7 @@ fn sortKV<TT:Clone + Ord, UU:Clone + Ord>(orig: ~[(TT,UU)]) -> ~[(TT,UU)] {
    let mut pairs = ~[];
 
    // map -> [(k,%)]
-   foreach (key, &val) in mm.iter() {
+   for (key, &val) in mm.iter() {
       pairs.push(((*key).clone(), pct(val, total)));
    }
 
@@ -70,7 +70,7 @@ fn sortKV<TT:Clone + Ord, UU:Clone + Ord>(orig: ~[(TT,UU)]) -> ~[(TT,UU)] {
 
    let mut buffer = ~"";
 
-   foreach kv in pairs_sorted.iter() {
+   for kv in pairs_sorted.iter() {
        let (k,v) = (*kv).clone();
        unsafe {
            let b = str::raw::from_bytes(k);
@@ -215,7 +215,7 @@ fn main() {
          (_, true) => {
             let line_bytes = line.as_bytes();
 
-           foreach (ii, _sz) in sizes.iter().enumerate() {
+           for (ii, _sz) in sizes.iter().enumerate() {
                let lb = line_bytes.to_owned();
                to_child[ii].send(lb);
             }
@@ -227,12 +227,12 @@ fn main() {
    }
 
    // finish...
-    foreach (ii, _sz) in sizes.iter().enumerate() {
+    for (ii, _sz) in sizes.iter().enumerate() {
       to_child[ii].send(~[]);
    }
 
    // now fetch and print result messages
-    foreach (ii, _sz) in sizes.iter().enumerate() {
+    for (ii, _sz) in sizes.iter().enumerate() {
       io::println(from_child[ii].recv());
    }
 }
index 34e979b506bbcfbf415655fb558d591ee1d008bc..96fd4d7e604e7888c803b6b0a1285b1757fa8026 100644 (file)
@@ -44,7 +44,7 @@ fn rotate(&self, c: u8, frame: i32) -> Code {
 
     fn pack(string: &str) -> Code {
         let mut code = Code(0u64);
-        foreach i in range(0u, string.len()) {
+        for i in range(0u, string.len()) {
             code = code.push_char(string[i]);
         }
         code
index b46aa4b1dd53d97fc7c509559fdbd7a6069f842f..16936f6ed722d3fad5be3024ed7a75a8b33983fc 100644 (file)
@@ -19,9 +19,9 @@ fn main() {
         let mode = "w";
         let stdout = fdopen(STDOUT_FILENO as c_int, transmute(&mode[0]));
 
-        foreach y in range(0i32, h) {
+        for y in range(0i32, h) {
             let y = y as f64;
-            foreach x in range(0i32, w) {
+            for x in range(0i32, w) {
                 let mut Zr = 0f64;
                 let mut Zi = 0f64;
                 let mut Tr = 0f64;
@@ -29,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;
 
-                foreach _ in range(0i32, ITER as i32) {
+                for _ in range(0i32, ITER as i32) {
                     if Tr + Ti > LIMIT * LIMIT {
                         break;
                     }
index 8011f4bda03771d1d93413ffa420af0c4fb3c541..99bd7c0f7867273873363141d474cfa6598b718a 100644 (file)
@@ -80,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 {
-        foreach i in range(0u, N_BODIES) {
-            foreach j in range(i + 1, N_BODIES) {
+        for i in range(0u, N_BODIES) {
+            for 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];
@@ -101,7 +101,7 @@ fn advance(bodies: &mut [Planet, ..N_BODIES], dt: f64, steps: i32) {
             }
         }
 
-        foreach a in bodies.mut_iter() {
+        for a in bodies.mut_iter() {
             a.x[0] += dt * a.v[0];
             a.x[1] += dt * a.v[1];
             a.x[2] += dt * a.v[2];
@@ -112,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 ];
-    foreach i in range(0u, N_BODIES) {
-        foreach k in range(0u, 3) {
+    for i in range(0u, N_BODIES) {
+        for k in range(0u, 3) {
             e += bodies[i].mass * bodies[i].v[k] * bodies[i].v[k] / 2.0;
         }
 
-        foreach j in range(i + 1, N_BODIES) {
-            foreach k in range(0u, 3) {
+        for j in range(i + 1, N_BODIES) {
+            for 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();
@@ -129,8 +129,8 @@ fn energy(bodies: &[Planet, ..N_BODIES]) -> f64 {
 }
 
 fn offset_momentum(bodies: &mut [Planet, ..N_BODIES]) {
-    foreach i in range(0u, N_BODIES) {
-        foreach k in range(0u, 3) {
+    for i in range(0u, N_BODIES) {
+        for k in range(0u, 3) {
             bodies[0].v[k] -= bodies[i].v[k] * bodies[i].mass / SOLAR_MASS;
         }
     }
index b27b8395470f526e30c500a56e755e282230b3d1..663ebcac3340acaeeb7b3f8909e6cdb47b0fe8ab 100644 (file)
@@ -83,14 +83,14 @@ fn stress_task(id: int) {
 
 fn stress(num_tasks: int) {
     let mut results = ~[];
-    foreach i in range(0, num_tasks) {
+    for i in range(0, num_tasks) {
         let mut builder = task::task();
         builder.future_result(|r| results.push(r));
         do builder.spawn {
             stress_task(i);
         }
     }
-    foreach r in results.iter() {
+    for r in results.iter() {
         r.recv();
     }
 }
@@ -116,8 +116,8 @@ fn main() {
 
         let out = io::stdout();
 
-        foreach n in range(1, max + 1) {
-            foreach _ in range(0, num_trials) {
+        for n in range(1, max + 1) {
+            for _ in range(0, num_trials) {
                 let start = time::precise_time_ns();
                 let fibn = fib(n);
                 let stop = time::precise_time_ns();
index 5187d0352985a1a15bc37592cc3a7f7a11cf6633..e3c3c19c33bb38abc247d728db1e30b2c8655871 100644 (file)
@@ -19,16 +19,16 @@ fn A(i: i32, j: i32) -> i32 {
 
 fn dot(v: &[f64], u: &[f64]) -> f64 {
     let mut sum = 0.0;
-    foreach (i, &v_i) in v.iter().enumerate() {
+    for (i, &v_i) in v.iter().enumerate() {
         sum += v_i * u[i];
     }
     sum
 }
 
 fn mult_Av(v: &mut [f64], out: &mut [f64]) {
-    foreach (i, out_i) in out.mut_iter().enumerate() {
+    for (i, out_i) in out.mut_iter().enumerate() {
         let mut sum = 0.0;
-        foreach (j, &v_j) in v.mut_iter().enumerate() {
+        for (j, &v_j) in v.mut_iter().enumerate() {
             sum += v_j / (A(i as i32, j as i32) as f64);
         }
         *out_i = sum;
@@ -36,9 +36,9 @@ fn mult_Av(v: &mut [f64], out: &mut [f64]) {
 }
 
 fn mult_Atv(v: &mut [f64], out: &mut [f64]) {
-    foreach (i, out_i) in out.mut_iter().enumerate() {
+    for (i, out_i) in out.mut_iter().enumerate() {
         let mut sum = 0.0;
-        foreach (j, &v_j) in v.mut_iter().enumerate() {
+        for (j, &v_j) in v.mut_iter().enumerate() {
             sum += v_j / (A(j as i32, i as i32) as f64);
         }
         *out_i = sum;
index 47efd076ef2632178b5ade54bc351cfd7e55885b..2c2073eafea6275732530164561f4a74aaef705e 100644 (file)
 use std::uint;
 
 fn append_sequential(min: uint, max: uint, map: &mut SmallIntMap<uint>) {
-    foreach i in range(min, max) {
+    for i in range(min, max) {
         map.insert(i, i + 22u);
     }
 }
 
 fn check_sequential(min: uint, max: uint, map: &SmallIntMap<uint>) {
-    foreach i in range(min, max) {
+    for 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;
 
-    foreach _ in range(0u, rep) {
+    for _ in range(0u, rep) {
         let mut map = SmallIntMap::new();
         let start = extra::time::precise_time_s();
         append_sequential(0u, max, &mut map);
index a14a63cd3a042936a46f620675e101dd8204c2e3..49b2c32ed686717de8985ee9d8a96c56fd8fea25 100644 (file)
@@ -56,8 +56,8 @@ pub fn from_vec(vec: &[[u8, ..9], ..9]) -> Sudoku {
     }
 
     pub fn equal(&self, other: &Sudoku) -> bool {
-        foreach row in range(0u8, 9u8) {
-            foreach col in range(0u8, 9u8) {
+        for row in range(0u8, 9u8) {
+            for col in range(0u8, 9u8) {
                 if self.grid[row][col] != other.grid[row][col] {
                     return false;
                 }
@@ -87,9 +87,9 @@ pub fn read(reader: @io::Reader) -> Sudoku {
     }
 
     pub fn write(&self, writer: @io::Writer) {
-        foreach row in range(0u8, 9u8) {
+        for row in range(0u8, 9u8) {
             writer.write_str(fmt!("%u", self.grid[row][0] as uint));
-            foreach col in range(1u8, 9u8) {
+            for col in range(1u8, 9u8) {
                 writer.write_str(fmt!(" %u", self.grid[row][col] as uint));
             }
             writer.write_char('\n');
@@ -99,8 +99,8 @@ pub fn write(&self, writer: @io::Writer) {
     // solve sudoku grid
     pub fn solve(&mut self) {
         let mut work: ~[(u8, u8)] = ~[]; /* queue of uncolored fields */
-        foreach row in range(0u8, 9u8) {
-            foreach col in range(0u8, 9u8) {
+        for row in range(0u8, 9u8) {
+            for col in range(0u8, 9u8) {
                 let color = self.grid[row][col];
                 if color == 0u8 {
                     work.push((row, col));
@@ -143,7 +143,7 @@ fn next_color(&mut self, row: u8, col: u8, start_color: u8) -> bool {
 
     // find colors available in neighbourhood of (row, col)
     fn drop_colors(&mut self, avail: &mut Colors, row: u8, col: u8) {
-        foreach idx in range(0u8, 9u8) {
+        for 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,8 @@ fn drop_colors(&mut self, avail: &mut Colors, row: u8, col: u8) {
         // check same block fields
         let row0 = (row / 3u8) * 3u8;
         let col0 = (col / 3u8) * 3u8;
-        foreach alt_row in range(row0, row0 + 3u8) {
-            foreach alt_col in range(col0, col0 + 3u8) {
+        for alt_row in range(row0, row0 + 3u8) {
+            for alt_col in range(col0, col0 + 3u8) {
                 avail.remove(self.grid[alt_row][alt_col]);
             }
         }
index c535bf7daeaecd46d2937e67cedd1b8cbd2038b9..e507f0e9e5b92c01dc2ef6ab8d7c3b1be74a7edf 100644 (file)
@@ -16,7 +16,7 @@ struct Foo {
 
 impl Foo {
     pub fn foo(&mut self, fun: &fn(&int)) {
-        foreach f in self.n.iter() {
+        for f in self.n.iter() {
             fun(f);
         }
     }
index c6aa1713db8820776ab1a257181dbe930f709005..1a8fa50c76eee715be75bb0bb23bbc89c799fde6 100644 (file)
@@ -10,7 +10,7 @@
 
 fn main() {
     let v = @mut [ 1, 2, 3 ];
-    foreach _x in v.iter() {
+    for _x in v.iter() {
         v[1] = 4; //~ ERROR cannot assign
     }
 }
index 6fe802b650b17974a289f932fdc7baa2c4bef062..dcb85d86706327cfb8fc1b7bf4348ca522e36e7c 100644 (file)
@@ -15,7 +15,7 @@ trait vec_monad<A> {
 impl<A> vec_monad<A> for ~[A] {
     fn bind<B>(&self, f: &fn(A) -> ~[B]) {
         let mut r = fail!();
-        foreach elt in self.iter() { r = r + f(*elt); }
+        for elt in self.iter() { r = r + f(*elt); }
         //~^ WARNING unreachable expression
         //~^^ ERROR the type of this value must be known
    }
index d1e8d96a76908cc1dc67b5cfa21502df45b6084a..64344ab4277939605bdaea6b4c13063dab6fa0fd 100644 (file)
@@ -14,7 +14,7 @@
 fn fail_len(v: ~[int]) -> uint {
     let mut i = 3;
     fail!();
-    foreach x in v.iter() { i += 1u; }
+    for x in v.iter() { i += 1u; }
     //~^ ERROR: unreachable statement
     return i;
 }
index 9fc84c98cf57bb83a9f80a6e39a9a23ed38a9bb7..1ef67f784e386ed5edf1ce29ea50c01422072e9a 100644 (file)
@@ -37,7 +37,7 @@ fn main() {
              ('c', 'd'),
              ('e', 'f')];
 
-    foreach &(x,y) in v.iter() {} // should be OK
+    for &(x,y) in v.iter() {} // should be OK
 
     // Make sure none of the errors above were fatal
     let x: char = true; //~ ERROR expected `char` but found `bool`
index ef197a10c7d93249907723287f16b535c5003bd9..19c786b553f602fe86dc2f4814bba930176358f4 100644 (file)
@@ -11,7 +11,7 @@
 fn main() {
     let mut xs = ~[1, 2, 3, 4];
 
-    foreach x in xs.mut_iter() {
+    for x in xs.mut_iter() {
         xs.push(1) //~ ERROR cannot borrow `xs` as mutable
     }
 }
index d1629885c7a943356161126fba1943e4a79349fc..805aca129e9997bc2f8b6109587fb71b0c6ac9a8 100644 (file)
@@ -108,7 +108,7 @@ fn main() {
          '\xA0', '\u1680', '\u180E', '\u2000', '\u2001', '\u2002', '\u2003',
          '\u2004', '\u2005', '\u2006', '\u2007', '\u2008', '\u2009', '\u200A',
          '\u2028', '\u2029', '\u202F', '\u205F', '\u3000'];
-    foreach c in chars.iter() {
+    for c in chars.iter() {
         let ws = c.is_whitespace();
         println(fmt!("%? %?" , c , ws));
     }
index 822a71da3c87e31a37f6ac80bb03f4ff2a1e85c9..f09a7c1428c95fb0336e739787af8f5b4f1d1c33 100644 (file)
@@ -102,7 +102,7 @@ fn main() {
          '\xA0', '\u1680', '\u180E', '\u2000', '\u2001', '\u2002', '\u2003',
          '\u2004', '\u2005', '\u2006', '\u2007', '\u2008', '\u2009', '\u200A',
          '\u2028', '\u2029', '\u202F', '\u205F', '\u3000'];
-    foreach c in chars.iter() {
+    for c in chars.iter() {
         let ws = c.is_whitespace();
         println(fmt!("%? %?", c , ws));
     }
index 750c8dd84954bf9b2d702eb346b47cc7a2c76b0f..6b4e6a30d87f447ff4a61b6868146ec65a516e37 100644 (file)
@@ -12,7 +12,7 @@
 
 fn f(v: &[int]) {
     let mut n = 0;
-    foreach e in v.iter() {
+    for e in v.iter() {
         n = *e; // This comment once triggered pretty printer bug
     }
 }
index 5aa8273527a3ad13874bfdfd2bfa1500bffce96b..3c9397fc07ff34e6ac06b26ba208c1ec251f329b 100644 (file)
@@ -11,4 +11,4 @@
 // error-pattern:moop
 extern mod extra;
 
-fn main() { foreach _ in range(0u, 10u) { fail!("moop"); } }
+fn main() { for _ in range(0u, 10u) { fail!("moop"); } }
index 87791112edf6f7a3b87d005959e83d9b991a01b1..336c2d3c8ea70ce548f3067b709ecdaa72899f62 100644 (file)
@@ -15,7 +15,7 @@ fn main() {
     let count = @mut 0u;
     let mut map = std::hashmap::HashMap::new();
     let mut arr = ~[];
-    foreach i in range(0u, 10u) {
+    for i in range(0u, 10u) {
         arr.push(@~"key stuff");
         map.insert(arr.clone(), arr + &[@~"value stuff"]);
         if arr.len() == 5 {
index 37ac5f85a9e8cabde557909dc027660562083781..33aee55b8c7387a6c461af49ecc9a04b3ec7d6e7 100644 (file)
@@ -11,7 +11,7 @@
 pub fn main() {
     let mut sum = 0;
     let xs = ~[1, 2, 3, 4, 5];
-    foreach x in xs.iter() {
+    for x in xs.iter() {
         sum += *x;
     }
     assert_eq!(sum, 15);
index 313d5a62554ab421e9dc2411d2a7827a3ef2af75..7b74d1d314b40c5d1c4f95dca84a02041e731407 100644 (file)
@@ -15,7 +15,7 @@ pub fn main() {
     let v = ~[-1f, 0f, 1f, 2f, 3f];
 
     // Statement form does not require parentheses:
-    foreach i in v.iter() {
+    for i in v.iter() {
         info!("%?", *i);
     }
 
index d9c9670c858b1e4dee03da2bc67a5a71a9b10439..790757463c64790a52cfe86d4391321bb5a11924 100644 (file)
@@ -10,7 +10,7 @@
 
 // xfail-fast
 
-fn iter_vec<T>(v: ~[T], f: &fn(&T)) { foreach x in v.iter() { f(x); } }
+fn iter_vec<T>(v: ~[T], f: &fn(&T)) { for x in v.iter() { f(x); } }
 
 pub fn main() {
     let v = ~[1, 2, 3, 4, 5, 6, 7];
index e51ca5bcc956645ab59b2f5dfc24af676d0c8cf6..29b693ec376955dbdd0b048c096188b31fd79ade 100644 (file)
@@ -10,7 +10,7 @@
 
 // xfail-fast
 
-fn iter_vec<T>(v: ~[T], f: &fn(&T)) { foreach x in v.iter() { f(x); } }
+fn iter_vec<T>(v: ~[T], f: &fn(&T)) { for x in v.iter() { f(x); } }
 
 pub fn main() {
     let v = ~[1, 2, 3, 4, 5];
index 3b1e28ab915a4bcbd8522514b8df915f1e7d82e8..8ec1b590fdfca90e250f57bafc789acf8abd8af7 100644 (file)
@@ -10,7 +10,7 @@
 
 fn sum_slice(x: &[int]) -> int {
     let mut sum = 0;
-    foreach i in x.iter() { sum += *i; }
+    for i in x.iter() { sum += *i; }
     return sum;
 }
 
index c6fc84b2054b96d78dbe5cc57e98bc37d0c0e417..1ca94d6a2219ef7685839acb50568def94ad22ff 100644 (file)
@@ -10,7 +10,7 @@
 
 fn want_slice(v: &[int]) -> int {
     let mut sum = 0;
-    foreach i in v.iter() { sum += *i; }
+    for i in v.iter() { sum += *i; }
     sum
 }
 
index c6ef71110431c9533a10630143d1ae2d02d0f2f6..dcf497e81f743deea5c3ec870aa34ff8af0e0381 100644 (file)
@@ -4,7 +4,7 @@ struct Wizard {
 
 impl Wizard {
     pub fn cast(&mut self) {
-        foreach &spell in self.spells.iter() {
+        for &spell in self.spells.iter() {
             println(spell);
         }
     }
index 46b6eec6fa627dbe1fdb8fdbd6eed9cdb4ae7fb5..aff4b7bd26e0533b4fb4cc51bfdb4de5d4265b4a 100644 (file)
@@ -17,7 +17,7 @@ pub fn main() {
     loop { i += 1; if i == 20 { break; } }
     assert_eq!(i, 20);
     let xs = [1, 2, 3, 4, 5, 6];
-    foreach x in xs.iter() {
+    for x in xs.iter() {
         if *x == 3 { break; } assert!((*x <= 3));
     }
     i = 0;
@@ -28,7 +28,7 @@ pub fn main() {
         if i >= 10 { break; }
     }
     let ys = ~[1, 2, 3, 4, 5, 6];
-    foreach x in ys.iter() {
+    for x in ys.iter() {
         if *x % 2 == 0 { loop; }
         assert!((*x % 2 != 0));
     }
index 6bfe7a8d7907e0d105ce7149076299c060f269a1..a5d7ba2c1aaa1bd1fee0783770f9d71d09bbc1e1 100644 (file)
@@ -83,7 +83,7 @@ fn cat(in_x : uint, in_y : int, in_name: ~str) -> cat {
 
 
 fn annoy_neighbors(critter: @noisy) {
-    foreach i in range(0u, 10) { critter.speak(); }
+    for i in range(0u, 10) { critter.speak(); }
 }
 
 pub fn main() {
index 8f5fcaba4fb329a81c83e7bacb6659811fb595a5..93e9eac1dd9dfb621bf1e76df52a5769d403ac30 100644 (file)
@@ -75,7 +75,7 @@ fn clear() { }
 
 pub fn main() {
   let nyan : cat = cat(0, 2, "nyan");
-  foreach _ in range(1u, 5u) { nyan.speak(); }
+  for _ 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)));
index 921b35b74375b0a40a03d31b837991291276b4b4..d42c57c3b81a0ed1f2b7d9cfa83494dfa53736b7 100644 (file)
@@ -117,11 +117,11 @@ fn meow(&mut self) {
 
 pub fn main() {
     let mut nyan: cat<~str> = cat::new(0, 2, ~"nyan");
-    foreach _ in range(1u, 5) { nyan.speak(); }
+    for _ 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);
-    foreach _ in range(0u, 6) { spotty.speak(); }
+    for _ in range(0u, 6) { spotty.speak(); }
     assert_eq!(spotty.len(), 8);
     assert!((spotty.contains_key(&2)));
     assert_eq!(spotty.get(&3), &tuxedo);
index a5cc005b538e45f1077525f91256351378531c38..d4e1d438c94428e59ee13d1af9d842eba796be8b 100644 (file)
@@ -63,6 +63,6 @@ pub fn main() {
   let mut nyan = cat(0u, 2, ~"nyan");
   nyan.eat();
   assert!((!nyan.eat()));
-  foreach _ in range(1u, 10u) { nyan.speak(); };
+  for _ in range(1u, 10u) { nyan.speak(); };
   assert!((nyan.eat()));
 }
index 05084ec9802e7785685ee50b8fb456ffb248e7d8..a064ce6769b823043e766342e11ad549b8ccb68c 100644 (file)
@@ -68,7 +68,7 @@ pub fn main() {
     let mut nyan = cat(0u, 2, ~"nyan");
     nyan.eat();
     assert!((!nyan.eat()));
-    foreach _ in range(1u, 10u) {
+    for _ in range(1u, 10u) {
         make_speak(nyan.clone());
     }
 }
index d33f2c26c921663e44429575448a55c4c154c664..4fccc45a75335cea0e23c96e9959cef68ecdf634 100644 (file)
@@ -95,7 +95,7 @@ fn bite() -> body_part {
 }
 
 fn annoy_neighbors<T:noisy>(critter: T) {
-  foreach i in range(0u, 10u) {
+  for i in range(0u, 10u) {
       let what = critter.speak();
       info!("%u %d", i, what);
   }
index d14bcac5a244e05ad25f205696636d55feda1376..e7848f3b960e42bfee3a42d64f362ed1fa63a259 100644 (file)
@@ -19,6 +19,6 @@ pub fn main() {
     let mut nyan = cat(0u, 2, ~"nyan");
     nyan.eat();
     assert!((!nyan.eat()));
-    foreach _ in range(1u, 10u) { nyan.speak(); };
+    for _ in range(1u, 10u) { nyan.speak(); };
     assert!((nyan.eat()));
 }
index 3200b476a726322294637e5607ecb6c143593d29..e5220b15520a7c95c1e351cd16006db7ecb209d4 100644 (file)
@@ -52,6 +52,6 @@ pub fn main() {
   let mut nyan = cat(0u, 2, ~"nyan");
   nyan.eat();
   assert!((!nyan.eat()));
-  foreach _ in range(1u, 10u) { nyan.speak(); };
+  for _ in range(1u, 10u) { nyan.speak(); };
   assert!((nyan.eat()));
 }
index c31b72c1bd9356d25f8b82b4b77c9152412f1e23..7fb01006844af5a7ee43b7e0c33b4865da993c51 100644 (file)
@@ -1,6 +1,6 @@
 fn sum(x: &[int]) -> int {
     let mut sum = 0;
-    foreach y in x.iter() { sum += *y; }
+    for y in x.iter() { sum += *y; }
     return sum;
 }
 
index 07655cf3525043771c6861f913b79504c4821184..6117ea962afac84b2a34d895c6c7f114b6d8013c 100644 (file)
@@ -24,6 +24,6 @@ fn f() { }
 static closures: &'static [S<'static>] = &[S(f), S(f)];
 
 pub fn main() {
-    foreach &bare_fn in bare_fns.iter() { bare_fn() }
-    foreach &closure in closures.iter() { (*closure)() }
+    for &bare_fn in bare_fns.iter() { bare_fn() }
+    for &closure in closures.iter() { (*closure)() }
 }
index 0b070a6ec7abb2384caaac42822fc9ee46148cdb..094d17c100ebd8b56e1baca12c3c5babdfbeeee0 100644 (file)
@@ -25,8 +25,8 @@ pub fn main() {
     // in order for both Ord and TotalOrd
     let es = [e0, e11, e12, e21, e22];
 
-    foreach (i, e1) in es.iter().enumerate() {
-        foreach (j, e2) in es.iter().enumerate() {
+    for (i, e1) in es.iter().enumerate() {
+        for (j, e2) in es.iter().enumerate() {
             let ord = i.cmp(&j);
 
             let eq = i == j;
index 026994590a0ed22ceecfb141357276f84269fe67..d04bdee34e611f84e9e241afcba8fb2ed020cc61 100644 (file)
@@ -21,8 +21,8 @@ pub fn main() {
     // in order for both Ord and TotalOrd
     let ss = [s1, s2];
 
-    foreach (i, s1) in ss.iter().enumerate() {
-        foreach (j, s2) in ss.iter().enumerate() {
+    for (i, s1) in ss.iter().enumerate() {
+        for (j, s2) in ss.iter().enumerate() {
             let ord = i.cmp(&j);
 
             let eq = i == j;
index 4d7701703db591141d67ed414b541076a65a8a28..5d4cf7c745769c62ca60eaa31cbca5f58913c192 100644 (file)
@@ -19,8 +19,8 @@ pub fn main() {
     // in order for both Ord and TotalOrd
     let tss = [ts1, ts2];
 
-    foreach (i, ts1) in tss.iter().enumerate() {
-        foreach (j, ts2) in tss.iter().enumerate() {
+    for (i, ts1) in tss.iter().enumerate() {
+        for (j, ts2) in tss.iter().enumerate() {
             let ord = i.cmp(&j);
 
             let eq = i == j;
index 10f825e32cd524910082fa484222ed7d1661947c..ce662bafd4957004a8fbf2a0f704d228a4d05c47 100644 (file)
@@ -16,10 +16,10 @@ struct Box {
 
 impl Box {
     pub fn set_many(&mut self, xs: &[uint]) {
-        foreach x in xs.iter() { self.x = *x; }
+        for x in xs.iter() { self.x = *x; }
     }
     pub fn set_many2(@mut self, xs: &[uint]) {
-        foreach x in xs.iter() { self.x = *x; }
+        for x in xs.iter() { self.x = *x; }
     }
 }
 
index bf36d86c849ccdf433b62f3f9e7eb65534c52e37..8102673586b4461b7561c44a43f6ca736a85baf6 100644 (file)
@@ -10,7 +10,7 @@
 
 pub fn main() {
     let v : &[(int,int)] = &[ (1, 2), (3, 4), (5, 6) ];
-    foreach &(x, y) in v.iter() {
+    for &(x, y) in v.iter() {
         println(y.to_str());
         println(x.to_str());
     }
index 68d075834f55128ae84846899481039c13118070..ff718500340c8ebb1136eaf84d51ff199a0a49e4 100644 (file)
@@ -8,4 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-pub fn main() { let x: ~[int] = ~[]; foreach _ in x.iter() { fail!("moop"); } }
+pub fn main() { let x: ~[int] = ~[]; for _ in x.iter() { fail!("moop"); } }
index 74ff344b73510eeeb1b37be239dcabb59b4e4ce1..f5e7d91c22520898488cbfa50fcc32a10d12d4f4 100644 (file)
@@ -11,7 +11,7 @@
 fn main() {
     let x = [1,..100];
     let mut y = 0;
-    foreach i in x.iter() {
+    for i in x.iter() {
         if y > 10 {
             break;
         }
index 4b6421cb0d3ce354b1c2a675c281d3652fa84f4e..17c5bb5c0e253e84e290b2a4e55dd1470764c523 100644 (file)
@@ -17,7 +17,7 @@
 fn main() {
     let mut h = HashMap::new();
     let kvs = [(1, 10), (2, 20), (3, 30)];
-    foreach &(k,v) in kvs.iter() {
+    for &(k,v) in kvs.iter() {
         h.insert(k,v);
     }
     let mut x = 0;
@@ -25,13 +25,13 @@ fn main() {
 
     let mut i = h.iter();
 
-    foreach (&k,&v) in i {
+    for (&k,&v) in i {
         x += k;
         y += v;
         break;
     }
 
-    foreach (&k,&v) in i {
+    for (&k,&v) in i {
         x += k;
         y += v;
     }
index bc6508c4a5ff335a8c49f201dece500bcc573aa8..908adc0d7620d3478949b5ce38a868fc232a4140 100644 (file)
 fn main() {
     let mut h = HashMap::new();
     let kvs = [(1, 10), (2, 20), (3, 30)];
-    foreach &(k,v) in kvs.iter() {
+    for &(k,v) in kvs.iter() {
         h.insert(k,v);
     }
     let mut x = 0;
     let mut y = 0;
-    foreach (&k,&v) in h.iter() {
+    for (&k,&v) in h.iter() {
         x += k;
         y += v;
     }
index 8db6b50f8cd9e06fb6e63ffb7e5b77534da513ed..c999d810ec6ba54eb26e54ef41e1533825d640b2 100644 (file)
@@ -11,7 +11,7 @@
 fn main() {
     let x = [1,..100];
     let mut y = 0;
-    foreach (n,i) in x.iter().enumerate() {
+    for (n,i) in x.iter().enumerate() {
         if n < 10 {
             loop;
         }
index ffc01ebff19ea52d5d6e7c42d1cbf7a460ec749c..904c90dc815d1ef7465d01a2e8c8b89769acb303 100644 (file)
@@ -13,8 +13,8 @@ fn main() {
     let y = [2,..100];
     let mut p = 0;
     let mut q = 0;
-    foreach i in x.iter() {
-        foreach j in y.iter() {
+    for i in x.iter() {
+        for j in y.iter() {
             p += *j;
         }
         q += *i + p;
index 55884cee4ecb66f91168faf30b9552f1f2a5f2cd..c6f903821dd0ef9b3bedbeedc73df2ce8cde74ea 100644 (file)
@@ -11,7 +11,7 @@
 fn main() {
     let x = [1,..100];
     let mut y = 0;
-    foreach i in x.iter() {
+    for i in x.iter() {
         y += *i
     }
     assert!(y == 100);
index 388f61c1b032fc5521d45c28680e0240ded33a52..4945a25967a0945f927fd816e4a368aaf94eec1e 100755 (executable)
@@ -15,7 +15,7 @@ trait vec_utils<T> {
 impl<T> vec_utils<T> for ~[T] {
     fn map_<U>(x: &~[T], f: &fn(&T) -> U) -> ~[U] {
         let mut r = ~[];
-        foreach elt in x.iter() {
+        for elt in x.iter() {
             r.push(f(elt));
         }
         r
index 3d41065365ced289093acb2a8ed8e66ee34fe79b..a7b376f4aea351afc05cb427ac3a174df157b5a5 100644 (file)
@@ -31,7 +31,7 @@ mod map_reduce {
     enum ctrl_proto { find_reducer(~[u8], Chan<int>), mapper_done, }
 
     fn start_mappers(ctrl: SharedChan<ctrl_proto>, inputs: ~[~str]) {
-        foreach i in inputs.iter() {
+        for i in inputs.iter() {
             let ctrl = ctrl.clone();
             let i = i.clone();
             task::spawn(|| map_task(ctrl.clone(), i.clone()) );
index b86ad6d56f826dbc5f92e6d1e521ec10d71917c9..3f86114796347ab752327cae3689f5ed692a77e8 100644 (file)
@@ -67,14 +67,14 @@ fn read_board_grid<rdr:'static + io::Reader>(input: rdr) -> ~[~[square]] {
     let mut grid = ~[];
     do input.each_line |line| {
         let mut row = ~[];
-        foreach c in line.iter() {
+        for c in line.iter() {
             row.push(square_from_char(c))
         }
         grid.push(row);
         true
     };
     let width = grid[0].len();
-    foreach row in grid.iter() { assert!(row.len() == width) }
+    for row in grid.iter() { assert!(row.len() == width) }
     grid
 }
 
index c46641ffbd6648c5c105d6e1870a75763dd253c0..f2ecd0413bd1c614955d88b76f7dc1281dbc63b6 100644 (file)
@@ -40,7 +40,7 @@ pub fn main() {
     let bools = ~[false, false, true, false, false, true, true, false];
     let bools2 = to_bools(Storage{storage: ~[0b01100100]});
 
-    foreach i in range(0u, 8) {
+    for i in range(0u, 8) {
         printfln!("%u => %u vs %u", i, bools[i] as uint, bools2[i] as uint);
     }
 
index 84d3db444e9c513965f13b0d3e170869f173dcec..5bb88df4662ba515c6e1f1ef86f2183b87016121 100644 (file)
@@ -14,7 +14,7 @@ struct trie_node {
 }
 
 fn print_str_vector(vector: ~[~str]) {
-    foreach string in vector.iter() {
+    for string in vector.iter() {
         println(*string);
     }
 }
index 7e9b637516fd719760549bd2da7506c31014e034..e688b95f873486177d30465bc74045dc929be1f2 100644 (file)
@@ -11,7 +11,7 @@
 trait Canvas {
     fn add_point(&self, point: &int);
     fn add_points(&self, shapes: &[int]) {
-        foreach pt in shapes.iter() {
+        for pt in shapes.iter() {
             self.add_point(pt)
         }
     }
index 2819a0471e9ee668c0ea68d26d0c8641263cf30d..69cc7851cd9e0d93e0d530934a5f823008ee0bf3 100644 (file)
@@ -120,7 +120,7 @@ trait Canvas {
     // Unlike interfaces traits support default implementations.
     // Got an ICE as soon as I added this method.
     fn add_points(&mut self, shapes: &[Point]) {
-        foreach pt in shapes.iter() {self.add_point(*pt)};
+        for pt in shapes.iter() {self.add_point(*pt)};
     }
 }
 
@@ -134,13 +134,13 @@ fn add_point(&mut self, shape: Point) {
 
     fn add_rect(&mut self, shape: Rect) {
         // Add the top and bottom lines.
-        foreach x in range(shape.top_left.x, shape.top_left.x + shape.size.width) {
+        for 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.
-        foreach y in range(shape.top_left.y, shape.top_left.y + shape.size.height) {
+        for 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);
         }
index 65d23e7916d4a6d38c675dbb76e7bbb4b4ecea57..49f70b28e9a83d219072f9d65e96c542f4423f6d 100644 (file)
@@ -17,7 +17,7 @@ fn foo(name: ~str, samples_chan: Chan<Msg>) {
         let callback: SamplesFn =
             |buffer|
             {
-                foreach i in range(0u, buffer.len()) {
+                for i in range(0u, buffer.len()) {
                     error!("%?: %f", i, buffer[i])
                 }
             };
index f9b374e7cd21b0a693bd80d15e2d2b739b040431..e0f216c667cbc07e52e7b74505b5b116b5adb767 100644 (file)
@@ -102,7 +102,7 @@ enum Result {
   let mut res = ~"*";
   res.push_str(cmd.len().to_str());
   res.push_str("\r\n");
-    foreach s in cmd.iter() {
+    for s in cmd.iter() {
     res.push_str([~"$", s.len().to_str(), ~"\r\n",
                   (*s).clone(), ~"\r\n"].concat() );
     }
index da46eb421521d49ba5e7858825008c547ac62d89..f12aa6c3356cac5c9e0beb4402d5ef4edbe15efb 100644 (file)
@@ -12,7 +12,7 @@
 
 pub fn main() {
     let x = os::args();
-    foreach arg in x.iter() {
+    for arg in x.iter() {
         match arg.clone() {
             s => { }
         }
index c6002afded75ae01d1c446785abc5409a0f8b4a4..01ee4e2063855866c9deacc48074e6e72aa7fd31 100644 (file)
 pub fn main() {
     let x = ~[1, 2, 3];
     let mut y = 0;
-    foreach i in x.iter() { info!(*i); y += *i; }
+    for i in x.iter() { info!(*i); y += *i; }
     info!(y);
     assert_eq!(y, 6);
     let s = ~"hello there";
     let mut i: int = 0;
-    foreach c in s.byte_iter() {
+    for c in s.byte_iter() {
         if i == 0 { assert!((c == 'h' as u8)); }
         if i == 1 { assert!((c == 'e' as u8)); }
         if i == 2 { assert!((c == 'l' as u8)); }
index 746487f8aff581492f7417e12ae0c1a55c729e02..436bdf256ca422b7928cc3d584fb895bfef86404 100644 (file)
@@ -11,6 +11,6 @@
 pub fn main() {
     let x = ~[10, 20, 30];
     let mut sum = 0;
-    foreach x in x.iter() { sum += *x; }
+    for x in x.iter() { sum += *x; }
     assert_eq!(sum, 60);
 }
index 9f79ca2f9365be31674a09c4583cdc87a884af84..cec0a7a756c9fee8bfc77db20ba8a9cd3369fbab 100644 (file)
@@ -22,7 +22,7 @@ fn iloop() {
 }
 
 pub fn main() {
-    foreach _ in range(0u, 100u) {
+    for _ in range(0u, 100u) {
         task::spawn_unlinked(|| iloop() );
     }
 }
index 316f872b82fd278f3e4dd32e2f9c26ff2c175595..eeac89f49669a3eff1c5f50b1b691415297822ca 100644 (file)
@@ -19,7 +19,7 @@ trait vec_monad<A> {
 impl<A> vec_monad<A> for ~[A] {
     fn bind<B>(&self, f: &fn(&A) -> ~[B]) -> ~[B] {
         let mut r = ~[];
-        foreach elt in self.iter() {
+        for elt in self.iter() {
             r.push_all_move(f(elt));
         }
         r
index a4a1f4bb28fdffb4618a84a2f311abb43dd8de6d..45473193de93ee0ae851798edb83398a826d1758 100644 (file)
@@ -67,7 +67,7 @@ pub fn main() {
         calllink10
     ];
     let mut rng = rand::rng();
-    foreach f in fns.iter() {
+    for f in fns.iter() {
         let f = *f;
         let sz = rng.next() % 256u32 + 256u32;
         let frame_backoff = rng.next() % 10u32 + 1u32;
index 827c43cbcae20bcf82bf1aeb9e5361b2c6428fe5..46308e02e78585fe5a11a33b148087d139b1d13c 100644 (file)
@@ -26,7 +26,7 @@ fn test(x: bool, foo: ~Triple) -> int {
 
 pub fn main() {
     let x = ~Triple{x: 1, y: 2, z: 3};
-    foreach _ in range(0u, 10000u) {
+    for _ in range(0u, 10000u) {
         assert_eq!(test(true, x.clone()), 2);
     }
     assert_eq!(test(false, x), 5);
index a33098ad72306d4288ccd039cf0de5a9218ff641..dbc7886adc99359fb6dadf474beaaa95173796c5 100644 (file)
@@ -21,7 +21,7 @@ fn test(x: bool, foo: @Triple) -> int {
 
 pub fn main() {
     let x = @Triple{x: 1, y: 2, z: 3};
-    foreach i in range(0u, 10000u) {
+    for i in range(0u, 10000u) {
         assert_eq!(test(true, x), 2);
     }
     assert_eq!(test(false, x), 5);
index 5de4b74922c81437d5d8f0a8a6fc2c3c94351011..855c77e92cf515d60c3753ebeeeb0d62b1acd2fd 100644 (file)
@@ -16,8 +16,8 @@ fn test1() {
 
 fn test2() {
     let mut ints = [0, ..32];
-    foreach i in ints.mut_iter() { *i += 22; }
-    foreach i in ints.iter() { assert!(*i == 22); }
+    for i in ints.mut_iter() { *i += 22; }
+    for i in ints.iter() { assert!(*i == 22); }
 }
 
 pub fn main() {
index 706168844f5121a5736cadcafa3eaee68e6d7d68..0f83a8e730e8590273c2272765b5d0a6d7115f92 100644 (file)
@@ -31,7 +31,7 @@ fn push(&mut self, key: K, value: V) {
 
 impl<K:Eq,V:Clone> Index<K,V> for AssociationList<K,V> {
     fn index(&self, index: &K) -> V {
-        foreach pair in self.pairs.iter() {
+        for pair in self.pairs.iter() {
             if pair.key == *index {
                 return pair.value.clone();
             }
index dd570f85244254fb4fe59b712d48780816d49bf2..c9d0fde6d3c2f83d698c75c5750908981cfa339d 100644 (file)
@@ -29,7 +29,7 @@ pub fn main() {
         ~BarStruct{ x: 2 } as ~FooTrait
     ];
 
-    foreach i in range(0u, foos.len()) {
+    for i in range(0u, foos.len()) {
         assert_eq!(i, foos[i].foo());
     }
 }
index 844a7c732a31315d5800d37d210ee3b818b19cde..930ef17dbf5f4f2934c3dea4f3be26cd77bf846d 100644 (file)
@@ -22,11 +22,11 @@ fn main() {
 
     assert_eq!(sys::size_of::<[Foo, .. 10]>(), 90);
 
-    foreach i in range(0u, 10) {
+    for i in range(0u, 10) {
         assert_eq!(foos[i], Foo { bar: 1, baz: 2});
     }
 
-    foreach &foo in foos.iter() {
+    for &foo in foos.iter() {
         assert_eq!(foo, Foo { bar: 1, baz: 2 });
     }
 }
index 2bdb381ee2c560e9f46b6d7bd289f57bba11e247..d3ae339acf27986ea6ff4a19b6b7f75de405e81a 100644 (file)
@@ -16,7 +16,7 @@ fn foo(src: uint) {
 
     match Some(src) {
       Some(src_id) => {
-        foreach i in range(0u, 10u) {
+        for i in range(0u, 10u) {
             let yyy = src_id;
             assert_eq!(yyy, 0u);
         }
index c218b6ba0136aea29d1de95f644cc0f40c217822..8b2b5bfa00bfd2da61c2aad19a1e51194e1057ca 100644 (file)
@@ -22,7 +22,7 @@ pub fn play(&mut self) {
 }
 
 impl cat {
-    fn nap(&mut self) { foreach _ in range(1u, 10u) { } }
+    fn nap(&mut self) { for _ in range(1u, 10u) { } }
 }
 
 fn cat(in_x : uint, in_y : int) -> cat {
index 090b5f549d4b3168c01104f2d02eb4a23181b6b6..2a91d1fc8b5ca96523474eabe9787a064265cc53 100644 (file)
@@ -666,7 +666,7 @@ pub fn main() {
         visit_tydesc(td, v);
 
         let r = u.vals.clone();
-        foreach s in r.iter() {
+        for s in r.iter() {
             printfln!("val: %s", *s);
         }
         error!("%?", u.vals.clone());
index e80dc2269c2f91566f9fad56d027ead263ed0d54..3ea597e0d59e37defe96a079d009f53e4313a960 100644 (file)
@@ -170,7 +170,7 @@ pub fn main() {
     visit_ty::<i16>(vv);
     visit_ty::<~[int]>(vv);
 
-    foreach s in v.types.iter() {
+    for s in v.types.iter() {
         printfln!("type: %s", (*s).clone());
     }
     assert_eq!((*v.types).clone(), ~[~"bool", ~"int", ~"i8", ~"i16", ~"[", ~"int", ~"]"]);
index a727c28fe83518497ca21fffd3fbc674d1ab65fb..6284130de177c633dfe1b66b0672f89bde1f4fe9 100644 (file)
@@ -13,7 +13,7 @@
 pub fn main() {
     let mut x = 4;
 
-    foreach i in range(0u, 3) {
+    for 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
index 65c5ca0aee7b592a0ef63f3d7640ab6bae0fb0cc..e27f35d1851d52c743dab38ba5d78240113a62fb 100644 (file)
@@ -33,7 +33,7 @@ fn iloop() {
 }
 
 pub fn main() {
-    foreach _ in range(0u, 16u) {
+    for _ in range(0u, 16u) {
         task::spawn_unlinked(|| iloop() );
     }
 }
index 5cb2f9b872799dcea135246d984d799547231574..5109f3c92f1f2af5b9aa40ec4e7ad54a1691616d 100644 (file)
@@ -16,7 +16,7 @@ fn foo(c: ~[int]) {
 
     match none::<int> {
         some::<int>(_) => {
-            foreach i in c.iter() {
+            for i in c.iter() {
                 info!(a);
                 let a = 17;
                 b.push(a);
index babf5a2fa9089c89a71f5f01bf6b09ef6544410f..057bc57269d19bea8e54668d67dc5571aeb6ad93 100644 (file)
@@ -26,7 +26,7 @@ pub fn main() {
         match io::file_writer(&path, [io::Create, io::Truncate]) {
             Err(ref e) => fail!(e.clone()),
             Ok(f) => {
-                foreach _ in range(0u, 1000) {
+                for _ in range(0u, 1000) {
                     f.write_u8(0);
                 }
             }
index 4f86c87518a1e83b45911fdd2197f1657f5a6d77..457c5a3352d124aef89396c8739c51bc277f4993 100644 (file)
@@ -48,10 +48,10 @@ trait vec_utils<T> {
 
 impl<T> vec_utils<T> for ~[T] {
     fn length_(&self) -> uint { self.len() }
-    fn iter_(&self, f: &fn(&T)) { foreach x in self.iter() { f(x); } }
+    fn iter_(&self, f: &fn(&T)) { for x in self.iter() { f(x); } }
     fn map_<U>(&self, f: &fn(&T) -> U) -> ~[U] {
         let mut r = ~[];
-        foreach elt in self.iter() {
+        for elt in self.iter() {
             r.push(f(elt));
         }
         r
index ba0e17d45769545d11ed415e11163bb2185f50f3..b9083f289725d266de6333d6576dd3084064ac5d 100644 (file)
@@ -55,7 +55,7 @@ fn test00() {
 
     // Read from spawned tasks...
     let mut sum = 0;
-    foreach r in results.iter() {
+    for r in results.iter() {
         i = 0;
         while i < number_of_messages {
             let value = po.recv();
@@ -65,7 +65,7 @@ fn test00() {
     }
 
     // Join spawned tasks...
-    foreach r in results.iter() { r.recv(); }
+    for r in results.iter() { r.recv(); }
 
     info!("Completed: Final number is: ");
     error!(sum);
index e0be4ccf810802d34179a9315b6814b5b2e6b730..1360b76653c5d01794ab38773d901ecbdec5ed46 100644 (file)
@@ -84,20 +84,20 @@ fn main() {
 
 fn check_legs(arc: arc::Arc<~[~Pet:Freeze+Send]>) {
     let mut legs = 0;
-    foreach pet in arc.get().iter() {
+    for pet in arc.get().iter() {
         legs += pet.num_legs();
     }
     assert!(legs == 12);
 }
 fn check_names(arc: arc::Arc<~[~Pet:Freeze+Send]>) {
-    foreach pet in arc.get().iter() {
+    for pet in arc.get().iter() {
         do pet.name |name| {
             assert!(name[0] == 'a' as u8 && name[1] == 'l' as u8);
         }
     }
 }
 fn check_pedigree(arc: arc::Arc<~[~Pet:Freeze+Send]>) {
-    foreach pet in arc.get().iter() {
+    for pet in arc.get().iter() {
         assert!(pet.of_good_pedigree());
     }
 }
index 24e2b95a5df1872f681ea37ef5716a937afd8f6a..47d9665217c2100044f0c8f2371745ea79655776 100644 (file)
@@ -32,7 +32,7 @@ impl<T> map<T> for ~[T] {
     fn map<U>(&self, f: &fn(&T) -> U) -> ~[U] {
         let mut r = ~[];
         // FIXME: #7355 generates bad code with VecIterator
-        foreach i in range(0u, self.len()) {
+        for i in range(0u, self.len()) {
             r.push(f(&self[i]));
         }
         r
index a5b85681420a103eed4a93f1965f77080153ce21..2471aee3c21ebd41f80f50a5843f67a8ce79f3b9 100644 (file)
@@ -26,7 +26,7 @@ fn count(st: &mut uint) -> Option<uint> {
 
     let mut it = Unfoldr::new(0, count);
     let mut i = 0;
-    foreach counted in it {
+    for counted in it {
         assert_eq!(counted, i);
         i += 1;
     }
index 60d28d832df23df0220b653e306c42ab42d42b15..9face041eb24030f35d4a52511835317bc1b8ef8 100644 (file)
@@ -20,14 +20,14 @@ pub fn main() {
     let ch = SharedChan::new(ch);
     let n = 100u;
     let mut expected = 0u;
-    foreach i in range(0u, n) {
+    for i in range(0u, n) {
         let ch = ch.clone();
         task::spawn(|| child(&ch, i) );
         expected += i;
     }
 
     let mut actual = 0u;
-    foreach _ in range(0u, n) {
+    for _ in range(0u, n) {
         let j = p.recv();
         actual += *j;
     }
index a36be079b43434e9e2cbe2eaf927704f6e74aff9..bde90e3726ed3d7fdc45bcbf4d3fdf96cbbaf30a 100644 (file)
@@ -8,7 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// xfail-test
+// xfail-fast
+
 extern mod extra;
 
 use std::comm::*;
index 1ebe72d19c11fd8c6a44341ea6d5ccef8f8698f8..0eb3fd75dc3dab6430959cdd382ea2a6895a1393 100644 (file)
@@ -41,7 +41,7 @@ pub fn main() {
 
     fn check_str_eq(a: ~str, b: ~str) {
         let mut i: int = 0;
-        foreach ab in a.byte_iter() {
+        for ab in a.byte_iter() {
             info!(i);
             info!(ab);
             let bb: u8 = b[i];