Skip to content

Commit afe073e

Browse files
committed
---
yaml --- r: 216503 b: refs/heads/stable c: f6574c5 h: refs/heads/master i: 216501: 8c6b460 216499: 5120755 216495: 64692a1 v: v3
1 parent c1b5984 commit afe073e

Some content is hidden

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

73 files changed

+763
-473
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@ refs/heads/tmp: 378a370ff2057afeb1eae86eb6e78c476866a4a6
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: a5286998df566e736b32f6795bfc3803bdaf453d
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828
32-
refs/heads/stable: b1976f1f6e467b83d9f91d141924d05b8e580257
32+
refs/heads/stable: f6574c5b0404f55c4dd4056be47d37eff33684b5
3333
refs/tags/1.0.0: 55bd4f8ff2b323f317ae89e254ce87162d52a375

branches/stable/src/doc/reference.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1557,8 +1557,7 @@ warnings are generated, or otherwise "you used a private item of another module
15571557
and weren't allowed to."
15581558

15591559
By default, everything in Rust is *private*, with one exception. Enum variants
1560-
in a `pub` enum are also public by default. You are allowed to alter this
1561-
default visibility with the `priv` keyword. When an item is declared as `pub`,
1560+
in a `pub` enum are also public by default. When an item is declared as `pub`,
15621561
it can be thought of as being accessible to the outside world. For example:
15631562

15641563
```
@@ -2426,11 +2425,18 @@ Tuples are written by enclosing zero or more comma-separated expressions in
24262425
parentheses. They are used to create [tuple-typed](#tuple-types) values.
24272426

24282427
```{.tuple}
2429-
(0,);
24302428
(0.0, 4.5);
24312429
("a", 4usize, true);
24322430
```
24332431

2432+
You can disambiguate a single-element tuple from a value in parentheses with a
2433+
comma:
2434+
2435+
```
2436+
(0,); // single-element tuple
2437+
(0); // zero in parentheses
2438+
```
2439+
24342440
### Unit expressions
24352441

24362442
The expression `()` denotes the _unit value_, the only value of the type with

branches/stable/src/doc/trpl/attributes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,4 @@ Rust attributes are used for a number of different things. There is a full list
6767
of attributes [in the reference][reference]. Currently, you are not allowed to
6868
create your own attributes, the Rust compiler defines them.
6969

70-
[reference]: reference.html#attributes
70+
[reference]: ../reference.html#attributes

branches/stable/src/doc/trpl/const-and-static.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,16 @@ this reason.
1919
# `static`
2020

2121
Rust provides a ‘global variable’ sort of facility in static items. They’re
22-
similar to [constants][const], but static items aren’t inlined upon use. This
23-
means that there is only one instance for each value, and it’s at a fixed
24-
location in memory.
22+
similar to constants, but static items aren’t inlined upon use. This means that
23+
there is only one instance for each value, and it’s at a fixed location in
24+
memory.
2525

2626
Here’s an example:
2727

2828
```rust
2929
static N: i32 = 5;
3030
```
3131

32-
[const]: const.html
33-
3432
Unlike [`let`][let] bindings, you must annotate the type of a `static`.
3533

3634
[let]: variable-bindings.html

branches/stable/src/doc/trpl/iterators.md

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -235,26 +235,15 @@ Ranges are one of two basic iterators that you'll see. The other is `iter()`.
235235
in turn:
236236

237237
```rust
238-
let nums = [1, 2, 3];
238+
let nums = vec![1, 2, 3];
239239

