Skip to content

Commit 18a1178

Browse files
committed
auto merge of #20562 : nick29581/rust/arrays-3, r=huonw
Use index with ranges, rather than a dedicated trait and compiler support. This is not quite ready to land - it needs a rebase and a fair bit of work to pass make tidy. But I want to get it reviewed so I can try to land it quickly once it is rebased. This is how I expect things to look, in general.
2 parents ea6f65c + 0c7f7a5 commit 18a1178

File tree

243 files changed

+2748
-2917
lines changed

Some content is hidden

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

243 files changed

+2748
-2917
lines changed

src/compiletest/runtest.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -539,18 +539,17 @@ fn run_debuginfo_gdb_test(config: &Config, props: &TestProps, testfile: &Path) {
539539
script_str.push_str("set print pretty off\n");
540540

541541
// Add the pretty printer directory to GDB's source-file search path
542-
script_str.push_str(format!("directory {}\n", rust_pp_module_abs_path)[]);
542+
script_str.push_str(&format!("directory {}\n", rust_pp_module_abs_path)[]);
543543

544544
// Load the target executable
545-
script_str.push_str(format!("file {}\n",
546-
exe_file.as_str().unwrap().replace("\\", "\\\\"))
547-
.as_slice());
545+
script_str.push_str(&format!("file {}\n",
546+
exe_file.as_str().unwrap().replace("\\", "\\\\"))[]);
548547

549548
// Add line breakpoints
550549
for line in breakpoint_lines.iter() {
551-
script_str.push_str(format!("break '{}':{}\n",
552-
testfile.filename_display(),
553-
*line)[]);
550+
script_str.push_str(&format!("break '{}':{}\n",
551+
testfile.filename_display(),
552+
*line)[]);
554553
}
555554

556555
script_str.push_str(cmds.as_slice());
@@ -676,7 +675,7 @@ fn run_debuginfo_lldb_test(config: &Config, props: &TestProps, testfile: &Path)
676675
.unwrap()
677676
.to_string();
678677

679-
script_str.push_str(format!("command script import {}\n", rust_pp_module_abs_path[])[]);
678+
script_str.push_str(&format!("command script import {}\n", &rust_pp_module_abs_path[])[]);
680679
script_str.push_str("type summary add --no-value ");
681680
script_str.push_str("--python-function lldb_rust_formatters.print_val ");
682681
script_str.push_str("-x \".*\" --category Rust\n");
@@ -910,7 +909,7 @@ fn check_error_patterns(props: &TestProps,
910909
if done { return; }
911910

912911
let missing_patterns =
913-
props.error_patterns[next_err_idx..];
912+
props.error_patterns.index(&(next_err_idx..));
914913
if missing_patterns.len() == 1u {
915914
fatal_proc_rec(format!("error pattern '{}' not found!",
916915
missing_patterns[0]).as_slice(),

src/libcollections/bit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ impl Bitv {
330330

331331
if extra_bytes > 0 {
332332
let mut last_word = 0u32;
333-
for (i, &byte) in bytes[complete_words*4..].iter().enumerate() {
333+
for (i, &byte) in bytes.index(&((complete_words*4)..)).iter().enumerate() {
334334
last_word |= (reverse_bits(byte) as u32) << (i * 8);
335335
}
336336
bitv.storage.push(last_word);

src/libcollections/ring_buf.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ impl<T> RingBuf<T> {
525525
/// *num = *num - 2;
526526
/// }
527527
/// let b: &[_] = &[&mut 3, &mut 1, &mut 2];
528-
/// assert_eq!(buf.iter_mut().collect::<Vec<&mut int>>()[], b);
528+
/// assert_eq!(&buf.iter_mut().collect::<Vec<&mut int>>()[], b);
529529
/// ```
530530
#[stable]
531531
pub fn iter_mut<'a>(&'a mut self) -> IterMut<'a, T> {
@@ -556,7 +556,7 @@ impl<T> RingBuf<T> {
556556
let buf = self.buffer_as_slice();
557557
if contiguous {
558558
let (empty, buf) = buf.split_at(0);
559-
(buf[self.tail..self.head], empty)
559+
(buf.index(&(self.tail..self.head)), empty)
560560
} else {
561561
let (mid, right) = buf.split_at(self.tail);
562562
let (left, _) = mid.split_at(self.head);

src/libcollections/slice.rs

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
//! #![feature(slicing_syntax)]
5656
//! fn main() {
5757
//! let numbers = [0i, 1i, 2i];
58-
//! let last_numbers = numbers[1..3];
58+
//! let last_numbers = numbers.index(&(1..3));
5959
//! // last_numbers is now &[1i, 2i]
6060
//! }
6161
//! ```
@@ -98,7 +98,7 @@ use core::iter::{range, range_step, MultiplicativeIterator};
9898
use core::kinds::Sized;
9999
use core::mem::size_of;
100100
use core::mem;
101-
use core::ops::{FnMut, SliceMut};
101+
use core::ops::{FnMut, FullRange, Index, IndexMut};
102102
use core::option::Option::{self, Some, None};
103103
use core::ptr::PtrExt;
104104
use core::ptr;
@@ -1065,12 +1065,12 @@ impl ElementSwaps {
10651065

10661066
#[unstable = "trait is unstable"]
10671067
impl<T> BorrowFrom<Vec<T>> for [T] {
1068-
fn borrow_from(owned: &Vec<T>) -> &[T] { owned[] }
1068+
fn borrow_from(owned: &Vec<T>) -> &[T] { owned.index(&FullRange) }
10691069
}
10701070

10711071
#[unstable = "trait is unstable"]
10721072
impl<T> BorrowFromMut<Vec<T>> for [T] {
1073-
fn borrow_from_mut(owned: &mut Vec<T>) -> &mut [T] { owned.as_mut_slice_() }
1073+
fn borrow_from_mut(owned: &mut Vec<T>) -> &mut [T] { owned.index_mut(&FullRange) }
10741074
}
10751075

10761076
#[unstable = "trait is unstable"]
@@ -1393,15 +1393,20 @@ fn merge_sort<T, F>(v: &mut [T], mut compare: F) where F: FnMut(&T, &T) -> Order
13931393

13941394
#[cfg(test)]
13951395
mod tests {
1396-
use prelude::{Some, None, range, Vec, ToString, Clone, Greater, Less, Equal};
1397-
use prelude::{SliceExt, Iterator, IteratorExt};
1398-
use prelude::AsSlice;
1399-
use prelude::{RandomAccessIterator, Ord, SliceConcatExt};
1396+
use core::cmp::Ordering::{Greater, Less, Equal};
1397+
use core::prelude::{Some, None, range, Clone};
1398+
use core::prelude::{Iterator, IteratorExt};
1399+
use core::prelude::{AsSlice};
1400+
use core::prelude::{Ord, FullRange};
14001401
use core::default::Default;
14011402
use core::mem;
1403+
use core::ops::Index;
1404+
use std::iter::RandomAccessIterator;
14021405
use std::rand::{Rng, thread_rng};
14031406
use std::rc::Rc;
1404-
use super::ElementSwaps;
1407+
use string::ToString;
1408+
use vec::Vec;
1409+
use super::{ElementSwaps, SliceConcatExt, SliceExt};
14051410

14061411
fn square(n: uint) -> uint { n * n }
14071412

@@ -1606,15 +1611,15 @@ mod tests {
16061611

16071612
// Test on stack.
16081613
let vec_stack: &[_] = &[1i, 2, 3];
1609-
let v_b = vec_stack[1u..3u].to_vec();
1614+
let v_b = vec_stack.index(&(1u..3u)).to_vec();
16101615
assert_eq!(v_b.len(), 2u);
16111616
let v_b = v_b.as_slice();
16121617
assert_eq!(v_b[0], 2);
16131618
assert_eq!(v_b[1], 3);
16141619

16151620
// Test `Box<[T]>`
16161621
let vec_unique = vec![1i, 2, 3, 4, 5, 6];
1617-
let v_d = vec_unique[1u..6u].to_vec();
1622+
let v_d = vec_unique.index(&(1u..6u)).to_vec();
16181623
assert_eq!(v_d.len(), 5u);
16191624
let v_d = v_d.as_slice();
16201625
assert_eq!(v_d[0], 2);
@@ -1627,21 +1632,21 @@ mod tests {
16271632
#[test]
16281633
fn test_slice_from() {
16291634
let vec: &[int] = &[1, 2, 3, 4];
1630-
assert_eq!(vec[0..], vec);
1635+
assert_eq!(vec.index(&(0..)), vec);
16311636
let b: &[int] = &[3, 4];
1632-
assert_eq!(vec[2..], b);
1637+
assert_eq!(vec.index(&(2..)), b);
16331638
let b: &[int] = &[];
1634-
assert_eq!(vec[4..], b);
1639+
assert_eq!(vec.index(&(4..)), b);
16351640
}
16361641

16371642
#[test]
16381643
fn test_slice_to() {
16391644
let vec: &[int] = &[1, 2, 3, 4];
1640-
assert_eq!(vec[..4], vec);
1645+
assert_eq!(vec.index(&(0..4)), vec);
16411646
let b: &[int] = &[1, 2];
1642-
assert_eq!(vec[..2], b);
1647+
assert_eq!(vec.index(&(0..2)), b);
16431648
let b: &[int] = &[];
1644-
assert_eq!(vec[..0], b);
1649+
assert_eq!(vec.index(&(0..0)), b);
16451650
}
16461651

16471652

@@ -2567,7 +2572,7 @@ mod tests {
25672572
}
25682573
assert_eq!(cnt, 3);
25692574

2570-
for f in v[1..3].iter() {
2575+
for f in v.index(&(1..3)).iter() {
25712576
assert!(*f == Foo);
25722577
cnt += 1;
25732578
}

0 commit comments

Comments
 (0)