Skip to content

Commit a590da9

Browse files
committed
---
yaml --- r: 92798 b: refs/heads/auto c: b6a7463 h: refs/heads/master v: v3
1 parent 587115e commit a590da9

File tree

8 files changed

+63
-130
lines changed

8 files changed

+63
-130
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0
1313
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1414
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1515
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
16-
refs/heads/auto: d2a4a107aea7f078ca0c6f0ef81dde5f02f8e0e1
16+
refs/heads/auto: b6a746352646965f71fa6c4fd9b37fd94918db8a
1717
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
1818
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1919
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336

branches/auto/src/etc/vim/syntax/rust.vim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ syn keyword rustTrait Default
7878
syn keyword rustTrait Hash
7979
syn keyword rustTrait FromStr
8080
syn keyword rustTrait FromIterator Extendable
81-
syn keyword rustTrait Iterator DoubleEndedIterator RandomAccessIterator CloneableIterator
81+
syn keyword rustTrait Iterator DoubleEndedIterator RandomAccessIterator ClonableIterator
8282
syn keyword rustTrait OrdIterator MutableDoubleEndedIterator ExactSize
8383
syn keyword rustTrait Times
8484

branches/auto/src/librustc/back/link.rs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -111,38 +111,14 @@ pub mod write {
111111
let llmod = trans.module;
112112
let llcx = trans.context;
113113
unsafe {
114-
llvm::LLVMInitializePasses();
115-
116-
// Only initialize the platforms supported by Rust here, because
117-
// using --llvm-root will have multiple platforms that rustllvm
118-
// doesn't actually link to and it's pointless to put target info
119-
// into the registry that Rust can not generate machine code for.
120-
llvm::LLVMInitializeX86TargetInfo();
121-
llvm::LLVMInitializeX86Target();
122-
llvm::LLVMInitializeX86TargetMC();
123-
llvm::LLVMInitializeX86AsmPrinter();
124-
llvm::LLVMInitializeX86AsmParser();
125-
126-
llvm::LLVMInitializeARMTargetInfo();
127-
llvm::LLVMInitializeARMTarget();
128-
llvm::LLVMInitializeARMTargetMC();
129-
llvm::LLVMInitializeARMAsmPrinter();
130-
llvm::LLVMInitializeARMAsmParser();
131-
132-
llvm::LLVMInitializeMipsTargetInfo();
133-
llvm::LLVMInitializeMipsTarget();
134-
llvm::LLVMInitializeMipsTargetMC();
135-
llvm::LLVMInitializeMipsAsmPrinter();
136-
llvm::LLVMInitializeMipsAsmParser();
114+
configure_llvm(sess);
137115

138116
if sess.opts.save_temps {
139117
output.with_extension("no-opt.bc").with_c_str(|buf| {
140118
llvm::LLVMWriteBitcodeToFile(llmod, buf);
141119
})
142120
}
143121

144-
configure_llvm(sess);
145-
146122
let OptLevel = match sess.opts.optimize {
147123
session::No => lib::llvm::CodeGenLevelNone,
148124
session::Less => lib::llvm::CodeGenLevelLess,
@@ -367,6 +343,30 @@ pub mod write {
367343

368344
LOCK.lock();
369345
if !CONFIGURED {
346+
llvm::LLVMInitializePasses();
347+
348+
// Only initialize the platforms supported by Rust here, because
349+
// using --llvm-root will have multiple platforms that rustllvm
350+
// doesn't actually link to and it's pointless to put target info
351+
// into the registry that Rust can not generate machine code for.
352+
llvm::LLVMInitializeX86TargetInfo();
353+
llvm::LLVMInitializeX86Target();
354+
llvm::LLVMInitializeX86TargetMC();
355+
llvm::LLVMInitializeX86AsmPrinter();
356+
llvm::LLVMInitializeX86AsmParser();
357+
358+
llvm::LLVMInitializeARMTargetInfo();
359+
llvm::LLVMInitializeARMTarget();
360+
llvm::LLVMInitializeARMTargetMC();
361+
llvm::LLVMInitializeARMAsmPrinter();
362+
llvm::LLVMInitializeARMAsmParser();
363+
364+
llvm::LLVMInitializeMipsTargetInfo();
365+
llvm::LLVMInitializeMipsTarget();
366+
llvm::LLVMInitializeMipsTargetMC();
367+
llvm::LLVMInitializeMipsAsmPrinter();
368+
llvm::LLVMInitializeMipsAsmParser();
369+
370370
llvm::LLVMRustSetLLVMOptions(llvm_args.len() as c_int,
371371
llvm_args.as_ptr());
372372
CONFIGURED = true;

branches/auto/src/libstd/io/comm_adapters.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ mod test {
117117
use prelude::*;
118118
use super::*;
119119
use io;
120+
use comm;
120121
use task;
121122

122123
#[test]
@@ -135,7 +136,7 @@ mod test {
135136

136137
assert_eq!(false, reader.eof());
137138

138-
assert_eq!(Some(0), reader.read([]));
139+
assert_eq!(Some(0), reader.read(~[]));
139140
assert_eq!(false, reader.eof());
140141

141142
assert_eq!(Some(3), reader.read(buf));

branches/auto/src/libstd/iter.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -906,14 +906,14 @@ impl<A: Ord, T: Iterator<A>> OrdIterator<A> for T {
906906
}
907907
}
908908

909-
/// A trait for iterators that are cloneable.
910-
pub trait CloneableIterator {
909+
/// A trait for iterators that are clonable.
910+
pub trait ClonableIterator {
911911
/// Repeats an iterator endlessly
912912
///
913913
/// # Example
914914
///
915915
/// ```rust
916-
/// use std::iter::{CloneableIterator, count};
916+
/// use std::iter::{ClonableIterator, count};
917917
///
918918
/// let a = count(1,1).take(1);
919919
/// let mut cy = a.cycle();
@@ -923,7 +923,7 @@ pub trait CloneableIterator {
923923
fn cycle(self) -> Cycle<Self>;
924924
}
925925

926-
impl<A, T: Clone + Iterator<A>> CloneableIterator for T {
926+
impl<A, T: Clone + Iterator<A>> ClonableIterator for T {
927927
#[inline]
928928
fn cycle(self) -> Cycle<T> {
929929
Cycle{orig: self.clone(), iter: self}

branches/auto/src/libstd/option.rs

Lines changed: 1 addition & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ use clone::DeepClone;
4343
use cmp::{Eq, TotalEq, TotalOrd};
4444
use default::Default;
4545
use fmt;
46-
use iter::{Iterator, DoubleEndedIterator, FromIterator, ExactSize};
46+
use iter::{Iterator, DoubleEndedIterator, ExactSize};
4747
use kinds::Send;
4848
use str::OwnedStr;
4949
use to_str::ToStr;
@@ -410,46 +410,6 @@ impl<A> DoubleEndedIterator<A> for OptionIterator<A> {
410410

411411
impl<A> ExactSize<A> for OptionIterator<A> {}
412412

413-
/////////////////////////////////////////////////////////////////////////////
414-
// Free functions
415-
/////////////////////////////////////////////////////////////////////////////
416-
417-
/// Takes each element in the `Iterator`: if it is `None`, no further
418-
/// elements are taken, and the `None` is returned. Should no `None` occur, a
419-
/// vector containing the values of each `Option` is returned.
420-
///
421-
/// Here is an example which increments every integer in a vector,
422-
/// checking for overflow:
423-
///
424-
/// fn inc_conditionally(x: uint) -> Option<uint> {
425-
/// if x == uint::max_value { return None; }
426-
/// else { return Some(x+1u); }
427-
/// }
428-
/// let v = [1u, 2, 3];
429-
/// let res = collect(v.iter().map(|&x| inc_conditionally(x)));
430-
/// assert!(res == Some(~[2u, 3, 4]));
431-
#[inline]
432-
pub fn collect<T, Iter: Iterator<Option<T>>, V: FromIterator<T>>(iter: Iter) -> Option<V> {
433-
// FIXME(#11084): This should be twice as fast once this bug is closed.
434-
let mut iter = iter.scan(false, |state, x| {
435-
match x {
436-
Some(x) => Some(x),
437-
None => {
438-
*state = true;
439-
None
440-
}
441-
}
442-
});
443-
444-
let v: V = FromIterator::from_iterator(&mut iter);
445-
446-
if iter.state {
447-
None
448-
} else {
449-
Some(v)
450-
}
451-
}
452-
453413
/////////////////////////////////////////////////////////////////////////////
454414
// Tests
455415
/////////////////////////////////////////////////////////////////////////////
@@ -458,10 +418,8 @@ pub fn collect<T, Iter: Iterator<Option<T>>, V: FromIterator<T>>(iter: Iter) ->
458418
mod tests {
459419
use super::*;
460420

461-
use iter::range;
462421
use str::StrSlice;
463422
use util;
464-
use vec::ImmutableVector;
465423

466424
#[test]
467425
fn test_get_ptr() {
@@ -703,26 +661,4 @@ mod tests {
703661
assert!(!x.mutate_default(0i, |i| i+1));
704662
assert_eq!(x, Some(0i));
705663
}
706-
707-
#[test]
708-
fn test_collect() {
709-
let v: Option<~[int]> = collect(range(0, 0)
710-
.map(|_| Some(0)));
711-
assert_eq!(v, Some(~[]));
712-
713-
let v: Option<~[int]> = collect(range(0, 3)
714-
.map(|x| Some(x)));
715-
assert_eq!(v, Some(~[0, 1, 2]));
716-
717-
let v: Option<~[int]> = collect(range(0, 3)
718-
.map(|x| if x > 1 { None } else { Some(x) }));
719-
assert_eq!(v, None);
720-
721-
// test that it does not take more elements than it needs
722-
let functions = [|| Some(()), || None, || fail!()];
723-
724-
let v: Option<~[()]> = collect(functions.iter().map(|f| (*f)()));
725-
726-
assert_eq!(v, None);
727-
}
728664
}

branches/auto/src/libstd/prelude.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ pub use default::Default;
5555
pub use from_str::FromStr;
5656
pub use hash::Hash;
5757
pub use iter::{FromIterator, Extendable};
58-
pub use iter::{Iterator, DoubleEndedIterator, RandomAccessIterator, CloneableIterator};
58+
pub use iter::{Iterator, DoubleEndedIterator, RandomAccessIterator, ClonableIterator};
5959
pub use iter::{OrdIterator, MutableDoubleEndedIterator, ExactSize};
6060
pub use num::Times;
6161
pub use num::{Algebraic, Trigonometric, Exponential, Hyperbolic};

branches/auto/src/libstd/result.rs

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@
1313
use clone::Clone;
1414
use cmp::Eq;
1515
use fmt;
16-
use iter::{Iterator, FromIterator};
16+
use iter::Iterator;
1717
use option::{None, Option, Some};
1818
use str::OwnedStr;
1919
use to_str::ToStr;
20+
use vec::OwnedVector;
21+
use vec;
2022

2123
/// `Result` is a type that represents either success (`Ok`) or failure (`Err`).
2224
#[deriving(Clone, DeepClone, Eq, Ord, TotalEq, TotalOrd, ToStr)]
@@ -219,9 +221,10 @@ impl<T: fmt::Default, E: fmt::Default> fmt::Default for Result<T, E> {
219221
// Free functions
220222
/////////////////////////////////////////////////////////////////////////////
221223

222-
/// Takes each element in the `Iterator`: if it is an `Err`, no further
223-
/// elements are taken, and the `Err` is returned. Should no `Err` occur, a
224-
/// vector containing the values of each `Result` is returned.
224+
/// Takes each element in the iterator: if it is an error, no further
225+
/// elements are taken, and the error is returned.
226+
/// Should no error occur, a vector containing the values of each Result
227+
/// is returned.
225228
///
226229
/// Here is an example which increments every integer in a vector,
227230
/// checking for overflow:
@@ -234,24 +237,17 @@ impl<T: fmt::Default, E: fmt::Default> fmt::Default for Result<T, E> {
234237
/// let res = collect(v.iter().map(|&x| inc_conditionally(x)));
235238
/// assert!(res == Ok(~[2u, 3, 4]));
236239
#[inline]
237-
pub fn collect<T, E, Iter: Iterator<Result<T, E>>, V: FromIterator<T>>(iter: Iter) -> Result<V, E> {
238-
// FIXME(#11084): This should be twice as fast once this bug is closed.
239-
let mut iter = iter.scan(None, |state, x| {
240-
match x {
241-
Ok(x) => Some(x),
242-
Err(err) => {
243-
*state = Some(err);
244-
None
245-
}
240+
pub fn collect<T, E, Iter: Iterator<Result<T, E>>>(mut iterator: Iter)
241+
-> Result<~[T], E> {
242+
let (lower, _) = iterator.size_hint();
243+
let mut vs: ~[T] = vec::with_capacity(lower);
244+
for t in iterator {
245+
match t {
246+
Ok(v) => vs.push(v),
247+
Err(u) => return Err(u)
246248
}
247-
});
248-
249-
let v: V = FromIterator::from_iterator(&mut iter);
250-
251-
match iter.state {
252-
Some(err) => Err(err),
253-
None => Ok(v),
254249
}
250+
Ok(vs)
255251
}
256252

257253
/// Perform a fold operation over the result values from an iterator.
@@ -295,8 +291,8 @@ mod tests {
295291
use super::*;
296292

297293
use iter::range;
298-
use to_str::ToStr;
299294
use vec::ImmutableVector;
295+
use to_str::ToStr;
300296

301297
pub fn op1() -> Result<int, ~str> { Ok(666) }
302298
pub fn op2() -> Result<int, ~str> { Err(~"sadface") }
@@ -351,21 +347,21 @@ mod tests {
351347
352348
#[test]
353349
fn test_collect() {
354-
let v: Result<~[int], ()> = collect(range(0, 0).map(|_| Ok::<int, ()>(0)));
355-
assert_eq!(v, Ok(~[]));
356-
357-
let v: Result<~[int], ()> = collect(range(0, 3).map(|x| Ok::<int, ()>(x)));
358-
assert_eq!(v, Ok(~[0, 1, 2]));
359-
360-
let v: Result<~[int], int> = collect(range(0, 3)
361-
.map(|x| if x > 1 { Err(x) } else { Ok(x) }));
362-
assert_eq!(v, Err(2));
350+
assert_eq!(collect(range(0, 0)
351+
.map(|_| Ok::<int, ()>(0))),
352+
Ok(~[]));
353+
assert_eq!(collect(range(0, 3)
354+
.map(|x| Ok::<int, ()>(x))),
355+
Ok(~[0, 1, 2]));
356+
assert_eq!(collect(range(0, 3)
357+
.map(|x| if x > 1 { Err(x) } else { Ok(x) })),
358+
Err(2));
363359
364360
// test that it does not take more elements than it needs
365361
let functions = [|| Ok(()), || Err(1), || fail!()];
366362
367-
let v: Result<~[()], int> = collect(functions.iter().map(|f| (*f)()));
368-
assert_eq!(v, Err(1));
363+
assert_eq!(collect(functions.iter().map(|f| (*f)())),
364+
Err(1));
369365
}
370366
371367
#[test]

0 commit comments

Comments
 (0)