240240
for num in nums.iter() {
241241
println!("{}", num);
242242
}
243243
```
244244

245245
These two basic iterators should serve you well. There are some more
246-
advanced iterators, including ones that are infinite. Like using range syntax
247-
and `step_by`:
248-
249-
```rust
250-
# #![feature(step_by)]
251-
(1..).step_by(5);
252-
```
253-
254-
This iterator counts up from one, adding five each time. It will give
255-
you a new integer every time, forever (well, technically, until it reaches the
256-
maximum number representable by an `i32`). But since iterators are lazy,
257-
that's okay! You probably don't want to use `collect()` on it, though...
246+
advanced iterators, including ones that are infinite.
258247

259248
That's enough about iterators. Iterator adapters are the last concept
260249
we need to talk about with regards to iterators. Let's get to it!

branches/stable/src/doc/trpl/nightly-rust.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@ If not, there are a number of places where you can get help. The easiest is
9393
[the #rust IRC channel on irc.mozilla.org][irc], which you can access through
9494
[Mibbit][mibbit]. Click that link, and you'll be chatting with other Rustaceans
9595
(a silly nickname we call ourselves), and we can help you out. Other great
96-
resources include [the user’s forum][users], and [Stack Overflow][stack
97-
overflow].
96+
resources include [the user’s forum][users], and [Stack Overflow][stack overflow].
9897

9998
[irc]: irc://irc.mozilla.org/#rust
10099
[mibbit]: http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust

branches/stable/src/doc/trpl/primitive-types.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,14 @@ or “breaks up” the tuple, and assigns the bits to three bindings.
248248

249249
This pattern is very powerful, and we’ll see it repeated more later.
250250

251+
You can disambiguate a single-element tuple from a value in parentheses with a
252+
comma:
253+
254+
```
255+
(0,); // single-element tuple
256+
(0); // zero in parentheses
257+
```
258+
251259
## Tuple Indexing
252260

253261
You can also access fields of a tuple with indexing syntax:

branches/stable/src/doc/trpl/raw-pointers.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ Raw pointers are useful for FFI: Rust’s `*const T` and `*mut T` are similar to
8080
C’s `const T*` and `T*`, respectfully. For more about this use, consult the
8181
[FFI chapter][ffi].
8282

83-
[ffi]: ffi.md
83+
[ffi]: ffi.html
8484

8585
# References and raw pointers
8686

branches/stable/src/doc/trpl/unsafe.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ Rust has a feature called ‘`static mut`’ which allows for mutable global sta
101101
Doing so can cause a data race, and as such is inherently not safe. For more
102102
details, see the [static][static] section of the book.
103103

104-
[static]: static.html
104+
[static]: const-and-static.html#static
105105

106106
## Dereference a raw pointer
107107

branches/stable/src/doc/trpl/unsized-types.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,11 @@ impl Foo for &str {
3838
```
3939

4040
Meaning, this implementation would only work for [references][ref], and not
41-
other types of pointers. With this `impl`, all pointers, including (at some
42-
point, there are some bugs to fix first) user-defined custom smart pointers,
43-
can use this `impl`.
41+
other types of pointers. With the `impl for str`, all pointers, including (at
42+
some point, there are some bugs to fix first) user-defined custom smart
43+
pointers, can use this `impl`.
44+
45+
[ref]: references-and-borrowing.html
4446

4547
# ?Sized
4648

