Skip to content

Commit 1a9f196

Browse files
committed
---
yaml --- r: 162615 b: refs/heads/try c: 930f877 h: refs/heads/master i: 162613: 76f8e53 162611: cb2543f 162607: 4ec4632 v: v3
1 parent 41cd3d8 commit 1a9f196

File tree

147 files changed

+5218
-1842
lines changed

Some content is hidden

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

147 files changed

+5218
-1842
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: 9146a919b616e39e528e4d7100d16eef52f1f852
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: cafe2966770ff377aad6dd9fd808e68055587c58
5-
refs/heads/try: 6a5fc50782905cede94ae9bdaa04e3b07347c4be
5+
refs/heads/try: 930f87774db33f8a8963b22e82e1b1d1907ea30a
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
88
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596

branches/try/mk/crates.mk

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
################################################################################
5151

5252
TARGET_CRATES := libc std flate arena term \
53-
serialize sync getopts collections test time rand \
53+
serialize getopts collections test time rand \
5454
log regex graphviz core rbml alloc rustrt \
5555
unicode
5656
HOST_CRATES := syntax rustc rustc_trans rustdoc regex_macros fmt_macros \
@@ -63,7 +63,7 @@ DEPS_libc := core
6363
DEPS_unicode := core
6464
DEPS_alloc := core libc native:jemalloc
6565
DEPS_rustrt := alloc core libc collections native:rustrt_native
66-
DEPS_std := core libc rand alloc collections rustrt sync unicode \
66+
DEPS_std := core libc rand alloc collections rustrt unicode \
6767
native:rust_builtin native:backtrace
6868
DEPS_graphviz := std
6969
DEPS_syntax := std term serialize log fmt_macros arena libc
@@ -81,7 +81,6 @@ DEPS_glob := std
8181
DEPS_serialize := std log
8282
DEPS_rbml := std log serialize
8383
DEPS_term := std log
84-
DEPS_sync := core alloc rustrt collections
8584
DEPS_getopts := std
8685
DEPS_collections := core alloc unicode
8786
DEPS_num := std

branches/try/src/compiletest/errors.rs

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
10+
use self::WhichLine::*;
1011

1112
use std::ascii::AsciiExt;
1213
use std::io::{BufferedReader, File};
@@ -18,28 +19,74 @@ pub struct ExpectedError {
1819
pub msg: String,
1920
}
2021

21-
pub static EXPECTED_PATTERN : &'static str = r"//~(?P<adjusts>\^*)\s*(?P<kind>\S*)\s*(?P<msg>.*)";
22+
/// Looks for either "//~| KIND MESSAGE" or "//~^^... KIND MESSAGE"
23+
/// The former is a "follow" that inherits its target from the preceding line;
24+
/// the latter is an "adjusts" that goes that many lines up.
25+
///
26+
/// Goal is to enable tests both like: //~^^^ ERROR go up three
27+
/// and also //~^ ERROR message one for the preceding line, and
28+
/// //~| ERROR message two for that same line.
29+
30+
pub static EXPECTED_PATTERN : &'static str =
31+
r"//~(?P<follow>\|)?(?P<adjusts>\^*)\s*(?P<kind>\S*)\s*(?P<msg>.*)";
32+
33+
#[deriving(PartialEq, Show)]
34+
enum WhichLine { ThisLine, FollowPrevious(uint), AdjustBackward(uint) }
2235

2336
// Load any test directives embedded in the file
2437
pub fn load_errors(re: &Regex, testfile: &Path) -> Vec<ExpectedError> {
2538
let mut rdr = BufferedReader::new(File::open(testfile).unwrap());
2639

40+
// `last_nonfollow_error` tracks the most recently seen
41+
// line with an error template that did not use the
42+
// follow-syntax, "//~| ...".
43+
//
44+
// (pnkfelix could not find an easy way to compose Iterator::scan
45+
// and Iterator::filter_map to pass along this information into
46+
// `parse_expected`. So instead I am storing that state here and
47+
// updating it in the map callback below.)
48+
let mut last_nonfollow_error = None;
49+
2750
rdr.lines().enumerate().filter_map(|(line_no, ln)| {
28-
parse_expected(line_no + 1, ln.unwrap().as_slice(), re)
51+
parse_expected(last_nonfollow_error,
52+
line_no + 1,
53+
ln.unwrap().as_slice(), re)
54+
.map(|(which, error)| {
55+
match which {
56+
FollowPrevious(_) => {}
57+
_ => last_nonfollow_error = Some(error.line),
58+
}
59+
error
60+
})
2961
}).collect()
3062
}
3163

