Skip to content

Commit 64692a1

Browse files
committed
---
yaml --- r: 216495 b: refs/heads/stable c: 554da45 h: refs/heads/master i: 216493: 4ab8d3d 216491: 7cfca1d 216487: 82c4f06 216479: f64bec8 v: v3
1 parent d27b9c8 commit 64692a1

Some content is hidden

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

66 files changed

+414
-683
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: ac7a75ec976f05eb940b800e072e60c1a52b78a1
32+
refs/heads/stable: 554da45762ff11def1d7ef85c68d4ed86550aa40
3333
refs/tags/1.0.0: 55bd4f8ff2b323f317ae89e254ce87162d52a375

branches/stable/src/doc/reference.md

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1557,7 +1557,8 @@ 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. When an item is declared as `pub`,
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`,
15611562
it can be thought of as being accessible to the outside world. For example:
15621563

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

24272428
```{.tuple}
2429+
(0,);
24282430
(0.0, 4.5);
24292431
("a", 4usize, true);
24302432
```
24312433

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-
24402434
### Unit expressions
24412435

24422436
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: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,18 @@ this reason.
1919
# `static`
2020

2121
Rust provides a ‘global variable’ sort of facility in static items. They’re
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.
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.
2525

2626
Here’s an example:
2727

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

32+
[const]: const.html
33+
3234
Unlike [`let`][let] bindings, you must annotate the type of a `static`.
3335

3436
[let]: variable-bindings.html

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

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

237237
```rust
238-
let nums = vec![1, 2, 3];
238+
let nums = [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.
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...
247258

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

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ 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 overflow].
96+
resources include [the user’s forum][users], and [Stack Overflow][stack
97+
overflow].
9798

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

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -248,14 +248,6 @@ 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-
259251
## Tuple Indexing
260252

261253
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.html
83+
[ffi]: ffi.md
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]: const-and-static.html#static
104+
[static]: static.html
105105

106106
## Dereference a raw pointer
107107

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

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