branches/stable/src/liballoc/boxed.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ impl<T: ?Sized + Hash> Hash for Box<T> {
240240
impl Box<Any> {
241241
#[inline]
242242
#[stable(feature = "rust1", since = "1.0.0")]
243+
/// Attempt to downcast the box to a concrete type.
243244
pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any>> {
244245
if self.is::<T>() {
245246
unsafe {
@@ -257,11 +258,15 @@ impl Box<Any> {
257258
}
258259
}
259260

260-
impl Box<Any+Send> {
261+
impl Box<Any + Send> {
261262
#[inline]
262263
#[stable(feature = "rust1", since = "1.0.0")]
263-
pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any>> {
264-
<Box<Any>>::downcast(self)
264+
/// Attempt to downcast the box to a concrete type.
265+
pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any + Send>> {
266+
<Box<Any>>::downcast(self).map_err(|s| unsafe {
267+
// reapply the Send marker
268+
mem::transmute::<Box<Any>, Box<Any + Send>>(s)
269+
})
265270
}
266271
}
267272

branches/stable/src/libcollections/fmt.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@
398398
//! longer than this width, then it is truncated down to this many characters and only those are
399399
//! emitted.
400400
//!
401-
//! For integral types, this has no meaning currently.
401+
//! For integral types, this is ignored.
402402
//!
403403
//! For floating-point types, this indicates how many digits after the decimal point should be
404404
//! printed.

branches/stable/src/libcore/any.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,7 @@ pub trait Any: Reflect + 'static {
9797
fn get_type_id(&self) -> TypeId;
9898
}
9999

100-
impl<T> Any for T
101-
where T: Reflect + 'static
102-
{
100+
impl<T: Reflect + 'static> Any for T {
103101
fn get_type_id(&self) -> TypeId { TypeId::of::<T>() }
104102
}
105103

@@ -222,7 +220,7 @@ impl TypeId {
222220
/// Returns the `TypeId` of the type this generic function has been
223221
/// instantiated with
224222
#[stable(feature = "rust1", since = "1.0.0")]
225-
pub fn of<T: ?Sized + Any>() -> TypeId {
223+
pub fn of<T: ?Sized + Reflect + 'static>() -> TypeId {
226224
TypeId {
227225
t: unsafe { intrinsics::type_id::<T>() },
228226
}

branches/stable/src/libcore/intrinsics.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,6 @@ extern "rust-intrinsic" {
267267
/// `Copy`, then may return `true` or `false`.
268268
pub fn needs_drop<T>() -> bool;
269269

270-
/// Returns `true` if a type is managed (will be allocated on the local heap)
271-
pub fn owns_managed<T>() -> bool;
272-
273270
/// Calculates the offset from a pointer.
274271
///
275272
/// This is implemented as an intrinsic to avoid converting to and from an

branches/stable/src/libcore/iter.rs

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2397,14 +2397,10 @@ pub trait Step: PartialOrd {
23972397
/// Steps `self` if possible.
23982398
fn step(&self, by: &Self) -> Option<Self>;
23992399

2400-
/// Returns the number of steps between two step objects.
2400+
/// Returns the number of steps between two step objects. The count is
2401+
/// inclusive of `start` and exclusive of `end`.
24012402
///
2402-
/// `start` should always be less than `end`, so the result should never
2403-
/// be negative.
2404-
///
2405-
/// `by` must be > 0.
2406-
///
2407-
/// Returns `None` if it is not possible to calculate steps_between
2403+
/// Returns `None` if it is not possible to calculate `steps_between`
24082404
/// without overflow.
24092405
fn steps_between(start: &Self, end: &Self, by: &Self) -> Option<usize>;
24102406
}
@@ -2419,9 +2415,16 @@ macro_rules! step_impl_unsigned {
24192415
#[inline]
24202416
#[allow(trivial_numeric_casts)]
24212417
fn steps_between(start: &$t, end: &$t, by: &$t) -> Option<usize> {
2422-
if *start <= *end {
2418+
if *by == 0 { return None; }
2419+
if *start < *end {
24232420
// Note: We assume $t <= usize here
2424-
Some((*end - *start) as usize / (*by as usize))
2421+
let diff = (*end - *start) as usize;
2422+
let by = *by as usize;
2423+
if diff % by > 0 {
2424+
Some(diff / by + 1)
2425+
} else {
2426+
Some(diff / by)
2427+
}
24252428
} else {
24262429
Some(0)
24272430
}
@@ -2439,16 +2442,29 @@ macro_rules! step_impl_signed {
24392442
#[inline]
24402443
#[allow(trivial_numeric_casts)]
24412444
fn steps_between(start: &$t, end: &$t, by: &$t) -> Option<usize> {
2442-
if *start <= *end {
2445+
if *by == 0 { return None; }
2446+
let mut diff: usize;
2447+
let mut by_u: usize;
2448+
if *by > 0 {
2449+
if *start >= *end {
2450+
return Some(0);
2451+
}
24432452
// Note: We assume $t <= isize here
24442453
// Use .wrapping_sub and cast to usize to compute the
24452454
// difference that may not fit inside the range of isize.
2446-
Some(
2447-
((*end as isize).wrapping_sub(*start as isize) as usize
2448-
/ (*by as usize))
2449-
)
2455+
diff = (*end as isize).wrapping_sub(*start as isize) as usize;
2456+
by_u = *by as usize;
24502457
} else {
2451-
Some(0)
2458+
if *start <= *end {
2459+
return Some(0);
2460+
}
2461+
diff = (*start as isize).wrapping_sub(*end as isize) as usize;
2462+
by_u = (*by as isize).wrapping_mul(-1) as usize;
2463+
}
2464+
if diff % by_u > 0 {
2465+
Some(diff / by_u + 1)
2466+
} else {
2467+
Some(diff / by_u)
24522468
}
24532469
}
24542470
}
@@ -2670,6 +2686,16 @@ impl<A: Step + Zero + Clone> Iterator for StepBy<A, ops::Range<A>> {
26702686
None
26712687
}
26722688
}
2689+
2690+
#[inline]
2691+
fn size_hint(&self) -> (usize, Option<usize>) {
2692+
match Step::steps_between(&self.range.start,
2693+
&self.range.end,
2694+
&self.step_by) {
2695+
Some(hint) => (hint, Some(hint)),
2696+
None => (0, None)
2697+
}
2698+
}
26732699
}
26742700

26752701
macro_rules! range_exact_iter_impl {

branches/stable/src/libcore/marker.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ unsafe impl Send for .. { }
4343

4444
impl<T> !Send for *const T { }
4545
impl<T> !Send for *mut T { }
46-
impl !Send for Managed { }
4746

4847
/// Types with a constant size known at compile-time.
4948
#[stable(feature = "rust1", since = "1.0.0")]
@@ -212,7 +211,6 @@ unsafe impl Sync for .. { }
212211

213212
impl<T> !Sync for *const T { }
214213
impl<T> !Sync for *mut T { }
215-
impl !Sync for Managed { }
216214

217215
/// A type which is considered "not POD", meaning that it is not
218216
/// implicitly copyable. This is typically embedded in other types to
@@ -223,14 +221,6 @@ impl !Sync for Managed { }
223221
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)]
224222
pub struct NoCopy;
225223

226-
/// A type which is considered managed by the GC. This is typically
227-
/// embedded in other types.
228-
#[unstable(feature = "core",
229-
reason = "likely to change with new variance strategy")]
230-
#[lang="managed_bound"]
231-
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)]
232-
pub struct Managed;
233-
234224
macro_rules! impls{
235225
($t: ident) => (
236226
impl<T:?Sized> Hash for $t<T> {
@@ -416,6 +406,8 @@ mod impls {
416406
#[rustc_reflect_like]
417407
#[unstable(feature = "core", reason = "requires RFC and more experience")]
418408
#[allow(deprecated)]
409+
#[rustc_on_unimplemented = "`{Self}` does not implement `Any`; \
410+
ensure all type parameters are bounded by `Any`"]
419411
pub trait Reflect {}
420412

421413
impl Reflect for .. { }

branches/stable/src/libcore/num/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,14 @@ macro_rules! int_impl {
113113
$mul_with_overflow:path) => {
114114
/// Returns the smallest value that can be represented by this integer type.
115115
#[stable(feature = "rust1", since = "1.0.0")]
116+
#[inline]
116117
pub fn min_value() -> $T {
117118
(-1 as $T) << ($BITS - 1)
118119
}
119120

120121
/// Returns the largest value that can be represented by this integer type.
121122
#[stable(feature = "rust1", since = "1.0.0")]
123+
#[inline]
122124
pub fn max_value() -> $T {
123125
let min = $T::min_value(); !min
124126
}

branches/stable/src/libcoretest/iter.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use core::iter::*;
1212
use core::iter::order::*;
1313
use core::iter::MinMaxResult::*;
14-
use core::isize;
14+
use core::{i8, i16, isize};
1515
use core::usize;
1616
use core::cmp;
1717

@@ -786,6 +786,18 @@ fn test_range_step() {
786786
assert_eq!((200..255).step_by(50).collect::<Vec<u8>>(), [200, 250]);
787787
assert_eq!((200..-5).step_by(1).collect::<Vec<isize>>(), []);
788788
assert_eq!((200..200).step_by(1).collect::<Vec<isize>>(), []);
789+
790+
assert_eq!((0..20).step_by(1).size_hint(), (20, Some(20)));
791+
assert_eq!((0..20).step_by(21).size_hint(), (1, Some(1)));
792+
assert_eq!((0..20).step_by(5).size_hint(), (4, Some(4)));
793+
assert_eq!((20..0).step_by(-5).size_hint(), (4, Some(4)));
794+
assert_eq!((20..0).step_by(-6).size_hint(), (4, Some(4)));
795+
assert_eq!((20..-5).step_by(1).size_hint(), (0, Some(0)));
796+
assert_eq!((20..20).step_by(1).size_hint(), (0, Some(0)));
797+
assert_eq!((0..1).step_by(0).size_hint(), (0, None));
798+
assert_eq!((i8::MAX..i8::MIN).step_by(i8::MIN).size_hint(), (2, Some(2)));
799+
assert_eq!((i16::MIN..i16::MAX).step_by(i16::MAX).size_hint(), (3, Some(3)));
800+
assert_eq!((isize::MIN..isize::MAX).step_by(1).size_hint(), (usize::MAX, Some(usize::MAX)));
789801
}
790802

791803
#[test]

branches/stable/src/librustc/metadata/csearch.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ pub fn get_impl_polarity<'tcx>(tcx: &ty::ctxt<'tcx>,
283283
// if there is one.
284284
pub fn get_impl_trait<'tcx>(tcx: &ty::ctxt<'tcx>,
285285
def: ast::DefId)
286-
-> Option<Rc<ty::TraitRef<'tcx>>> {
286+
-> Option<ty::TraitRef<'tcx>> {
287287
let cstore = &tcx.sess.cstore;
288288
let cdata = cstore.get_crate_data(def.krate);
289289
decoder::get_impl_trait(&*cdata, def.node, tcx)

0 commit comments

Comments
 (0)