Skip to content

Commit cee3b05

Browse files
committed
---
yaml --- r: 228349 b: refs/heads/try c: c8cddde h: refs/heads/master i: 228347: d89233c v: v3
1 parent ae439b9 commit cee3b05

File tree

30 files changed

+604
-158
lines changed

30 files changed

+604
-158
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: 71e7fee803ff5158c85962144f47073210fdb6ba
4+
refs/heads/try: c8cddde207aa256527d30d83855e65dc2d59c2b6
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/configure

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -988,29 +988,44 @@ if [ ! -z "$CFG_ENABLE_CLANG" ]
988988
then
989989
case "$CC" in
990990
(''|*clang)
991-
CFG_CLANG_VERSION=$($CFG_CC \
992-
--version \
993-
| grep version \
994-
| sed 's/.*\(version .*\)/\1/; s/.*based on \(LLVM .*\))/\1/' \
995-
| cut -d ' ' -f 2)
996-
997-
case $CFG_CLANG_VERSION in
998-
(3.2* | 3.3* | 3.4* | 3.5* | 3.6* | 3.7*)
999-
step_msg "found ok version of CLANG: $CFG_CLANG_VERSION"
1000-
if [ -z "$CC" ]
1001-
then
1002-
CFG_CC="clang"
1003-
CFG_CXX="clang++"
1004-
fi
1005-
;;
1006-
(*)
1007-
err "bad CLANG version: $CFG_CLANG_VERSION, need >=3.0svn"
1008-
;;
1009-
esac
1010-
;;
1011-
(*)
1012-
msg "skipping CFG_ENABLE_CLANG version check; provided CC=$CC"
1013-
;;
991+
CFG_CLANG_REPORTED_VERSION=$($CFG_CC --version | grep version)
992+
993+
if [[ $CFG_CLANG_REPORTED_VERSION == *"(based on LLVM "* ]]
994+
then
995+
CFG_CLANG_VERSION=$(echo $CFG_CLANG_REPORTED_VERSION | sed 's/.*(based on LLVM \(.*\))/\1/')
996+
elif [[ $CFG_CLANG_REPORTED_VERSION == "Apple LLVM"* ]]
997+
then
998+
CFG_OSX_CLANG_VERSION=$(echo $CFG_CLANG_REPORTED_VERSION | sed 's/.*version \(.*\) .*/\1/')
999+
else
1000+
CFG_CLANG_VERSION=$(echo $CFG_CLANG_REPORTED_VERSION | sed 's/.*version \(.*\) .*/\1/')
1001+
fi
1002+
1003+
if [ ! -z "$CFG_OSX_CLANG_VERSION" ]
1004+
then
1005+
case $CFG_OSX_CLANG_VERSION in
1006+
(7.0*)
1007+
step_msg "found ok version of APPLE CLANG: $CFG_OSX_CLANG_VERSION"
1008+
;;
1009+
(*)
1010+
err "bad APPLE CLANG version: $CFG_OSX_CLANG_VERSION, need >=7.0"
1011+
;;
1012+
esac
1013+
else
1014+
case $CFG_CLANG_VERSION in
1015+
(3.2* | 3.3* | 3.4* | 3.5* | 3.6* | 3.7*)
1016+
step_msg "found ok version of CLANG: $CFG_CLANG_VERSION"
1017+
;;
1018+
(*)
1019+
err "bad CLANG version: $CFG_CLANG_VERSION, need >=3.0svn"
1020+
;;
1021+
esac
1022+
fi
1023+
1024+
if [ -z "$CC" ]
1025+
then
1026+
CFG_CC="clang"
1027+
CFG_CXX="clang++"
1028+
fi
10141029
esac
10151030
fi
10161031

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/etc/errorck.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@
2323
errcode_map = {}
2424
error_re = re.compile("(E\d\d\d\d)")
2525

26+
# In the register_long_diagnostics! macro, entries look like this:
27+
#
28+
# EXXXX: r##"
29+
# <Long diagnostic message>
30+
# "##,
31+
#
32+
# These two variables are for detecting the beginning and end of diagnostic
33+
# messages so that duplicate error codes are not reported when a code occurs
34+
# inside a diagnostic message
35+
long_diag_begin = "r##\""
36+
long_diag_end = "\"##"
37+
2638
for (dirpath, dirnames, filenames) in os.walk(src_dir):
2739
if "src/test" in dirpath or "src/llvm" in dirpath:
2840
# Short circuit for fast
@@ -35,7 +47,14 @@
3547
path = os.path.join(dirpath, filename)
3648

3749
with open(path, 'r') as f:
50+
inside_long_diag = False
3851
for line_num, line in enumerate(f, start=1):
52+
if inside_long_diag:
53+
# Skip duplicate error code checking for this line
54+
if long_diag_end in line:
55+
inside_long_diag = False
56+
continue
57+
3958
match = error_re.search(line)
4059
if match:
4160
errcode = match.group(1)
@@ -47,6 +66,9 @@
4766
else:
4867
errcode_map[errcode] = new_record
4968

69+
if long_diag_begin in line:
70+
inside_long_diag = True
71+
5072
errors = False
5173
all_errors = []
5274

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/str.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,14 @@ impl str {
550550
core_str::StrExt::slice_unchecked(self, begin, end)
551551
}
552552