4040
Meaning, this implementation would only work for [references][ref], and not
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
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`.
4644

4745
# ?Sized
4846

branches/stable/src/liballoc/boxed.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,6 @@ 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.
244243
pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any>> {
245244
if self.is::<T>() {
246245
unsafe {
@@ -258,15 +257,11 @@ impl Box<Any> {
258257
}
259258
}
260259

261-
impl Box<Any + Send> {
260+
impl Box<Any+Send> {
262261
#[inline]
263262
#[stable(feature = "rust1", since = "1.0.0")]
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-
})
263+
pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any>> {
264+
<Box<Any>>::downcast(self)
270265
}
271266
}
272267

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 is ignored.
401+
//! For integral types, this has no meaning currently.
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: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ pub trait Any: Reflect + 'static {
9797
fn get_type_id(&self) -> TypeId;
9898
}
9999

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

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

branches/stable/src/libcore/marker.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -416,8 +416,6 @@ mod impls {
416416
#[rustc_reflect_like]
417417
#[unstable(feature = "core", reason = "requires RFC and more experience")]
418418
#[allow(deprecated)]
419-
#[rustc_on_unimplemented = "`{Self}` does not implement `Any`; \
420-
ensure all type parameters are bounded by `Any`"]
421419
pub trait Reflect {}
422420

423421
impl Reflect for .. { }

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,14 +113,12 @@ 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]
117116
pub fn min_value() -> $T {
118117
(-1 as $T) << ($BITS - 1)
119118
}
120119

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

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<ty::TraitRef<'tcx>> {
286+
-> Option<Rc<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)

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@ use middle::subst;
3030
use middle::ty::{ImplContainer, TraitContainer};
3131
use middle::ty::{self, Ty};
3232
use middle::astencode::vtable_decoder_helpers;
33-
use util::nodemap::FnvHashMap;
3433

35-
use std::cell::{Cell, RefCell};
3634
use std::collections::HashMap;
3735
use std::hash::{self, Hash, SipHasher};
3836
use std::io::prelude::*;
@@ -249,13 +247,13 @@ pub fn item_type<'tcx>(_item_id: ast::DefId, item: rbml::Doc,
249247
}
250248

251249
fn doc_trait_ref<'tcx>(doc: rbml::Doc, tcx: &ty::ctxt<'tcx>, cdata: Cmd)
252-
-> ty::TraitRef<'tcx> {
250+
-> Rc<ty::TraitRef<'tcx>> {
253251
parse_trait_ref_data(doc.data, cdata.cnum, doc.start, tcx,
254252
|_, did| translate_def_id(cdata, did))
255253
}
256254

257255
fn item_trait_ref<'tcx>(doc: rbml::Doc, tcx: &ty::ctxt<'tcx>, cdata: Cmd)
258-
-> ty::TraitRef<'tcx> {
256+
-> Rc<ty::TraitRef<'tcx>> {
259257
let tp = reader::get_doc(doc, tag_item_trait_ref);
260258
doc_trait_ref(tp, tcx, cdata)
261259
}
@@ -422,9 +420,6 @@ pub fn get_trait_def<'tcx>(cdata: Cmd,
422420
generics: generics,
423421
trait_ref: item_trait_ref(item_doc, tcx, cdata),
424422
associated_type_names: associated_type_names,
425-
nonblanket_impls: RefCell::new(FnvHashMap()),
426-
blanket_impls: RefCell::new(vec![]),
427-
flags: Cell::new(ty::TraitFlags::NO_TRAIT_FLAGS)
428423
}
429424
}
430425

@@ -495,7 +490,7 @@ pub fn get_impl_polarity<'tcx>(cdata: Cmd,
495490
pub fn get_impl_trait<'tcx>(cdata: Cmd,
496491
id: ast::NodeId,
497492
tcx: &ty::ctxt<'tcx>)
498-
-> Option<ty::TraitRef<'tcx>>
493+
-> Option<Rc<ty::TraitRef<'tcx>>>
499494
{
500495
let item_doc = lookup_item(id, cdata.data());
501496
let fam = item_family(item_doc);

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

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ struct entry<T> {
103103

104104
fn encode_trait_ref<'a, 'tcx>(rbml_w: &mut Encoder,
105105
ecx: &EncodeContext<'a, 'tcx>,
106-
trait_ref: ty::TraitRef<'tcx>,
106+
trait_ref: &ty::TraitRef<'tcx>,
107107
tag: usize) {
108108
let ty_str_ctxt = &tyencode::ctxt {
109109
diag: ecx.diag,
@@ -191,7 +191,7 @@ pub fn write_trait_ref<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
191191
tcx: ecx.tcx,
192192
abbrevs: &ecx.type_abbrevs
193193
};
194-
tyencode::enc_trait_ref(rbml_w, ty_str_ctxt, *trait_ref);
194+
tyencode::enc_trait_ref(rbml_w, ty_str_ctxt, trait_ref);
195195
}
196196

197197
pub fn write_region(ecx: &EncodeContext,
@@ -974,14 +974,16 @@ fn encode_inherent_implementations(ecx: &EncodeContext,
974974
fn encode_extension_implementations(ecx: &EncodeContext,
975975
rbml_w: &mut Encoder,
976976
trait_def_id: DefId) {
977-
assert!(ast_util::is_local(trait_def_id));
978-
let def = ty::lookup_trait_def(ecx.tcx, trait_def_id);
979-
980-
def.for_each_impl(ecx.tcx, |impl_def_id| {
981-
rbml_w.start_tag(tag_items_data_item_extension_impl);
982-
encode_def_id(rbml_w, impl_def_id);
983-
rbml_w.end_tag();
984-
});
977+
match ecx.tcx.trait_impls.borrow().get(&trait_def_id) {
978+
None => {}
979+
Some(implementations) => {
980+
for &impl_def_id in &*implementations.borrow() {
981+
rbml_w.start_tag(tag_items_data_item_extension_impl);
982+
encode_def_id(rbml_w, impl_def_id);
983+
rbml_w.end_tag();
984+
}
985+
}
986+
}
985987
}
986988

987989
fn encode_stability(rbml_w: &mut Encoder, stab_opt: Option<attr::Stability>) {
@@ -1199,7 +1201,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
11991201
encode_unsafety(rbml_w, unsafety);
12001202

12011203
let trait_ref = ty::impl_id_to_trait_ref(tcx, item.id);
1202-
encode_trait_ref(rbml_w, ecx, trait_ref, tag_item_trait_ref);
1204+
encode_trait_ref(rbml_w, ecx, &*trait_ref, tag_item_trait_ref);
12031205
rbml_w.end_tag();
12041206
}
12051207
ast::ItemImpl(unsafety, polarity, _, ref opt_trait, ref ty, ref ast_items) => {
@@ -1244,7 +1246,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
12441246
}
12451247
if opt_trait.is_some() {
12461248
let trait_ref = ty::impl_id_to_trait_ref(tcx, item.id);
1247-
encode_trait_ref(rbml_w, ecx, trait_ref, tag_item_trait_ref);
1249+
encode_trait_ref(rbml_w, ecx, &*trait_ref, tag_item_trait_ref);
12481250
}
12491251
encode_path(rbml_w, path.clone());
12501252
encode_stability(rbml_w, stab);
@@ -1312,7 +1314,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
13121314
tag_item_generics);
13131315
encode_predicates(rbml_w, ecx, &ty::lookup_super_predicates(tcx, def_id),
13141316
tag_item_super_predicates);
1315-
encode_trait_ref(rbml_w, ecx, trait_def.trait_ref, tag_item_trait_ref);
1317+
encode_trait_ref(rbml_w, ecx, &*trait_def.trait_ref, tag_item_trait_ref);
13161318
encode_name(rbml_w, item.ident.name);
13171319
encode_attributes(rbml_w, &item.attrs);
13181320
encode_visibility(rbml_w, vis);

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use middle::subst;
2323
use middle::subst::VecPerParamSpace;
2424
use middle::ty::{self, AsPredicate, Ty};
2525

26+
use std::rc::Rc;
2627
use std::str;
2728
use syntax::abi;
2829
use syntax::ast;
@@ -181,7 +182,7 @@ pub fn parse_bare_fn_ty_data<'tcx, F>(data: &[u8], crate_num: ast::CrateNum, pos
181182

182183
pub fn parse_trait_ref_data<'tcx, F>(data: &[u8], crate_num: ast::CrateNum, pos: usize,
183184
tcx: &ty::ctxt<'tcx>, conv: F)
184-
-> ty::TraitRef<'tcx> where
185+
-> Rc<ty::TraitRef<'tcx>> where
185186
F: FnMut(DefIdSource, ast::DefId) -> ast::DefId,
186187
{
187188
debug!("parse_trait_ref_data {}", data_log_string(data, pos));
@@ -433,19 +434,19 @@ fn parse_str(st: &mut PState, term: char) -> String {
433434
}
434435

435436
fn parse_trait_ref<'a, 'tcx, F>(st: &mut PState<'a, 'tcx>, mut conv: F)
436-
-> ty::TraitRef<'tcx> where
437+
-> Rc<ty::TraitRef<'tcx>> where
437438
F: FnMut(DefIdSource, ast::DefId) -> ast::DefId,
438439
{
439440
parse_trait_ref_(st, &mut conv)
440441
}
441442

442443
fn parse_trait_ref_<'a, 'tcx, F>(st: &mut PState<'a, 'tcx>, conv: &mut F)
443-
-> ty::TraitRef<'tcx> where
444+
-> Rc<ty::TraitRef<'tcx>> where
444445
F: FnMut(DefIdSource, ast::DefId) -> ast::DefId,
445446
{
446447
let def = parse_def_(st, NominalType, conv);
447448
let substs = st.tcx.mk_substs(parse_substs_(st, conv));
448-
ty::TraitRef {def_id: def, substs: substs}
449+
Rc::new(ty::TraitRef {def_id: def, substs: substs})
449450
}
450451

451452
fn parse_ty<'a, 'tcx, F>(st: &mut PState<'a, 'tcx>, mut conv: F) -> Ty<'tcx> where

0 commit comments

Comments
 (0)