32-
fn parse_expected(line_num: uint, line: &str, re: &Regex) -> Option<ExpectedError> {
64+
fn parse_expected(last_nonfollow_error: Option<uint>,
65+
line_num: uint,
66+
line: &str,
67+
re: &Regex) -> Option<(WhichLine, ExpectedError)> {
3368
re.captures(line).and_then(|caps| {
3469
let adjusts = caps.name("adjusts").len();
3570
let kind = caps.name("kind").to_ascii_lower();
3671
let msg = caps.name("msg").trim().to_string();
72+
let follow = caps.name("follow").len() > 0;
73+
74+
let (which, line) = if follow {
75+
assert!(adjusts == 0, "use either //~| or //~^, not both.");
76+
let line = last_nonfollow_error.unwrap_or_else(|| {
77+
panic!("encountered //~| without preceding //~^ line.")
78+
});
79+
(FollowPrevious(line), line)
80+
} else {
81+
let which =
82+
if adjusts > 0 { AdjustBackward(adjusts) } else { ThisLine };
83+
let line = line_num - adjusts;
84+
(which, line)
85+
};
3786

38-
debug!("line={} kind={} msg={}", line_num, kind, msg);
39-
Some(ExpectedError {
40-
line: line_num - adjusts,
41-
kind: kind,
42-
msg: msg,
43-
})
87+
debug!("line={} which={} kind={} msg={}", line_num, which, kind, msg);
88+
Some((which, ExpectedError { line: line,
89+
kind: kind,
90+
msg: msg, }))
4491
})
4592
}

branches/try/src/doc/reference.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1689,7 +1689,20 @@ methods in such an implementation can only be used as direct calls on the
16891689
values of the type that the implementation targets. In such an implementation,
16901690
the trait type and `for` after `impl` are omitted. Such implementations are
16911691
limited to nominal types (enums, structs), and the implementation must appear
1692-
in the same module or a sub-module as the `self` type.
1692+
in the same module or a sub-module as the `self` type:
1693+
1694+
```
1695+
struct Point {x: int, y: int}
1696+
1697+
impl Point {
1698+
fn log(&self) {
1699+
println!("Point is at ({}, {})", self.x, self.y);
1700+
}
1701+
}
1702+
1703+
let my_point = Point {x: 10, y:11};
1704+
my_point.log();
1705+
```
16931706

16941707
When a trait _is_ specified in an `impl`, all methods declared as part of the
16951708
trait must be implemented, with matching types and type parameter counts.

branches/try/src/etc/emacs/rust-mode.el

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@
3131
(modify-syntax-entry ?\" "\"" table)
3232
(modify-syntax-entry ?\\ "\\" table)
3333

34-
;; _ is a word-char
35-
(modify-syntax-entry ?_ "w" table)
36-
3734
;; Comments
3835
(modify-syntax-entry ?/ ". 124b" table)
3936
(modify-syntax-entry ?* ". 23" table)
@@ -397,7 +394,7 @@ This is written mainly to be used as `beginning-of-defun-function' for Rust.
397394
Don't move to the beginning of the line. `beginning-of-defun',
398395
which calls this, does that afterwards."
399396
(interactive "p")
400-
(re-search-backward (concat "^\\(" rust-top-item-beg-re "\\)\\b")
397+
(re-search-backward (concat "^\\(" rust-top-item-beg-re "\\)\\_>")
401398
nil 'move (or arg 1)))
402399

403400
(defun rust-end-of-defun ()

branches/try/src/etc/licenseck.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,9 @@
3838
"rt/isaac/randport.cpp", # public domain
3939
"rt/isaac/rand.h", # public domain
4040
"rt/isaac/standard.h", # public domain
41-
"libsync/mpsc_queue.rs", # BSD
42-
"libsync/spsc_queue.rs", # BSD
43-
"libsync/mpmc_bounded_queue.rs", # BSD
44-
"libsync/mpsc_intrusive.rs", # BSD
41+
"libstd/sync/mpsc_queue.rs", # BSD
42+
"libstd/sync/spsc_queue.rs", # BSD
43+
"libstd/sync/mpmc_bounded_queue.rs", # BSD
4544
"test/bench/shootout-binarytrees.rs", # BSD
4645
"test/bench/shootout-chameneos-redux.rs", # BSD
4746
"test/bench/shootout-fannkuch-redux.rs", # BSD

branches/try/src/libcollections/binary_heap.rs

Lines changed: 79 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,7 @@ use core::mem::{zeroed, replace, swap};
160160
use core::ptr;
161161

162162
use slice;
163-
use vec::Vec;
164-
165-
// FIXME(conventions): implement into_iter
163+
use vec::{mod, Vec};
166164

167165
/// A priority queue implemented with a binary heap.
168166
///
@@ -243,6 +241,27 @@ impl<T: Ord> BinaryHeap<T> {
243241
Items { iter: self.data.iter() }
244242
}
245243

244+
/// Creates a consuming iterator, that is, one that moves each value out of
245+
/// the binary heap in arbitrary order. The binary heap cannot be used
246+
/// after calling this.
247+
///
248+
/// # Example
249+
///
250+
/// ```
251+
/// use std::collections::BinaryHeap;
252+
/// let pq = BinaryHeap::from_vec(vec![1i, 2, 3, 4]);
253+
///
254+
/// // Print 1, 2, 3, 4 in arbitrary order
255+
/// for x in pq.into_iter() {
256+
/// // x has type int, not &int
257+
/// println!("{}", x);
258+
/// }
259+
/// ```
260+
#[unstable = "matches collection reform specification, waiting for dust to settle"]
261+
pub fn into_iter(self) -> MoveItems<T> {
262+
MoveItems { iter: self.data.into_iter() }
263+
}
264+
246265
/// Returns the greatest item in a queue, or `None` if it is empty.
247266
///
248267
/// # Example
@@ -548,6 +567,26 @@ impl<'a, T> Iterator<&'a T> for Items<'a, T> {
548567
fn size_hint(&self) -> (uint, Option<uint>) { self.iter.size_hint() }
549568
}
550569

570+
/// An iterator that moves out of a `BinaryHeap`.
571+
pub struct MoveItems<T> {
572+
iter: vec::MoveItems<T>,
573+
}
574+
575+
impl<T> Iterator<T> for MoveItems<T> {
576+
#[inline]
577+
fn next(&mut self) -> Option<T> { self.iter.next() }
578+
579+
#[inline]
580+
fn size_hint(&self) -> (uint, Option<uint>) { self.iter.size_hint() }
581+
}
582+
583+
impl<T> DoubleEndedIterator<T> for MoveItems<T> {
584+
#[inline]
585+
fn next_back(&mut self) -> Option<T> { self.iter.next_back() }
586+
}
587+
588+
impl<T> ExactSize<T> for MoveItems<T> {}
589+
551590
impl<T: Ord> FromIterator<T> for BinaryHeap<T> {
552591
fn from_iter<Iter: Iterator<T>>(mut iter: Iter) -> BinaryHeap<T> {
553592
let vec: Vec<T> = iter.collect();
@@ -586,6 +625,43 @@ mod tests {
586625
}
587626
}
588627

628+
#[test]
629+
fn test_move_iter() {
630+
let data = vec!(5i, 9, 3);
631+
let iterout = vec!(9i, 5, 3);
632+
let pq = BinaryHeap::from_vec(data);
633+
634+
let v: Vec<int> = pq.into_iter().collect();
635+
assert_eq!(v, iterout);
636+
}
637+
638+
#[test]
639+
fn test_move_iter_size_hint() {
640+
let data = vec!(5i, 9);
641+
let pq = BinaryHeap::from_vec(data);
642+
643+
let mut it = pq.into_iter();
644+
645+
assert_eq!(it.size_hint(), (2, Some(2)));
646+
assert_eq!(it.next(), Some(9i));
647+
648+
assert_eq!(it.size_hint(), (1, Some(1)));
649+
assert_eq!(it.next(), Some(5i));
650+
651+
assert_eq!(it.size_hint(), (0, Some(0)));
652+
assert_eq!(it.next(), None);
653+
}
654+
655+
#[test]
656+
fn test_move_iter_reverse() {
657+
let data = vec!(5i, 9, 3);
658+
let iterout = vec!(3i, 5, 9);
659+
let pq = BinaryHeap::from_vec(data);
660+
661+
let v: Vec<int> = pq.into_iter().rev().collect();
662+
assert_eq!(v, iterout);
663+
}
664+
589665
#[test]
590666
fn test_top_and_pop() {
591667
let data = vec!(2u, 4, 6, 2, 1, 8, 10, 3, 5, 7, 0, 9, 1);

branches/try/src/libcollections/hash/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ use core::prelude::*;
6767

6868
use alloc::boxed::Box;
6969
use alloc::rc::Rc;
70+
use core::borrow::{Cow, ToOwned};
7071
use core::intrinsics::TypeId;
7172
use core::mem;
7273
use core::num::Int;
@@ -284,6 +285,13 @@ impl<S: Writer, T: Hash<S>, U: Hash<S>> Hash<S> for Result<T, U> {
284285
}
285286
}
286287

288+
impl<'a, T, Sized? B, S> Hash<S> for Cow<'a, T, B> where B: Hash<S> + ToOwned<T> {
289+
#[inline]
290+
fn hash(&self, state: &mut S) {
291+
Hash::hash(&**self, state)
292+
}
293+
}
294+
287295
//////////////////////////////////////////////////////////////////////////////
288296

289297
#[cfg(test)]

0 commit comments

Comments
 (0)