Skip to content

Commit 432c6cb

Browse files
committed
core: Make range follow the for loop protocol
1 parent 5281db2 commit 432c6cb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+102
-88
lines changed

src/compiletest/runtest.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ fn check_expected_errors(expected_errors: [errors::expected_error],
277277
}
278278
}
279279

280-
uint::range(0u, vec::len(found_flags)) {|i|
280+
for uint::range(0u, vec::len(found_flags)) {|i|
281281
if !found_flags[i] {
282282
let ee = expected_errors[i];
283283
fatal_procres(#fmt["expected %s on line %u not found: %s",

src/libcore/int-template.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,12 @@ pure fn is_nonpositive(x: T) -> bool { x <= 0 as T }
3636
pure fn is_nonnegative(x: T) -> bool { x >= 0 as T }
3737

3838
#[doc = "Iterate over the range [`lo`..`hi`)"]
39-
fn range(lo: T, hi: T, it: fn(T)) {
39+
fn range(lo: T, hi: T, it: fn(T) -> bool) {
4040
let mut i = lo;
41-
while i < hi { it(i); i += 1 as T; }
41+
while i < hi {
42+
if !it(i) { break }
43+
i += 1 as T;
44+
}
4245
}
4346

4447
#[doc = "Computes the bitwise complement"]

src/libcore/priv.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,12 @@ fn test_from_global_chan2() unsafe {
127127

128128
// Spawn a bunch of tasks that all want to compete to
129129
// create the global channel
130-
uint::range(0u, 10u) {|i|
130+
for uint::range(0u, 10u) {|i|
131131
task::spawn() {||
132132
let ch = chan_from_global_ptr(
133133
globchanp, task::builder) {|po|
134134

135-
uint::range(0u, 10u) {|_j|
135+
for uint::range(0u, 10u) {|_j|
136136
let ch = comm::recv(po);
137137
comm::send(ch, {i});
138138
}
@@ -147,7 +147,7 @@ fn test_from_global_chan2() unsafe {
147147
}
148148
// There should be only one winner
149149
let mut winners = 0u;
150-
uint::range(0u, 10u) {|_i|
150+
for uint::range(0u, 10u) {|_i|
151151
let res = comm::recv(resultpo);
152152
if res { winners += 1u };
153153
}

src/libcore/rand.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ impl extensions for rng {
202202
fn weighted_vec<T:copy>(v: [weighted<T>]) -> [T] {
203203
let mut r = [];
204204
for v.each {|item|
205-
uint::range(0u, item.weight) {|_i|
205+
for uint::range(0u, item.weight) {|_i|
206206
r += [item.item];
207207
}
208208
}

src/libcore/uint-template.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,12 @@ pure fn is_nonpositive(x: T) -> bool { x <= 0 as T }
3535
pure fn is_nonnegative(x: T) -> bool { x >= 0 as T }
3636

3737
#[doc = "Iterate over the range [`lo`..`hi`)"]
38-
fn range(lo: T, hi: T, it: fn(T)) {
38+
fn range(lo: T, hi: T, it: fn(T) -> bool) {
3939
let mut i = lo;
40-
while i < hi { it(i); i += 1 as T; }
40+
while i < hi {
41+
if !it(i) { break }
42+
i += 1 as T;
43+
}
4144
}
4245

4346
#[doc = "Computes the bitwise complement"]

src/libcore/vec.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -892,7 +892,7 @@ Both vectors must have the same length
892892
#[inline]
893893
fn iter2<U, T>(v1: [const U], v2: [const T], f: fn(U, T)) {
894894
assert len(v1) == len(v2);
895-
uint::range(0u, len(v1)) {|i|
895+
for uint::range(0u, len(v1)) {|i|
896896
f(v1[i], v2[i])
897897
}
898898
}

src/librustsyntax/codemap.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ fn span_to_lines(sp: span, cm: codemap::codemap) -> @file_lines {
183183
let lo = lookup_char_pos(cm, sp.lo);
184184
let hi = lookup_char_pos(cm, sp.hi);
185185
let mut lines = [];
186-
uint::range(lo.line - 1u, hi.line as uint) {|i| lines += [i]; };
186+
for uint::range(lo.line - 1u, hi.line as uint) {|i| lines += [i]; };
187187
ret @{file: lo.file, lines: lines};
188188
}
189189

src/librustsyntax/ext/qquote.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ fn finish<T: qq_helper>
193193
let qcx = gather_anti_quotes(sp.lo, node);
194194
let cx = qcx;
195195

196-
uint::range(1u, cx.gather.len()) {|i|
196+
for uint::range(1u, cx.gather.len()) {|i|
197197
assert cx.gather[i-1u].lo < cx.gather[i].lo;
198198
// ^^ check that the vector is sorted
199199
assert cx.gather[i-1u].hi <= cx.gather[i].lo;

src/libstd/bitv.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ fn process(v0: bitv, v1: bitv, op: fn(uint, uint) -> uint) -> bool {
4646
assert (vec::len(v0.storage) == len);
4747
assert (v0.nbits == v1.nbits);
4848
let mut changed = false;
49-
uint::range(0u, len) {|i|
49+
for uint::range(0u, len) {|i|
5050
let w0 = v0.storage[i];
5151
let w1 = v1.storage[i];
5252
let w = op(w0, w1);
@@ -90,7 +90,7 @@ fn assign(v0: bitv, v1: bitv) -> bool {
9090
fn clone(v: bitv) -> bitv {
9191
let storage = vec::to_mut(vec::from_elem(v.nbits / uint_bits + 1u, 0u));
9292
let len = vec::len(v.storage);
93-
uint::range(0u, len) {|i| storage[i] = v.storage[i]; };
93+
for uint::range(0u, len) {|i| storage[i] = v.storage[i]; };
9494
ret @{storage: storage, nbits: v.nbits};
9595
}
9696

@@ -121,17 +121,17 @@ fn equal(v0: bitv, v1: bitv) -> bool {
121121

122122
#[doc = "Set all bits to 0"]
123123
fn clear(v: bitv) {
124-
uint::range(0u, vec::len(v.storage)) {|i| v.storage[i] = 0u; };
124+
for uint::range(0u, vec::len(v.storage)) {|i| v.storage[i] = 0u; };
125125
}
126126

127127
#[doc = "Set all bits to 1"]
128128
fn set_all(v: bitv) {
129-
uint::range(0u, v.nbits) {|i| set(v, i, true); };
129+
for uint::range(0u, v.nbits) {|i| set(v, i, true); };
130130
}
131131

132132
#[doc = "Invert all bits"]
133133
fn invert(v: bitv) {
134-
uint::range(0u, vec::len(v.storage)) {|i|
134+
for uint::range(0u, vec::len(v.storage)) {|i|
135135
v.storage[i] = !v.storage[i];
136136
};
137137
}

src/libstd/rope.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -158,13 +158,13 @@ fn concat(v: [rope]) -> rope {
158158
let mut len = vec::len(v);
159159
if len == 0u { ret node::empty; }
160160
let ropes = vec::to_mut(vec::from_elem(len, v[0]));
161-
uint::range(1u, len) {|i|
161+
for uint::range(1u, len) {|i|
162162
ropes[i] = v[i];
163163
}
164164

165165
//Merge progresively
166166
while len > 1u {
167-
uint::range(0u, len/2u) {|i|
167+
for uint::range(0u, len/2u) {|i|
168168
ropes[i] = append_rope(ropes[2u*i], ropes[2u*i+1u]);
169169
}
170170
if len%2u != 0u {
@@ -1352,19 +1352,19 @@ mod tests {
13521352
fn char_at1() {
13531353
//Generate a large rope
13541354
let mut r = of_str(@ "123456789");
1355-
uint::range(0u, 10u){|_i|
1355+
for uint::range(0u, 10u){|_i|
13561356
r = append_rope(r, r);
13571357
}
13581358

13591359
//Copy it in the slowest possible way
13601360
let mut r2 = empty();
1361-
uint::range(0u, char_len(r)){|i|
1361+
for uint::range(0u, char_len(r)){|i|
13621362
r2 = append_char(r2, char_at(r, i));
13631363
}
13641364
assert eq(r, r2);
13651365

13661366
let mut r3 = empty();
1367-
uint::range(0u, char_len(r)){|i|
1367+
for uint::range(0u, char_len(r)){|i|
13681368
r3 = prepend_char(r3, char_at(r, char_len(r) - i - 1u));
13691369
}
13701370
assert eq(r, r3);
@@ -1385,7 +1385,7 @@ mod tests {
13851385
//Generate a reasonable rope
13861386
let chunk = of_str(@ "123456789");
13871387
let mut r = empty();
1388-
uint::range(0u, 10u){|_i|
1388+
for uint::range(0u, 10u){|_i|
13891389
r = append_rope(r, chunk);
13901390
}
13911391

src/rustc/back/rpath.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ fn get_relative_to(abs1: path::path, abs2: path::path) -> path::path {
137137
}
138138

139139
let mut path = [];
140-
uint::range(start_idx, len1 - 1u) {|_i| path += [".."]; };
140+
for uint::range(start_idx, len1 - 1u) {|_i| path += [".."]; };
141141

142142
path += vec::slice(split2, start_idx, len2 - 1u);
143143

src/rustc/metadata/encoder.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ fn encode_info_for_items(ecx: @encode_ctxt, ebml_w: ebml::writer,
840840
fn create_index<T: copy>(index: [entry<T>], hash_fn: fn@(T) -> uint) ->
841841
[@[entry<T>]] {
842842
let mut buckets: [@mut [entry<T>]] = [];
843-
uint::range(0u, 256u) {|_i| buckets += [@mut []]; };
843+
for uint::range(0u, 256u) {|_i| buckets += [@mut []]; };
844844
for index.each {|elt|
845845
let h = hash_fn(elt.val);
846846
*buckets[h % 256u] += [elt];

src/rustc/middle/liveness.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ class liveness {
595595

596596
fn indices(ln: live_node, op: fn(uint)) {
597597
let node_base_idx = self.idx(ln, variable(0u));
598-
uint::range(0u, self.ir.num_vars) { |var_idx|
598+
for uint::range(0u, self.ir.num_vars) { |var_idx|
599599
op(node_base_idx + var_idx)
600600
}
601601
}
@@ -604,7 +604,7 @@ class liveness {
604604
op: fn(uint, uint)) {
605605
let node_base_idx = self.idx(ln, variable(0u));
606606
let succ_base_idx = self.idx(succ_ln, variable(0u));
607-
uint::range(0u, self.ir.num_vars) { |var_idx|
607+
for uint::range(0u, self.ir.num_vars) { |var_idx|
608608
op(node_base_idx + var_idx, succ_base_idx + var_idx);
609609
}
610610
}
@@ -613,7 +613,7 @@ class liveness {
613613
ln: live_node,
614614
test: fn(uint) -> live_node) {
615615
let node_base_idx = self.idx(ln, variable(0u));
616-
uint::range(0u, self.ir.num_vars) { |var_idx|
616+
for uint::range(0u, self.ir.num_vars) { |var_idx|
617617
let idx = node_base_idx + var_idx;
618618
if test(idx).is_valid() {
619619
wr.write_str(" ");
@@ -743,7 +743,7 @@ class liveness {
743743
// hack to skip the loop unless #debug is enabled:
744744
#debug["^^ liveness computation results for body %d (entry=%s)",
745745
{
746-
uint::range(0u, self.ir.num_live_nodes) { |ln_idx|
746+
for uint::range(0u, self.ir.num_live_nodes) { |ln_idx|
747747
#debug["%s", self.ln_str(live_node(ln_idx))];
748748
}
749749
body.node.id

src/rustc/middle/trans/native.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -945,7 +945,7 @@ fn trans_crust_fn(ccx: @crate_ctxt, path: ast_map::path, decl: ast::fn_decl,
945945
_ {
946946
let llretptr = alloca(bcx, tys.ret_ty);
947947
let n = vec::len(tys.arg_tys);
948-
uint::range(0u, n) {|i|
948+
for uint::range(0u, n) {|i|
949949
let llargval = get_param(llwrapfn, i);
950950
store_inbounds(bcx, llargval, llargbundle,
951951
[0u, i]);

src/rustc/middle/trans/shape.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ fn gen_enum_shapes(ccx: @crate_ctxt) -> ValueRef {
588588
fn gen_resource_shapes(ccx: @crate_ctxt) -> ValueRef {
589589
let mut dtors = [];
590590
let len = interner::len(ccx.shape_cx.resources);
591-
uint::range(0u, len) {|i|
591+
for uint::range(0u, len) {|i|
592592
let ri = interner::get(ccx.shape_cx.resources, i);
593593
dtors += [trans::base::get_res_dtor(ccx, ri.did, ri.tps)];
594594
}

src/rustc/middle/trans/type_use.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ fn type_uses_for(ccx: @crate_ctxt, fn_id: def_id, n_tps: uint)
7373
}
7474
ast_map::node_ctor(_, _, ast_map::res_ctor(_, _, _), _) |
7575
ast_map::node_variant(_, _, _) {
76-
uint::range(0u, n_tps) {|n| cx.uses[n] |= use_repr;}
76+
for uint::range(0u, n_tps) {|n| cx.uses[n] |= use_repr;}
7777
}
7878
ast_map::node_native_item(i@@{node: native_item_fn(_, _), _}, abi, _) {
7979
if abi == native_abi_rust_intrinsic {
@@ -84,7 +84,7 @@ fn type_uses_for(ccx: @crate_ctxt, fn_id: def_id, n_tps: uint)
8484
"get_tydesc" | "needs_drop" { use_tydesc }
8585
"forget" | "addr_of" { 0u }
8686
};
87-
uint::range(0u, n_tps) {|n| cx.uses[n] |= flags;}
87+
for uint::range(0u, n_tps) {|n| cx.uses[n] |= flags;}
8888
}
8989
}
9090
ast_map::node_ctor(_, _, ast_map::class_ctor(ctor, _), _){

src/test/auxiliary/cci_class_5.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ mod kitties {
33
class cat {
44
priv {
55
let mut meows : uint;
6-
fn nap() { uint::range(1u, 10000u) {|_i|}}
6+
fn nap() { for uint::range(1u, 10000u) {|_i|}}
77
}
88

99
let how_hungry : int;

src/test/bench/core-vec-append.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ import io::writer_util;
66

77
fn collect_raw(num: uint) -> [uint] {
88
let mut result = [];
9-
uint::range(0u, num) { |i|
9+
for uint::range(0u, num) { |i|
1010
result += [i];
1111
}
1212
ret result;
1313
}
1414

1515
fn collect_dvec(num: uint) -> [mut uint] {
1616
let result = dvec();
17-
uint::range(0u, num) { |i|
17+
for uint::range(0u, num) { |i|
1818
result.push(i);
1919
}
2020
ret dvec::unwrap(result);

src/test/bench/msgsend.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ fn run(args: [str]) {
3838
let start = std::time::precise_time_s();
3939
let to_child = to_child;
4040
let mut worker_results = [];
41-
uint::range(0u, workers) {|_i|
41+
for uint::range(0u, workers) {|_i|
4242
let builder = task::builder();
4343
worker_results += [task::future_result(builder)];
4444
task::run(builder) {||
45-
uint::range(0u, size / workers) {|_i|
45+
for uint::range(0u, size / workers) {|_i|
4646
comm::send(to_child, bytes(100u));
4747
}
4848
};

src/test/bench/shootout-fasta.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ fn make_random_fasta(id: str, desc: str, genelist: [aminoacids], n: int) {
4646
log(debug, ">" + id + " " + desc);
4747
let rng = @{mut last: std::rand::rng().next()};
4848
let mut op: str = "";
49-
uint::range(0u, n as uint) {|_i|
49+
for uint::range(0u, n as uint) {|_i|
5050
str::push_char(op, select_random(myrandom_next(rng, 100u32),
5151
genelist));
5252
if str::len(op) >= LINE_LENGTH() {
@@ -61,7 +61,7 @@ fn make_repeat_fasta(id: str, desc: str, s: str, n: int) unsafe {
6161
log(debug, ">" + id + " " + desc);
6262
let mut op: str = "";
6363
let sl: uint = str::len(s);
64-
uint::range(0u, n as uint) {|i|
64+
for uint::range(0u, n as uint) {|i|
6565
str::unsafe::push_byte(op, s[i % sl]);
6666
if str::len(op) >= LINE_LENGTH() {
6767
log(debug, op);

src/test/bench/shootout-mandelbrot.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ fn chanmb(i: uint, size: uint, ch: comm::chan<line>) -> ()
6969
let incr = 2./(size as f64);
7070
let y = incr*(i as f64) - 1.;
7171
let xincr = 8.*incr;
72-
uint::range(0_u, size/8_u) {
72+
for uint::range(0_u, size/8_u) {
7373
|j|
7474
let x = {re: xincr*(j as f64) - 1.5, im: y};
7575
crv += [fillbyte(x, incr)];
@@ -161,7 +161,7 @@ fn main(args: [str]) {
161161
writer(path, writech, size);
162162
};
163163
let ch = comm::recv(writep);
164-
uint::range(0_u, size) {|j|
164+
for uint::range(0_u, size) {|j|
165165
task::spawn {|| chanmb(j, size, ch);};
166166
if j % yieldevery == 0_u {
167167
#debug("Y %u", j);

src/test/bench/shootout-pfib.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ fn stress_task(&&id: int) {
7070

7171
fn stress(num_tasks: int) {
7272
let mut results = [];
73-
range(0, num_tasks) {|i|
73+
for range(0, num_tasks) {|i|
7474
let builder = task::builder();
7575
results += [task::future_result(builder)];
7676
task::run(builder) {|| stress_task(i); }
@@ -99,8 +99,8 @@ fn main(args: [str]) {
9999

100100
let out = io::stdout();
101101

102-
range(1, max + 1) {|n|
103-
range(0, num_trials) {|i|
102+
for range(1, max + 1) {|n|
103+
for range(0, num_trials) {|i|
104104
let start = time::precise_time_ns();
105105
let fibn = fib(n);
106106
let stop = time::precise_time_ns();

src/test/bench/shootout-threadring.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ fn start(+token: int) {
88

99
let p = comm::port();
1010
let mut ch = comm::chan(p);
11-
int::range(2, n_threads + 1) { |i|
11+
for int::range(2, n_threads + 1) { |i|
1212
let id = n_threads + 2 - i;
1313
let to_child = task::spawn_listener::<int> {|p, copy ch|
1414
roundtrip(id, p, ch)

0 commit comments

Comments
 (0)