Skip to content

Commit 8dac6a6

Browse files
committed
---
yaml --- r: 141022 b: refs/heads/try2 c: 20ef423 h: refs/heads/master v: v3
1 parent fd44ee3 commit 8dac6a6

File tree

12 files changed

+103
-55
lines changed

12 files changed

+103
-55
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: ccf6353fd56dc9cbeebe335332f0e5758117c658
8+
refs/heads/try2: 20ef4238bb63686d5af951acfba5468959be861d
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/src/compiletest/compiletest.rc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
#[allow(non_camel_case_types)];
1414

15-
extern mod std(vers = "0.7-pre");
15+
extern mod std;
1616

1717
use core::*;
1818

branches/try2/src/driver/driver.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,21 @@
99
// except according to those terms.
1010

1111
#[cfg(rustpkg)]
12-
extern mod this(name = "rustpkg", vers = "0.7-pre");
12+
extern mod this(name = "rustpkg");
1313

1414
#[cfg(fuzzer)]
15-
extern mod this(name = "fuzzer", vers = "0.7-pre");
15+
extern mod this(name = "fuzzer");
1616

1717
#[cfg(rustdoc)]
18-
extern mod this(name = "rustdoc", vers = "0.7-pre");
18+
extern mod this(name = "rustdoc");
1919

2020
#[cfg(rusti)]
21-
extern mod this(name = "rusti", vers = "0.7-pre");
21+
extern mod this(name = "rusti");
2222

2323
#[cfg(rust)]
24-
extern mod this(name = "rust", vers = "0.7-pre");
24+
extern mod this(name = "rust");
2525

2626
#[cfg(rustc)]
27-
extern mod this(name = "rustc", vers = "0.7-pre");
27+
extern mod this(name = "rustc");
2828

2929
fn main() { this::main() }

branches/try2/src/libcore/core.rc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ they contained the following prologue:
6363
#[deny(non_camel_case_types)];
6464

6565
// Make core testable by not duplicating lang items. See #2912
66-
#[cfg(test)] extern mod realcore(name = "core", vers = "0.7-pre");
66+
#[cfg(test)] extern mod realcore(name = "core");
6767
#[cfg(test)] pub use kinds = realcore::kinds;
6868
#[cfg(test)] pub use ops = realcore::ops;
6969
#[cfg(test)] pub use cmp = realcore::cmp;

branches/try2/src/libcore/iterator.rs

Lines changed: 76 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ pub trait IteratorUtil<A> {
4747
fn advance(&mut self, f: &fn(A) -> bool);
4848
#[cfg(not(stage0))]
4949
fn advance(&mut self, f: &fn(A) -> bool) -> bool;
50-
#[cfg(not(stage0))]
51-
fn to_vec(&mut self) -> ~[A];
52-
fn nth(&mut self, n: uint) -> Option<A>;
53-
fn last(&mut self) -> Option<A>;
50+
fn to_vec(self) -> ~[A];
51+
fn nth(&mut self, n: uint) -> A;
52+
fn first(&mut self) -> A;
53+
fn last(&mut self) -> A;
5454
fn fold<B>(&mut self, start: B, f: &fn(B, A) -> B) -> B;
5555
fn count(&mut self) -> uint;
5656
fn all(&mut self, f: &fn(&A) -> bool) -> bool;
@@ -147,30 +147,47 @@ impl<A, T: Iterator<A>> IteratorUtil<A> for T {
147147
}
148148
}
149149

