From 8f8ebb550cf7e641d7dedd56e08efd4f0e15afab Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 17 Nov 2011 16:42:17 +0100 Subject: Implement a last-use-of-local finding algorithm Issue #925 --- src/lib/list.rs | 17 +++++++++++++++++ src/lib/vec.rs | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) (limited to 'src/lib') 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(l: list, m: list) -> list { } } +/* +Function: iter + +Iterate over a list +*/ +fn iter(l: list, 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(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; } } /* -- cgit 1.4.1-3-g733a5