Skip to content

Commit 96786d2

Browse files
committed
---
yaml --- r: 228335 b: refs/heads/try c: 6800538 h: refs/heads/master i: 228333: 54217c4 228331: 843c5f1 228327: ba57893 228319: 40a1811 v: v3
1 parent 38a64bf commit 96786d2

File tree

115 files changed

+981
-692
lines changed

Some content is hidden

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

115 files changed

+981
-692
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: aca2057ed5fb7af3f8905b2bc01f72fa001c35c8
33
refs/heads/snap-stage3: 1af31d4974e33027a68126fa5a5a3c2c6491824f
4-
refs/heads/try: 4630fc75a7a9f61d53153452e5f3c13a8d7e3233
4+
refs/heads/try: 680053848928a94f933c5a453c031b458e9766e0
55
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
66
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
77
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try/AUTHORS.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -958,7 +958,7 @@ Santiago Rodriguez <[email protected]>
958958
Saurabh Anand <[email protected]>
959959
Scott Jenkins <[email protected]>
960960
Scott Lawrence <[email protected]>
961-
Scott Olson <scott@scott-olson.org>
961+
Scott Olson <scott@solson.me>
962962
Sean Bowe <[email protected]>
963963
Sean Chalmers <[email protected]>
964964
Sean Collins <[email protected]>

branches/try/src/compiletest/compiletest.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#![feature(libc)]
1616
#![feature(path_ext)]
1717
#![feature(rustc_private)]
18-
#![feature(slice_extras)]
18+
#![feature(slice_splits)]
1919
#![feature(str_char)]
2020
#![feature(test)]
2121
#![feature(vec_push_all)]
@@ -90,9 +90,7 @@ pub fn parse_config(args: Vec<String> ) -> Config {
9090
optopt("", "lldb-python-dir", "directory containing LLDB's python module", "PATH"),
9191
optflag("h", "help", "show this message"));
9292

