diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2011-11-17 16:42:17 +0100 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2011-11-18 12:49:01 +0100 |
| commit | 8f8ebb550cf7e641d7dedd56e08efd4f0e15afab (patch) | |
| tree | fce19d94b7df2f56541a51898ca6d0c2048ddef5 /src/lib | |
| parent | 0c97fcbf6689d8d4f466cdea80369ae057a4523e (diff) | |
| download | rust-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.rs | 17 | ||||
| -rw-r--r-- | src/lib/vec.rs | 4 |
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; } } /* |