553+
/// Takes a bytewise mutable slice from a string.
554+
///
555+
/// Same as `slice_unchecked`, but works with `&mut str` instead of `&str`.
556+
#[unstable(feature = "str_slice_mut", reason = "recently added")]
557+
pub unsafe fn slice_mut_unchecked(&mut self, begin: usize, end: usize) -> &mut str {
558+
core_str::StrExt::slice_mut_unchecked(self, begin, end)
559+
}
560+
553561
/// Returns a slice of the string from the character range [`begin`..`end`).
554562
///
555563
/// That is, start at the `begin`-th code point of the string and continue
@@ -776,7 +784,7 @@ impl str {
776784
///
777785
/// # Examples
778786
/// ```
779-
/// # #![feature(collections)]
787+
/// # #![feature(str_split_at)]
780788
/// let s = "Löwe 老虎 Léopard";
781789
/// let first_space = s.find(' ').unwrap_or(s.len());
782790
/// let (a, b) = s.split_at(first_space);
@@ -785,10 +793,18 @@ impl str {
785793
/// assert_eq!(b, " 老虎 Léopard");
786794
/// ```
787795
#[inline]
796+
#[unstable(feature = "str_split_at", reason = "recently added")]
788797
pub fn split_at(&self, mid: usize) -> (&str, &str) {
789798
core_str::StrExt::split_at(self, mid)
790799
}
791800

801+
/// Divide one mutable string slice into two at an index.
802+
#[inline]
803+
#[unstable(feature = "str_split_at", reason = "recently added")]
804+
pub fn split_at_mut(&mut self, mid: usize) -> (&mut str, &mut str) {
805+
core_str::StrExt::split_at_mut(self, mid)
806+
}
807+
792808
/// An iterator over the codepoints of `self`.
793809
///
794810
/// # Examples

branches/try/src/libcollections/string.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,38 @@ impl ops::Index<ops::RangeFull> for String {
979979
}
980980
}
981981

982+
#[cfg(not(stage0))]
983+
#[stable(feature = "derefmut_for_string", since = "1.2.0")]
984+
impl ops::IndexMut<ops::Range<usize>> for String {
985+
#[inline]
986+
fn index_mut(&mut self, index: ops::Range<usize>) -> &mut str {
987+
&mut self[..][index]
988+
}
989+
}
990+
#[cfg(not(stage0))]
991+
#[stable(feature = "derefmut_for_string", since = "1.2.0")]
992+
impl ops::IndexMut<ops::RangeTo<usize>> for String {
993+
#[inline]
994+
fn index_mut(&mut self, index: ops::RangeTo<usize>) -> &mut str {
995+
&mut self[..][index]
996+
}
997+
}
998+
#[cfg(not(stage0))]
999+
#[stable(feature = "derefmut_for_string", since = "1.2.0")]
1000+
impl ops::IndexMut<ops::RangeFrom<usize>> for String {
1001+
#[inline]
1002+
fn index_mut(&mut self, index: ops::RangeFrom<usize>) -> &mut str {
1003+
&mut self[..][index]
1004+
}
1005+
}
1006+
#[stable(feature = "derefmut_for_string", since = "1.2.0")]
1007+
impl ops::IndexMut<ops::RangeFull> for String {
1008+
#[inline]
1009+
fn index_mut(&mut self, _index: ops::RangeFull) -> &mut str {
1010+
unsafe { mem::transmute(&mut *self.vec) }
1011+
}
1012+
}
1013+
9821014
#[stable(feature = "rust1", since = "1.0.0")]
9831015
impl ops::Deref for String {
9841016
type Target = str;
@@ -989,6 +1021,14 @@ impl ops::Deref for String {
9891021
}
9901022
}
9911023

1024+
#[stable(feature = "derefmut_for_string", since = "1.2.0")]
1025+
impl ops::DerefMut for String {
1026+
#[inline]
1027+
fn deref_mut(&mut self) -> &mut str {
1028+
unsafe { mem::transmute(&mut self.vec[..]) }
1029+
}
1030+
}
1031+
9921032
/// Wrapper type providing a `&String` reference via `Deref`.
9931033
#[unstable(feature = "collections")]
9941034
#[deprecated(since = "1.2.0",

branches/try/src/libcollectionstest/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
#![feature(ascii)]
1112
#![feature(append)]
1213
#![feature(bitset)]
1314
#![feature(bitvec)]
@@ -43,6 +44,7 @@
4344
#![feature(str_char)]
4445
#![feature(str_escape)]
4546
#![feature(str_match_indices)]
47+
#![feature(str_split_at)]
4648
#![feature(str_utf16)]
4749
#![feature(box_str)]
4850
#![feature(subslice_offset)]

branches/try/src/libcollectionstest/str.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,18 @@ fn test_split_at() {
701701
assert_eq!(b, "");
702702
}
703703

704+
#[test]
705+
fn test_split_at_mut() {
706+
use std::ascii::AsciiExt;
707+
let mut s = "Hello World".to_string();
708+
{
709+
let (a, b) = s.split_at_mut(5);
710+
a.make_ascii_uppercase();
711+
b.make_ascii_lowercase();
712+
}
713+
assert_eq!(s, "HELLO world");
714+
}
715+
704716
#[test]
705717
#[should_panic]
706718
fn test_split_at_boundscheck() {

0 commit comments

Comments
 (0)