93-
assert!(!args.is_empty());
94-
let argv0 = args[0].clone();
95-
let args_ = args.tail();
93+
let (argv0, args_) = args.split_first().unwrap();
9694
if args[1] == "-h" || args[1] == "--help" {
9795
let message = format!("Usage: {} [OPTIONS] [TESTNAME...]", argv0);
9896
println!("{}", getopts::usage(&message, &groups));

branches/try/src/compiletest/runtest.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ fn run_debuginfo_gdb_test(config: &Config, props: &TestProps, testfile: &Path) {
344344
check_lines,
345345
breakpoint_lines
346346
} = parse_debugger_commands(testfile, "gdb");
347-
let mut cmds = commands.connect("\n");
347+
let mut cmds = commands.join("\n");
348348

349349
// compile test file (it should have 'compile-flags:-g' in the header)
350350
let compiler_run_result = compile_test(config, props, testfile);
@@ -799,7 +799,7 @@ fn cleanup_debug_info_options(options: &Option<String>) -> Option<String> {
799799
split_maybe_args(options).into_iter()
800800
.filter(|x| !options_to_remove.contains(x))
801801
.collect::<Vec<String>>()
802-
.connect(" ");
802+
.join(" ");
803803
Some(new_options)
804804
}
805805

@@ -1412,15 +1412,15 @@ fn make_cmdline(libpath: &str, prog: &str, args: &[String]) -> String {
14121412

14131413
// Linux and mac don't require adjusting the library search path
14141414
if cfg!(unix) {
1415-
format!("{} {}", prog, args.connect(" "))
1415+
format!("{} {}", prog, args.join(" "))
14161416
} else {
14171417
// Build the LD_LIBRARY_PATH variable as it would be seen on the command line
14181418
// for diagnostic purposes
14191419
fn lib_path_cmd_prefix(path: &str) -> String {
14201420
format!("{}=\"{}\"", util::lib_path_env_var(), util::make_new_path(path))
14211421
}
14221422

1423-
format!("{} {} {}", lib_path_cmd_prefix(libpath), prog, args.connect(" "))
1423+
format!("{} {} {}", lib_path_cmd_prefix(libpath), prog, args.join(" "))
14241424
}
14251425
}
14261426

branches/try/src/doc/trpl/dining-philosophers.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -151,15 +151,15 @@ look at `main()` again:
151151
# struct Philosopher {
152152
# name: String,
153153
# }
154-
#
154+
#
155155
# impl Philosopher {
156156
# fn new(name: &str) -> Philosopher {
157157
# Philosopher {
158158
# name: name.to_string(),
159159
# }
160160
# }
161161
# }
162-
#
162+
#
163163
fn main() {
164164
let p1 = Philosopher::new("Judith Butler");
165165
let p2 = Philosopher::new("Gilles Deleuze");
@@ -197,15 +197,15 @@ a method, and then loop through all the philosophers, calling it:
197197
```rust
198198
struct Philosopher {
199199
name: String,
200-
}
200+
}
201201

202-
impl Philosopher {
202+
impl Philosopher {
203203
fn new(name: &str) -> Philosopher {
204204
Philosopher {
205205
name: name.to_string(),
206206
}
207207
}
208-
208+
209209
fn eat(&self) {
210210
println!("{} is done eating.", self.name);
211211
}
@@ -267,15 +267,15 @@ use std::thread;
267267

268268
struct Philosopher {
269269
name: String,
270-
}
270+
}
271271

272-
impl Philosopher {
272+
impl Philosopher {
273273
fn new(name: &str) -> Philosopher {
274274
Philosopher {
275275
name: name.to_string(),
276276
}
277277
}
278-
278+
279279
fn eat(&self) {
280280
println!("{} is eating.", self.name);
281281

@@ -348,9 +348,9 @@ use std::thread;
348348

349349
struct Philosopher {
350350
name: String,
351-
}
351+
}
352352

353-
impl Philosopher {
353+
impl Philosopher {
354354
fn new(name: &str) -> Philosopher {
355355
Philosopher {
356356
name: name.to_string(),
@@ -401,7 +401,7 @@ let handles: Vec<_> = philosophers.into_iter().map(|p| {
401401
While this is only five lines, they’re a dense five. Let’s break it down.
402402

403403
```rust,ignore
404-
let handles: Vec<_> =
404+
let handles: Vec<_> =
405405
```
406406

407407
We introduce a new binding, called `handles`. We’ve given it this name because
@@ -460,15 +460,15 @@ If you run this program, you’ll see that the philosophers eat out of order!
460460
We have multi-threading!
461461

462462
```text
463+
Judith Butler is eating.
463464
Gilles Deleuze is eating.
464-
Gilles Deleuze is done eating.
465+
Karl Marx is eating.
465466
Emma Goldman is eating.
466-
Emma Goldman is done eating.
467467
Michel Foucault is eating.
468-
Judith Butler is eating.
469468
Judith Butler is done eating.
470-
Karl Marx is eating.
469+
Gilles Deleuze is done eating.
471470
Karl Marx is done eating.
471+
Emma Goldman is done eating.
472472
Michel Foucault is done eating.
473473
```
474474

branches/try/src/liballoc/boxed.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ use core::raw::{TraitObject};
7171
/// The following two examples are equivalent:
7272
///
7373
/// ```
74-
/// #![feature(box_heap)]
74+
/// # #![feature(box_heap)]
7575
/// #![feature(box_syntax)]
7676
/// use std::boxed::HEAP;
7777
///
@@ -162,7 +162,7 @@ impl<T : ?Sized> Box<T> {
162162
///
163163
/// # Examples
164164
/// ```
165-
/// #![feature(box_raw)]
165+
/// # #![feature(box_raw)]
166166
/// use std::boxed;
167167
///
168168
/// let seventeen = Box::new(17u32);

branches/try/src/libcollections/slice.rs

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -282,34 +282,65 @@ impl<T> [T] {
282282

283283
/// Returns all but the first element of a slice.
284284
#[unstable(feature = "slice_extras", reason = "likely to be renamed")]
285+
#[deprecated(since = "1.3.0", reason = "superseded by split_first")]
285286
#[inline]
286287
pub fn tail(&self) -> &[T] {
287288
core_slice::SliceExt::tail(self)
288289
}
289290

291+
/// Returns the first and all the rest of the elements of a slice.
292+
#[unstable(feature = "slice_splits", reason = "new API")]
293+
#[inline]
294+
pub fn split_first(&self) -> Option<(&T, &[T])> {
295+
core_slice::SliceExt::split_first(self)
296+
}
297+
290298
/// Returns all but the first element of a mutable slice
291-
#[unstable(feature = "slice_extras",
292-
reason = "likely to be renamed or removed")]
299+
#[unstable(feature = "slice_extras", reason = "likely to be renamed or removed")]
300+
#[deprecated(since = "1.3.0", reason = "superseded by split_first_mut")]
293301
#[inline]
294302
pub fn tail_mut(&mut self) -> &mut [T] {
295303
core_slice::SliceExt::tail_mut(self)
296304
}
297305

306+
/// Returns the first and all the rest of the elements of a slice.
307+
#[unstable(feature = "slice_splits", reason = "new API")]
308+
#[inline]
309+
pub fn split_first_mut(&mut self) -> Option<(&mut T, &mut [T])> {
310+
core_slice::SliceExt::split_first_mut(self)
311+
}
312+
298313
/// Returns all but the last element of a slice.
299314
#[unstable(feature = "slice_extras", reason = "likely to be renamed")]
315+
#[deprecated(since = "1.3.0", reason = "superseded by split_last")]
300316
#[inline]
301317
pub fn init(&self) -> &[T] {
302318
core_slice::SliceExt::init(self)
303319
}
304320

321+
/// Returns the last and all the rest of the elements of a slice.
322+
#[unstable(feature = "slice_splits", reason = "new API")]
323+
#[inline]
324+
pub fn split_last(&self) -> Option<(&T, &[T])> {
325+
core_slice::SliceExt::split_last(self)
326+
327+
}
328+
305329
/// Returns all but the last element of a mutable slice
306-
#[unstable(feature = "slice_extras",
307-
reason = "likely to be renamed or removed")]
330+
#[unstable(feature = "slice_extras", reason = "likely to be renamed or removed")]
331+
#[deprecated(since = "1.3.0", reason = "superseded by split_last_mut")]
308332
#[inline]
309333
pub fn init_mut(&mut self) -> &mut [T] {
310334
core_slice::SliceExt::init_mut(self)
311335
}
312336

