about summary refs log tree commit diff
path: root/src/lib
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2011-11-17 16:42:17 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2011-11-18 12:49:01 +0100
commit8f8ebb550cf7e641d7dedd56e08efd4f0e15afab (patch)
treefce19d94b7df2f56541a51898ca6d0c2048ddef5 /src/lib
parent0c97fcbf6689d8d4f466cdea80369ae057a4523e (diff)
downloadrust-8f8ebb550cf7e641d7dedd56e08efd4f0e15afab.tar.gz
rust-8f8ebb550cf7e641d7dedd56e08efd4f0e15afab.zip
Implement a last-use-of-local finding algorithm
Issue #925
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/list.rs17
-rw-r--r--src/lib/vec.rs4
2 files changed, 19 insertions, 2 deletions
diff --git a/src/lib/list.rs b/src/lib/list.rs
index 60e8e4821fe..300a5c72a67 100644
--- a/src/lib/list.rs
+++ b/src/lib/list.rs
@@ -134,6 +134,23 @@ fn append<T>(l: list<T>, m: list<T>) -> list<T> {
     }
 }
 
+/*
+Function: iter
+
+Iterate over a list
+*/
+fn iter<copy T>(l: list<T>, f: block(T)) {
+    let cur = l;
+    while cur != nil {
+        alt cur {
+          cons(hd, tl) {
+            f(hd);
+            cur = *tl;
+          }
+        }
+    }
+}
+
 // Local Variables:
 // mode: rust;
 // fill-column: 78;
diff --git a/src/lib/vec.rs b/src/lib/vec.rs
index 35e416c121d..2ae7f2247b1 100644
--- a/src/lib/vec.rs
+++ b/src/lib/vec.rs
@@ -703,8 +703,8 @@ Iterates over vector `v` and, for each element, calls function `f` with the
 element's value and index.
 */
 fn iter2<T>(v: [const T], f: block(uint, T)) {
-    let i = 0u;
-    for x in v { f(i, x); i += 1u; }
+    let i = 0u, l = len(v);
+    while i < l { f(i, v[i]); i += 1u; }
 }
 
 /*