150-
#[cfg(not(stage0))]
151150
#[inline(always)]
152-
fn to_vec(&mut self) -> ~[A] {
153-
iter::to_vec::<A>(|f| self.advance(f))
151+
fn to_vec(self) -> ~[A] {
152+
let mut v = ~[];
153+
let mut it = self;
154+
for it.advance() |x| { v.push(x); }
155+
return v;
154156
}
155157

156-
/// Return the `n`th item yielded by an iterator.
158+
/// Get `n`th element of an iterator.
157159
#[inline(always)]
158-
fn nth(&mut self, mut n: uint) -> Option<A> {
160+
fn nth(&mut self, n: uint) -> A {
161+
let mut i = n;
159162
loop {
160163
match self.next() {
161-
Some(x) => if n == 0 { return Some(x) },
162-
None => return None
164+
Some(x) => { if i == 0 { return x; }}
165+
None => { fail!("cannot get %uth element", n) }
163166
}
164-
n -= 1;
167+
i -= 1;
165168
}
166169
}
167170

168-
/// Return the last item yielded by an iterator.
171+
// Get first elemet of an iterator.
169172
#[inline(always)]
170-
fn last(&mut self) -> Option<A> {
171-
let mut last = None;
172-
for self.advance |x| { last = Some(x); }
173-
last
173+
fn first(&mut self) -> A {
174+
match self.next() {
175+
Some(x) => x ,
176+
None => fail!("cannot get first element")
177+
}
178+
}
179+
180+
// Get last element of an iterator.
181+
//
182+
// If the iterator have an infinite length, this method won't return.
183+
#[inline(always)]
184+
fn last(&mut self) -> A {
185+
let mut elm = match self.next() {
186+
Some(x) => x,
187+
None => fail!("cannot get last element")
188+
};
189+
for self.advance |e| { elm = e; }
190+
return elm;
174191
}
175192

176193
/// Reduce an iterator to an accumulated value
@@ -186,7 +203,7 @@ impl<A, T: Iterator<A>> IteratorUtil<A> for T {
186203
return accum;
187204
}
188205

189-
/// Count the number of items yielded by an iterator
206+
/// Count the number of an iterator elemenrs
190207
#[inline(always)]
191208
fn count(&mut self) -> uint { self.fold(0, |cnt, _x| cnt + 1) }
192209

@@ -327,13 +344,17 @@ pub struct FilterMapIterator<'self, A, B, T> {
327344
impl<'self, A, B, T: Iterator<A>> Iterator<B> for FilterMapIterator<'self, A, B, T> {
328345
#[inline]
329346
fn next(&mut self) -> Option<B> {
330-
for self.iter.advance |x| {
331-
match (self.f)(x) {
332-
Some(y) => return Some(y),
333-
None => ()
347+
loop {
348+
match self.iter.next() {
349+
None => { return None; }
350+
Some(a) => {
351+
match (self.f)(a) {
352+
Some(b) => { return Some(b); }
353+
None => { loop; }
354+
}
355+
}
334356
}
335357
}
336-
None
337358
}
338359
}
339360

@@ -558,7 +579,7 @@ mod tests {
558579

559580
#[test]
560581
fn test_filter_map() {
561-
let mut it = Counter::new(0u, 1u).take(10)
582+
let it = Counter::new(0u, 1u).take(10)
562583
.filter_map(|x: uint| if x.is_even() { Some(x*x) } else { None });
563584
assert_eq!(it.to_vec(), ~[0*0, 2*2, 4*4, 6*6, 8*8]);
564585
}
@@ -668,15 +689,43 @@ mod tests {
668689
fn test_iterator_nth() {
669690
let v = &[0, 1, 2, 3, 4];
670691
for uint::range(0, v.len()) |i| {
671-
assert_eq!(v.iter().nth(i).unwrap(), &v[i]);
692+
assert_eq!(v.iter().nth(i), &v[i]);
672693
}
673694
}
674695

696+
#[test]
697+
#[should_fail]
698+
fn test_iterator_nth_fail() {
699+
let v = &[0, 1, 2, 3, 4];
700+
v.iter().nth(5);
701+
}
702+
703+
#[test]
704+
fn test_iterator_first() {
705+
let v = &[0, 1, 2, 3, 4];
706+
assert_eq!(v.iter().first(), &0);
707+
assert_eq!(v.slice(2, 5).iter().first(), &2);
708+
}
709+
710+
#[test]
711+
#[should_fail]
712+
fn test_iterator_first_fail() {
713+
let v: &[uint] = &[];
714+
v.iter().first();
715+
}
716+
675717
#[test]
676718
fn test_iterator_last() {
677719
let v = &[0, 1, 2, 3, 4];
678-
assert_eq!(v.iter().last().unwrap(), &4);
679-
assert_eq!(v.slice(0, 1).iter().last().unwrap(), &0);
720+
assert_eq!(v.iter().last(), &4);
721+
assert_eq!(v.slice(0, 1).iter().last(), &0);
722+
}
723+
724+
#[test]
725+
#[should_fail]
726+
fn test_iterator_last_fail() {
727+
let v: &[uint] = &[];
728+
v.iter().last();
680729
}
681730

682731
#[test]

branches/try2/src/libfuzzer/fuzzer.rc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
#[allow(non_camel_case_types)];
2222

23-
extern mod std(vers = "0.7-pre");
24-
extern mod syntax(vers = "0.7-pre");
23+
extern mod std;
24+
extern mod syntax;
2525

2626
use core::run;
2727

branches/try2/src/librust/rust.rc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
#[license = "MIT/ASL2"];
2121
#[crate_type = "lib"];
2222

23-
extern mod rustpkg(vers = "0.7-pre");
24-
extern mod rustdoc(vers = "0.7-pre");
25-
extern mod rusti(vers = "0.7-pre");
26-
extern mod rustc(vers = "0.7-pre");
23+
extern mod rustpkg;
24+
extern mod rustdoc;
25+
extern mod rusti;
26+
extern mod rustc;
2727

2828
use core::run;
2929

branches/try2/src/librustc/rustc.rc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@
2121
#[allow(non_camel_case_types)];
2222
#[deny(deprecated_pattern)];
2323

24-
extern mod std(vers = "0.7-pre");
25-
extern mod syntax(vers = "0.7-pre");
26-
24+
extern mod std;
25+
extern mod syntax;
2726

2827
use driver::driver::{host_triple, optgroups, early_error};
2928
use driver::driver::{str_input, file_input, build_session_options};

branches/try2/src/librustdoc/rustdoc.rc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121

2222
#[allow(non_implicitly_copyable_typarams)];
2323

24-
extern mod std(vers = "0.7-pre");
25-
extern mod rustc(vers = "0.7-pre");
26-
extern mod syntax(vers = "0.7-pre");
24+
extern mod std;
25+
extern mod rustc;
26+
extern mod syntax;
2727

2828
use config::Config;
2929
use doc::Item;

branches/try2/src/librusti/rusti.rc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
#[license = "MIT/ASL2"];
1919
#[crate_type = "lib"];
2020

21-
extern mod std(vers = "0.7-pre");
22-
extern mod rustc(vers = "0.7-pre");
23-
extern mod syntax(vers = "0.7-pre");
21+
extern mod std;
22+
extern mod rustc;
23+
extern mod syntax;
2424

2525
use core::*;
2626
use core::cell::Cell;

branches/try2/src/librustpkg/rustpkg.rc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
#[license = "MIT/ASL2"];
1919
#[crate_type = "lib"];
2020

21-
extern mod std(vers = "0.7-pre");
22-
extern mod rustc(vers = "0.7-pre");
23-
extern mod syntax(vers = "0.7-pre");
21+
extern mod std;
22+
extern mod rustc;
23+
extern mod syntax;
2424

2525
use core::*;
2626
pub use core::path::Path;

branches/try2/src/libsyntax/syntax.rc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#[allow(non_camel_case_types)];
2424
#[deny(deprecated_pattern)];
2525

26-
extern mod std(vers = "0.7-pre");
26+
extern mod std;
2727

2828
// allow the interner_key macro
2929
// to escape this module:

0 commit comments

Comments
 (0)