Skip to content

Commit 1219886

Browse files
committed
---
yaml --- r: 44504 b: refs/heads/master c: f34dd56 h: refs/heads/master v: v3
1 parent 33f32b2 commit 1219886

File tree

27 files changed

+125
-1387
lines changed

27 files changed

+125
-1387
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 566bcf2225634ee4d4698247fe89364440eb534c
2+
refs/heads/master: f34dd565d9316e1a0241512d9c2527ae05d1975e
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: a6d9689399d091c3265f00434a69c551a61c28dc
55
refs/heads/try: ef355f6332f83371e4acf04fc4eb940ab41d78d3

trunk/src/compiletest/runtest.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,8 +570,7 @@ fn make_run_args(config: config, _props: TestProps, testfile: &Path) ->
570570
};
571571

572572
let args = toolargs + ~[make_exe_name(config, testfile).to_str()];
573-
return ProcArgs {prog: args[0],
574-
args: vec::slice(args, 1, args.len()).to_vec()};
573+
return ProcArgs {prog: args[0], args: vec::slice(args, 1, args.len())};
575574
}
576575

577576
fn split_maybe_args(argstr: Option<~str>) -> ~[~str] {

trunk/src/libcargo/cargo.rc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1553,7 +1553,7 @@ pub fn cmd_list(c: &Cargo) {
15531553
sync(c);
15541554

15551555
if vec::len(c.opts.free) >= 3u {
1556-
let v = vec::slice(c.opts.free, 2u, vec::len(c.opts.free));
1556+
let v = vec::view(c.opts.free, 2u, vec::len(c.opts.free));
15571557
for vec::each(v) |name| {
15581558
if !valid_pkg_name(*name) {
15591559
error(fmt!("'%s' is an invalid source name", *name));

trunk/src/libcore/io.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ impl<T: Reader> ReaderUtil for T {
246246
// over-read by reading 1-byte per char needed
247247
nbread = if ncreq > nbreq { ncreq } else { nbreq };
248248
if nbread > 0 {
249-
bytes = vec::slice(bytes, offset, bytes.len()).to_vec();
249+
bytes = vec::slice(bytes, offset, bytes.len());
250250
}
251251
}
252252
chars
@@ -531,7 +531,7 @@ impl Reader for BytesReader {
531531
fn read(&self, bytes: &mut [u8], len: uint) -> uint {
532532
let count = uint::min(len, self.bytes.len() - self.pos);
533533
534-
let view = vec::slice(self.bytes, self.pos, self.bytes.len());
534+
let view = vec::view(self.bytes, self.pos, self.bytes.len());
535535
vec::bytes::copy_memory(bytes, view, count);
536536
537537
self.pos += count;
@@ -1008,7 +1008,7 @@ impl Writer for BytesWriter {
10081008
unsafe { vec::raw::set_len(&mut bytes, count); }
10091009
10101010
{
1011-
let view = vec::mut_slice(bytes, self.pos, count);
1011+
let view = vec::mut_view(bytes, self.pos, count);
10121012
vec::bytes::copy_memory(view, v, v_len);
10131013
}
10141014

trunk/src/libcore/os.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,24 +108,21 @@ pub mod win32 {
108108
let mut res = None;
109109
let mut done = false;
110110
while !done {
111-
let mut k: DWORD = 0;
112-
let buf = vec::cast_to_mut(vec::from_elem(n as uint, 0u16));
111+
let mut buf = vec::from_elem(n as uint, 0u16);
113112
do vec::as_mut_buf(buf) |b, _sz| {
114-
k = f(b, TMPBUF_SZ as DWORD);
113+
let k : DWORD = f(b, TMPBUF_SZ as DWORD);
115114
if k == (0 as DWORD) {
116115
done = true;
117116
} else if (k == n &&
118117
libc::GetLastError() ==
119118
libc::ERROR_INSUFFICIENT_BUFFER as DWORD) {
120119
n *= (2 as DWORD);
121120
} else {
121+
let sub = vec::slice(buf, 0u, k as uint);
122+
res = option::Some(str::from_utf16(sub));
122123
done = true;
123124
}
124125
}
125-
if k != 0 && done {
126-
let sub = vec::slice(buf, 0u, k as uint);
127-
res = option::Some(str::from_utf16(sub));
128-
}
129126
}
130127
return res;
131128
}

trunk/src/libcore/vec.rs

Lines changed: 65 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -220,21 +220,21 @@ pub pure fn head<T: Copy>(v: &[const T]) -> T { v[0] }
220220

221221
/// Returns a vector containing all but the first element of a slice
222222
pub pure fn tail<T: Copy>(v: &[const T]) -> ~[T] {
223-
slice(v, 1u, len(v)).to_vec()
223+
return slice(v, 1u, len(v));
224224
}
225225

226226
/**
227227
* Returns a vector containing all but the first `n` \
228228
* elements of a slice
229229
*/
230230
pub pure fn tailn<T: Copy>(v: &[const T], n: uint) -> ~[T] {
231-
slice(v, n, len(v)).to_vec()
231+
slice(v, n, len(v))
232232
}
233233

234234
/// Returns a vector containing all but the last element of a slice
235235
pub pure fn init<T: Copy>(v: &[const T]) -> ~[T] {
236236
assert len(v) != 0u;
237-
slice(v, 0u, len(v) - 1u).to_vec()
237+
slice(v, 0u, len(v) - 1u)
238238
}
239239

240240
/// Returns the last element of the slice `v`, failing if the slice is empty.
@@ -252,9 +252,20 @@ pub pure fn last_opt<T: Copy>(v: &[const T]) -> Option<T> {
252252
Some(v[len(v) - 1u])
253253
}
254254
255+
/// Returns a copy of the elements from [`start`..`end`) from `v`.
256+
pub pure fn slice<T: Copy>(v: &[const T], start: uint, end: uint) -> ~[T] {
257+
assert (start <= end);
258+
assert (end <= len(v));
259+
let mut result = ~[];
260+
unsafe {
261+
for uint::range(start, end) |i| { result.push(v[i]) }
262+
}
263+
result
264+
}
265+
255266
/// Return a slice that points into another slice.
256267
#[inline(always)]
257-
pub pure fn slice<T>(v: &r/[T], start: uint, end: uint) -> &r/[T] {
268+
pub pure fn view<T>(v: &r/[T], start: uint, end: uint) -> &r/[T] {
258269
assert (start <= end);
259270
assert (end <= len(v));
260271
do as_imm_buf(v) |p, _len| {
@@ -268,9 +279,7 @@ pub pure fn slice<T>(v: &r/[T], start: uint, end: uint) -> &r/[T] {
268279
269280
/// Return a slice that points into another slice.
270281
#[inline(always)]
271-
pub pure fn mut_slice<T>(v: &r/[mut T], start: uint,
272-
end: uint) -> &r/[mut T] {
273-
282+
pub pure fn mut_view<T>(v: &r/[mut T], start: uint, end: uint) -> &r/[mut T] {
274283
assert (start <= end);
275284
assert (end <= len(v));
276285
do as_mut_buf(v) |p, _len| {
@@ -284,7 +293,7 @@ pub pure fn mut_slice<T>(v: &r/[mut T], start: uint,
284293
285294
/// Return a slice that points into another slice.
286295
#[inline(always)]
287-
pub pure fn const_slice<T>(v: &r/[const T], start: uint,
296+
pub pure fn const_view<T>(v: &r/[const T], start: uint,
288297
end: uint) -> &r/[const T] {
289298
assert (start <= end);
290299
assert (end <= len(v));
@@ -310,12 +319,12 @@ pub fn split<T: Copy>(v: &[T], f: fn(t: &T) -> bool) -> ~[~[T]] {
310319
match position_between(v, start, ln, f) {
311320
None => break,
312321
Some(i) => {
313-
result.push(slice(v, start, i).to_vec());
322+
result.push(slice(v, start, i));
314323
start = i + 1u;
315324
}
316325
}
317326
}
318-
result.push(slice(v, start, ln).to_vec());
327+
result.push(slice(v, start, ln));
319328
result
320329
}
321330
@@ -334,14 +343,14 @@ pub fn splitn<T: Copy>(v: &[T], n: uint, f: fn(t: &T) -> bool) -> ~[~[T]] {
334343
match position_between(v, start, ln, f) {
335344
None => break,
336345
Some(i) => {
337-
result.push(slice(v, start, i).to_vec());
346+
result.push(slice(v, start, i));
338347
// Make sure to skip the separator.
339348
start = i + 1u;
340349
count -= 1u;
341350
}
342351
}
343352
}
344-
result.push(slice(v, start, ln).to_vec());
353+
result.push(slice(v, start, ln));
345354
result
346355
}
347356
@@ -359,12 +368,12 @@ pub fn rsplit<T: Copy>(v: &[T], f: fn(t: &T) -> bool) -> ~[~[T]] {
359368
match rposition_between(v, 0, end, f) {
360369
None => break,
361370
Some(i) => {
362-
result.push(slice(v, i + 1, end).to_vec());
371+
result.push(slice(v, i + 1, end));
363372
end = i;
364373
}
365374
}
366375
}
367-
result.push(slice(v, 0u, end).to_vec());
376+
result.push(slice(v, 0u, end));
368377
reverse(result);
369378
return result;
370379
}
@@ -384,14 +393,14 @@ pub fn rsplitn<T: Copy>(v: &[T], n: uint, f: fn(t: &T) -> bool) -> ~[~[T]] {
384393
match rposition_between(v, 0u, end, f) {
385394
None => break,
386395
Some(i) => {
387-
result.push(slice(v, i + 1u, end).to_vec());
396+
result.push(slice(v, i + 1u, end));
388397
// Make sure to skip the separator.
389398
end = i;
390399
count -= 1u;
391400
}
392401
}
393402
}
394-
result.push(slice(v, 0u, end).to_vec());
403+
result.push(slice(v, 0u, end));
395404
reverse(result);
396405
result
397406
}
@@ -469,15 +478,15 @@ pub fn shift<T>(v: &mut ~[T]) -> T {
469478
// popped. For the moment it unsafely exists at both the head and last
470479
// positions
471480
{
472-
let first_slice = slice(*v, 0, 1);
473-
let last_slice = slice(*v, next_ln, ln);
481+
let first_slice = view(*v, 0, 1);
482+
let last_slice = view(*v, next_ln, ln);
474483
raw::copy_memory(::cast::transmute(last_slice), first_slice, 1);
475484
}
476485
477486
// Memcopy everything to the left one element
478487
{
479-
let init_slice = slice(*v, 0, next_ln);
480-
let tail_slice = slice(*v, 1, ln);
488+
let init_slice = view(*v, 0, next_ln);
489+
let tail_slice = view(*v, 1, ln);
481490
raw::copy_memory(::cast::transmute(init_slice),
482491
tail_slice,
483492
next_ln);
@@ -1455,9 +1464,9 @@ pure fn each_permutation<T: Copy>(v: &[T], put: fn(ts: &[T]) -> bool) {
14551464
let mut i = 0u;
14561465
while i < ln {
14571466
let elt = v[i];
1458-
let mut rest = slice(v, 0u, i).to_vec();
1467+
let mut rest = slice(v, 0u, i);
14591468
unsafe {
1460-
rest.push_all(const_slice(v, i+1u, ln));
1469+
rest.push_all(const_view(v, i+1u, ln));
14611470
for each_permutation(rest) |permutation| {
14621471
if !put(append(~[elt], permutation)) {
14631472
return;
@@ -1476,7 +1485,7 @@ pub pure fn windowed<TT: Copy>(nn: uint, xx: &[TT]) -> ~[~[TT]] {
14761485
let len = vec::len(xx);
14771486
if ii+nn <= len {
14781487
unsafe {
1479-
ww.push(slice(xx, ii, ii+nn).to_vec());
1488+
ww.push(vec::slice(xx, ii, ii+nn));
14801489
}
14811490
}
14821491
}
@@ -1680,7 +1689,7 @@ impl<T: Copy> CopyableVector<T> for &[const T] {
16801689
/// Returns a copy of the elements from [`start`..`end`) from `v`.
16811690
#[inline]
16821691
pure fn slice(&self, start: uint, end: uint) -> ~[T] {
1683-
slice(*self, start, end).to_vec()
1692+
slice(*self, start, end)
16841693
}
16851694

16861695
/// Returns all but the first element of a vector
@@ -1704,7 +1713,7 @@ impl<T> ImmutableVector<T> for &[T] {
17041713
/// Return a slice that points into another slice.
17051714
#[inline]
17061715
pure fn view(&self, start: uint, end: uint) -> &self/[T] {
1707-
slice(*self, start, end)
1716+
view(*self, start, end)
17081717
}
17091718

17101719
/// Reduce a vector from right to left
@@ -2557,45 +2566,42 @@ mod tests {
25572566

25582567
#[test]
25592568
fn test_slice() {
2560-
// Test fixed length vector.
2561-
let vec_fixed = [1, 2, 3, 4];
2562-
let v_a = slice(vec_fixed, 1u, len(vec_fixed)).to_vec();
2563-
assert (len(v_a) == 3u);
2564-
assert (v_a[0] == 2);
2565-
assert (v_a[1] == 3);
2566-
assert (v_a[2] == 4);
2567-
2568-
// Test on stack.
2569-
let vec_stack = &[1, 2, 3];
2570-
let v_b = slice(vec_stack, 1u, 3u).to_vec();
2571-
assert (len(v_b) == 2u);
2572-
assert (v_b[0] == 2);
2573-
assert (v_b[1] == 3);
2574-
2575-
// Test on managed heap.
2576-
let vec_managed = @[1, 2, 3, 4, 5];
2577-
let v_c = slice(vec_managed, 0u, 3u).to_vec();
2578-
assert (len(v_c) == 3u);
2579-
assert (v_c[0] == 1);
2580-
assert (v_c[1] == 2);
2581-
assert (v_c[2] == 3);
2582-
2583-
// Test on exchange heap.
2584-
let vec_unique = ~[1, 2, 3, 4, 5, 6];
2585-
let v_d = slice(vec_unique, 1u, 6u).to_vec();
2586-
assert (len(v_d) == 5u);
2587-
assert (v_d[0] == 2);
2588-
assert (v_d[1] == 3);
2589-
assert (v_d[2] == 4);
2590-
assert (v_d[3] == 5);
2591-
assert (v_d[4] == 6);
2569+
// Test on-stack -> on-stack slice.
2570+
let mut v = slice(~[1, 2, 3], 1u, 3u);
2571+
assert (len(v) == 2u);
2572+
assert (v[0] == 2);
2573+
assert (v[1] == 3);
2574+
2575+
// Test on-heap -> on-stack slice.
2576+
v = slice(~[1, 2, 3, 4, 5], 0u, 3u);
2577+
assert (len(v) == 3u);
2578+
assert (v[0] == 1);
2579+
assert (v[1] == 2);
2580+
assert (v[2] == 3);
2581+
2582+
// Test on-heap -> on-heap slice.
2583+
v = slice(~[1, 2, 3, 4, 5, 6], 1u, 6u);
2584+
assert (len(v) == 5u);
2585+
assert (v[0] == 2);
2586+
assert (v[1] == 3);
2587+
assert (v[2] == 4);
2588+
assert (v[3] == 5);
2589+
assert (v[4] == 6);
25922590
}
25932591

25942592
#[test]
25952593
fn test_pop() {
2594+
// Test on-stack pop.
2595+
let mut v = ~[1, 2, 3];
2596+
let mut e = v.pop();
2597+
assert (len(v) == 2u);
2598+
assert (v[0] == 1);
2599+
assert (v[1] == 2);
2600+
assert (e == 3);
2601+
25962602
// Test on-heap pop.
2597-
let mut v = ~[1, 2, 3, 4, 5];
2598-
let e = v.pop();
2603+
v = ~[1, 2, 3, 4, 5];
2604+
e = v.pop();
25992605
assert (len(v) == 4u);
26002606
assert (v[0] == 1);
26012607
assert (v[1] == 2);

trunk/src/librustc/back/rpath.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ pub fn get_relative_to(abs1: &Path, abs2: &Path) -> Path {
157157
let mut path = ~[];
158158
for uint::range(start_idx, len1 - 1) |_i| { path.push(~".."); };
159159

160-
path.push_all(vec::slice(split2, start_idx, len2 - 1));
160+
path.push_all(vec::view(split2, start_idx, len2 - 1));
161161

162162
if !path.is_empty() {
163163
return Path("").push_many(path);

trunk/src/librustc/metadata/decoder.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ fn lookup_hash(d: ebml::Doc, eq_fn: fn(x:&[u8]) -> bool, hash: uint) ->
6464
let belt = tag_index_buckets_bucket_elt;
6565
for reader::tagged_docs(tagged_doc.doc, belt) |elt| {
6666
let pos = io::u64_from_be_bytes(*elt.data, elt.start, 4u) as uint;
67-
if eq_fn(vec::slice(*elt.data, elt.start + 4u, elt.end)) {
67+
if eq_fn(vec::view(*elt.data, elt.start + 4u, elt.end)) {
6868
return Some(reader::doc_at(d.data, pos).doc);
6969
}
7070
};
@@ -75,8 +75,7 @@ pub type GetCrateDataCb = &fn(ast::crate_num) -> cmd;
7575

7676
pub fn maybe_find_item(item_id: int, items: ebml::Doc) -> Option<ebml::Doc> {
7777
fn eq_item(bytes: &[u8], item_id: int) -> bool {
78-
return io::u64_from_be_bytes(
79-
vec::slice(bytes, 0u, 4u), 0u, 4u) as int
78+
return io::u64_from_be_bytes(vec::view(bytes, 0u, 4u), 0u, 4u) as int
8079
== item_id;
8180
}
8281
lookup_hash(items,

trunk/src/librustc/metadata/encoder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,7 +1147,7 @@ fn encode_crate_deps(ecx: @encode_ctxt,
11471147
}
11481148
11491149
// mut -> immutable hack for vec::map
1150-
return vec::slice(deps, 0u, vec::len(deps)).to_vec();
1150+
return vec::slice(deps, 0u, vec::len(deps));
11511151
}
11521152
11531153
// We're just going to write a list of crate 'name-hash-version's, with
@@ -1307,7 +1307,7 @@ pub fn encode_metadata(parms: encode_parms, crate: &crate) -> ~[u8] {
13071307
// vec::from_slice(metadata_encoding_version) +
13081308
13091309
(do str::as_bytes(&~"rust\x00\x00\x00\x01") |bytes| {
1310-
vec::slice(*bytes, 0, 8).to_vec()
1310+
vec::slice(*bytes, 0, 8)
13111311
}) + flate::deflate_bytes(wr.bytes.check_out(|buf| buf))
13121312
}
13131313

0 commit comments

Comments
 (0)