337+
/// Returns the last and all the rest of the elements of a slice.
338+
#[unstable(feature = "slice_splits", since = "1.3.0")]
339+
#[inline]
340+
pub fn split_last_mut(&mut self) -> Option<(&mut T, &mut [T])> {
341+
core_slice::SliceExt::split_last_mut(self)
342+
}
343+
313344
/// Returns the last element of a slice, or `None` if it is empty.
314345
///
315346
/// # Examples
@@ -1025,6 +1056,17 @@ pub trait SliceConcatExt<T: ?Sized> {
10251056
#[stable(feature = "rust1", since = "1.0.0")]
10261057
fn concat(&self) -> Self::Output;
10271058

1059+
/// Flattens a slice of `T` into a single value `Self::Output`, placing a
1060+
/// given separator between each.
1061+
///
1062+
/// # Examples
1063+
///
1064+
/// ```
1065+
/// assert_eq!(["hello", "world"].join(" "), "hello world");
1066+
/// ```
1067+
#[stable(feature = "rename_connect_to_join", since = "1.3.0")]
1068+
fn join(&self, sep: &T) -> Self::Output;
1069+
10281070
/// Flattens a slice of `T` into a single value `Self::Output`, placing a
10291071
/// given separator between each.
10301072
///
@@ -1034,6 +1076,7 @@ pub trait SliceConcatExt<T: ?Sized> {
10341076
/// assert_eq!(["hello", "world"].connect(" "), "hello world");
10351077
/// ```
10361078
#[stable(feature = "rust1", since = "1.0.0")]
1079+
#[deprecated(since = "1.3.0", reason = "renamed to join")]
10371080
fn connect(&self, sep: &T) -> Self::Output;
10381081
}
10391082

@@ -1049,7 +1092,7 @@ impl<T: Clone, V: Borrow<[T]>> SliceConcatExt<T> for [V] {
10491092
result
10501093
}
10511094

1052-
fn connect(&self, sep: &T) -> Vec<T> {
1095+
fn join(&self, sep: &T) -> Vec<T> {
10531096
let size = self.iter().fold(0, |acc, v| acc + v.borrow().len());
10541097
let mut result = Vec::with_capacity(size + self.len());
10551098
let mut first = true;
@@ -1059,6 +1102,10 @@ impl<T: Clone, V: Borrow<[T]>> SliceConcatExt<T> for [V] {
10591102
}
10601103
result
10611104
}
1105+
1106+
fn connect(&self, sep: &T) -> Vec<T> {
1107+
self.join(sep)
1108+
}
10621109
}
10631110

10641111
/// An iterator that yields the element swaps needed to produce

branches/try/src/libcollections/str.rs

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ use core::result::Result;
6161
use core::str as core_str;
6262
use core::str::pattern::Pattern;
6363
use core::str::pattern::{Searcher, ReverseSearcher, DoubleEndedSearcher};
64+
use core::mem;
6465
use rustc_unicode::str::{UnicodeStr, Utf16Encoder};
6566

6667
use vec_deque::VecDeque;
@@ -69,6 +70,7 @@ use string::String;
6970
use rustc_unicode;
7071
use vec::Vec;
7172
use slice::SliceConcatExt;
73+
use boxed::Box;
7274

7375
pub use core::str::{FromStr, Utf8Error};
7476
pub use core::str::{Lines, LinesAny, CharRange};
@@ -82,10 +84,6 @@ pub use core::str::{from_utf8_unchecked, ParseBoolError};
8284
pub use rustc_unicode::str::{SplitWhitespace, Words, Graphemes, GraphemeIndices};
8385
pub use core::str::pattern;
8486

85-
/*
86-
Section: Creating a string
87-
*/
88-
8987
impl<S: Borrow<str>> SliceConcatExt<str> for [S] {
9088
type Output = String;
9189

@@ -105,7 +103,7 @@ impl<S: Borrow<str>> SliceConcatExt<str> for [S] {
105103
result
106104
}
107105

108-
fn connect(&self, sep: &str) -> String {
106+
fn join(&self, sep: &str) -> String {
109107
if self.is_empty() {
110108
return String::new();
111109
}
@@ -132,11 +130,11 @@ impl<S: Borrow<str>> SliceConcatExt<str> for [S] {
132130
}
133131
result
134132
}
135-
}
136133

137-
/*
138-
Section: Iterators
139-
*/
134+
fn connect(&self, sep: &str) -> String {
135+
self.join(sep)
136+
}
137+
}
140138

141139
// Helper functions used for Unicode normalization
142140
fn canonical_sort(comb: &mut [(char, u8)]) {
@@ -382,10 +380,6 @@ impl<'a> Iterator for Utf16Units<'a> {
382380
fn size_hint(&self) -> (usize, Option<usize>) { self.encoder.size_hint() }
383381
}
384382

385-
/*
386-
Section: Misc
387-
*/
388-
389383
// Return the initial codepoint accumulator for the first byte.
390384
// The first byte is special, only want bottom 5 bits for width 2, 4 bits
391385
// for width 3, and 3 bits for width 4
@@ -414,15 +408,6 @@ impl ToOwned for str {
414408
}
415409
}
416410

417-
/*
418-
Section: CowString
419-
*/
420-
421-
/*
422-
Section: Trait implementations
423-
*/
424-
425-
426411
/// Any string that can be represented as a slice.
427412
#[lang = "str"]
428413
#[cfg(not(test))]
@@ -1924,4 +1909,14 @@ impl str {
19241909
pub fn escape_unicode(&self) -> String {
19251910
self.chars().flat_map(|c| c.escape_unicode()).collect()
19261911
}
1912+
1913+
/// Converts the `Box<str>` into a `String` without copying or allocating.
1914+
#[unstable(feature = "box_str",
1915+
reason = "recently added, matches RFC")]
1916+
pub fn into_string(self: Box<str>) -> String {
1917+
unsafe {
1918+
let slice = mem::transmute::<Box<str>, Box<[u8]>>(self);
1919+
String::from_utf8_unchecked(slice.into_vec())
1920+
}
1921+
}
19271922
}

0 commit comments

Comments
 (0)