Commit Graph

32207 Commits

Author SHA1 Message Date
Alex Crichton
97f605e858 rollup merge of #20081: tomjakubowski/issue-19646
Encode foreign item attributes and stability levels and visit foreign
items in the stability visitor.

cc @Gankro
2014-12-21 09:27:37 -08:00
Alex Crichton
40e1f7c6ba rollup merge of #20080: seanmonstar/new-show-syntax
First step of #20013. This will allow (after a snapshot) to change all the debug strings from `{}` to `{:?}`.

r? @alexcrichton
2014-12-21 09:27:37 -08:00
Alex Crichton
3e5257f68f rollup merge of #20079: SimonSapin/string_push_ascii_fast_path
`String::push(&mut self, ch: char)` currently has a single code path that calls `Char::encode_utf8`. This adds a fast path for ASCII `char`s, which are represented as a single byte in UTF-8.

Benchmarks of stage1 libcollections at the intermediate commit show that the fast path very significantly improves the performance of repeatedly pushing an ASCII `char`, but does not significantly affect the performance for a non-ASCII `char` (where the fast path is not taken).

```
bench_push_char_one_byte                  59552 ns/iter (+/- 2132) = 167 MB/s
bench_push_char_one_byte_with_fast_path    6563 ns/iter (+/- 658) = 1523 MB/s
bench_push_char_two_bytes                 71520 ns/iter (+/- 3541) = 279 MB/s
bench_push_char_two_bytes_with_slow_path  71452 ns/iter (+/- 4202) = 279 MB/s
bench_push_str_one_byte                   38910 ns/iter (+/- 2477) = 257 MB/s
```

A benchmark of pushing a one-byte-long `&str` is added for comparison, but its performance [has varied a lot lately](https://github.com/rust-lang/rust/pull/19640#issuecomment-67741561). (When the input is fixed, `s.push_str("x")` could be used just as well as `s.push('x')`.)
2014-12-21 09:27:37 -08:00
Alex Crichton
0191dce41d rollup merge of #20077: shepmaster/stdin-typo 2014-12-21 09:27:36 -08:00
Alex Crichton
1dc5e6312f rollup merge of #20070: aturon/stab-2-clone
This patch marks `clone` stable, as well as the `Clone` trait, but
leaves `clone_from` unstable. The latter will be decided by the beta.

The patch also marks most manual implementations of `Clone` as stable,
except where the APIs are otherwise deprecated or where there is
uncertainty about providing `Clone`.

r? @alexcrichton
2014-12-21 09:27:36 -08:00
Alex Crichton
6495c27ee6 rollup merge of #20069: jarod/bitflags
Although using hex literals is not wrong, but I think use binary literals will be better.(especially in examples)
2014-12-21 09:27:36 -08:00
Alex Crichton
b187ae55aa rollup merge of #20066: aturon/stab-2-cell
This patch finalizes stabilization for the `cell` module, settling on
the current names `Cell`, `RefCell`, `UnsafeCell`, `Ref` and `RefMut`.

While we had considered improving these names, no one was able to
produce a truly compelling alternative.

There is one substantive change here: the `get` method of `UnsafeSell`
is now marked `unsafe`. Merely getting a raw pointer to the contents is
not, by itself, an unsafe operation. (Consider that you can always
safely turn a reference into a raw pointer, and that raw pointer may
then be aliased by subsequent references.)

r? @alexcrichton
2014-12-21 09:27:36 -08:00
Alex Crichton
f6a7388210 rollup merge of #20062: aturon/stab-2-ints
This small patch stabilizes the names of all integer modules (including
`int` and `uint`) and the `MIN` and `MAX` constants. The `BITS` and
`BYTES` constants are left unstable for now.

r? @alexcrichton
2014-12-21 09:27:35 -08:00
Alex Crichton
e1d09766ad rollup merge of #20059: nick29581/self-impl
r? @sfackler

closes #20000
2014-12-21 09:27:35 -08:00
Alex Crichton
bc1d818b83 rollup merge of #20057: nick29581/array-syntax
This does NOT break any existing programs because the `[_, ..n]` syntax is also supported.

Part of #19999

r? @nikomatsakis
2014-12-21 09:27:35 -08:00
Alex Crichton
40d59e9467 rollup merge of #20052: barosl/deref-for-box
As the previous pull request (#19023) was closed due to inactivity, I steal the chance and open this pull request. 😊

Fixes #18624.
2014-12-21 09:27:35 -08:00
Alex Crichton
fb6ff04994 rollup merge of #20044: csouth3/vec-resize
This PR adds `resize()` to `Vec` in accordance with RFC 509.
2014-12-21 09:27:34 -08:00
Alex Crichton
eb47e1e446 rollup merge of #20039: barosl/if-let-friendly-error
Fixes #19991.
2014-12-21 09:27:34 -08:00
Alex Crichton
cfc815bef4 rollup merge of #20029: vhbit/ios-no-rt 2014-12-21 09:27:34 -08:00
Alex Crichton
a3dfaa62fe rollup merge of #20027: michaelwoerister/for-loop-var
Back when for-loop iteration variables were just de-sugared into `let` bindings, debuginfo for them was created like for any other `let` binding. When the implementation approach for for-loops changed, we ceased having debuginfo for the iteration variable. This PR fixes this omission and adds a more prominent test case for it.

Also contains some minor, general cleanup of the debuginfo module.

Fixes #19732
2014-12-21 09:27:34 -08:00
Alex Crichton
de7abcf6d3 rollup merge of #20014: kballard/unsized-marker-type-params
Tweak CovariantType, ContravariantType, and InvariantType to allow their
type parameter to be unsized.
2014-12-21 09:27:34 -08:00
Alex Crichton
fc40812b0f rollup merge of #20006: alexcrichton/no-more-empty-modules
This commit modifies rustdoc to not require these empty modules to be public in
the standard library. The modules still remain as a location to attach
documentation to, but the modules themselves are now private (don't have to
commit to an API). The documentation for the standard library now shows all of
the primitive types on the main index page.
2014-12-21 09:27:33 -08:00
Alex Crichton
4ae3107e72 rollup merge of #19996: th0114nd/boolean-inden
The current indentation level would indicate that Boolean literals are on the same level as Integer and Float literals under Number literals, unindenting moves it to the same scope as Character and string literals, Byte and byte string literals, and Number literals under Literals.
2014-12-21 09:27:33 -08:00
Alex Crichton
7e2ed4adc1 rollup merge of #19994: bluss/doc-ownership
Disambiguate maximally by using 'and' instead of '&' next to discussion
about references.

As a bonus, fix the spelling of the car too.
2014-12-21 09:27:33 -08:00
Alex Crichton
91b3232764 rollup merge of #19993: bluss/setalgebraitems
This removes the type SetAlgebraItems and replaces it with the
structs Intersection and Difference.

Rename the existing HashSet iterators according to RFC #344:

* SetItems -> Iter
* SetMoveItems -> IntoIter
* Remaining set combination iterators renamed to Union and SymmetricDifference
2014-12-21 09:27:31 -08:00
Alex Crichton
67ea1dc4bf rollup merge of #19989: th0114nd/quotes-around-as 2014-12-21 09:26:45 -08:00
Alex Crichton
583112269a rollup merge of #19980: erickt/cleanup-serialize
This brings over some changes from [rustc-serialize](https://github.com/rust-lang/rustc-serialize). It makes sense to keep the two in sync until we finally remove libserialize, just to make sure they don't diverge from each other.
2014-12-21 09:26:44 -08:00
Alex Crichton
ca521fb7a9 rollup merge of #19979: Munksgaard/19978
This fixes #19978. The bug was introduced by 570325d, where if the type
of an Fn has not been inferred (strs[0] is "_") we slice from 1 to 0.
2014-12-21 09:26:44 -08:00
Alex Crichton
1d34d93d11 rollup merge of #19977: pnkfelix/add-test-for-issue-19811
Add regression test for Issue 19811.

(Thanks for @emk for providing this.)

Fix #19811.
2014-12-21 09:26:44 -08:00
Alex Crichton
319ed81307 rollup merge of #19974: vhbit/json-unicode-literals 2014-12-21 09:26:44 -08:00
Alex Crichton
31800b38e6 rollup merge of #19973: vhbit/ios-no-copy 2014-12-21 09:26:43 -08:00
Alex Crichton
ee1bb3f25b rollup merge of #19969: aturon/inherit-trait-stab
There is currently no way to specify the stability level for a trait
impl produced by `deriving`. This patch is a stopgap solution that:

* Turns of stability inheritance for trait impls, and
* Uses the stability level of the *trait* if no level is directly
  specified.

That is, manual trait impls may still provide a directly stability
level, but `deriving` will use the level of the trait. While not a
perfect solution, it should be good enough for 1.0 API stabilization, as
we will like *remove* any unwanted impls outright.

r? @alexcrichton
2014-12-21 09:26:43 -08:00
Alex Crichton
b4f393ee8a rollup merge of #19967: apasel422/binary_heap
Just a few simplifications and a missing `assert!`.
2014-12-21 09:26:43 -08:00
Alex Crichton
8c030a87b3 rollup merge of #19966: steveklabnik/remove_l10n
@brson suggested that I remove this stuff in https://github.com/rust-lang/rust/pull/19897/files#r22014810, but it seems more appropriate to do separate from that.
2014-12-21 09:26:43 -08:00
Alex Crichton
9f4f6cf655 rollup merge of #19965: japaric/remove-wrong-add
TL;DR I wrongly implemented these two ops, namely `"prefix" + "suffix".to_string()` gives back `"suffixprefix"`. Let's remove them.

The correct implementation of these operations (`lhs.clone().push_str(rhs.as_slice())`) is really wasteful, because the lhs has to be cloned and the rhs gets moved/consumed just to be dropped (no buffer reuse). For this reason, I'd prefer to drop the implementation instead of fixing it. This leaves us with the fact that you'll be able to do `String + &str` but not `&str + String`, which may be unexpected.

r? @aturon
Closes #19952
2014-12-21 09:26:43 -08:00
Alex Crichton
e8722691ab rollup merge of #19961: alexcrichton/second-pass-result
This commit, like the second pass of `Option`, largely just stablizes the
existing functionality after renaming a few iterators.

The specific actions taken were:

* The `Ok` and `Err` variants were marked `#[stable]` as the stability
  inheritance was since removed.
* The `as_mut` method is now stable.
* The `map` method is now stable
* The `map_err` method is now stable
* The `iter`, `iter_mut`, and `into_iter` methods now returned structures named
  after the method of iteration. The methods are also now all stable.
* The `and_then` method is now stable.
* The `or_else` method is now stable.
* The `unwrap` family of functions are now all stable: `unwrap_or`,
  `unwrap_or_else`, `unwrap`, and `unwrap_err`.

There is a possible open extension to `Result::{and, and_then}` to make the
return type further generic over `FromError` (as proposed in #19078), but this
is a backwards compatible change due to the usage of default type parameters,
which makes the two functions safe to stabilize now regardless of the outcome of
that issue.
2014-12-21 09:26:42 -08:00
Alex Crichton
5acb622f5b rollup merge of #19957: tshepang/patch-1 2014-12-21 09:26:42 -08:00
Alex Crichton
c76590cb14 rollup merge of #19944: steveklabnik/doc_sync_arc
Take the docs from Rc<T>, apply them to Arc<T>, and fix some line lengths.
2014-12-21 09:26:42 -08:00
Alex Crichton
264088c1ee rollup merge of #19932: elszben/master
First attempt to contribute to rust (and using github). This commit adds a few examples to std::io::TempDir. The examples seem to look okay (in my browser) and make check also passes.
2014-12-21 09:26:42 -08:00
Alex Crichton
e654491960 rollup merge of #19926: eddyb/less-sty
r? @nikomatsakis
2014-12-21 09:26:42 -08:00
Alex Crichton
2af8155bee rollup merge of #19898: Aatch/issue-19684
#16081 fixed an issue where a nested return statement would cause incorrect behaviour due to the inner return writing over the return stack slot that had already been written too. However, the check was very broad and picked many cases that wouldn't ever be affected by this issue.

As a result, the number of allocas increased dramatically and therefore stack-size increased. LLVM is not able to remove all of the extraneous allocas. Any code that had multiple return values in a compound expression at the end of a function (including loops) would be hit by the issue.

The check now uses a control-flow graph to only consider the case when the inner return is executed conditionally. By itself, this narrowed definition causes #15763 to return, so the control-flow graph is also used to avoid passing the return slot as a destination when the result won't be used.

This change allows the stack-size of the main rustc task to be reduced to 8MB from 32MB.
2014-12-21 09:26:41 -08:00
Alex Crichton
25f8051f2e rollup merge of #19842: frewsxcv/rm-reexports
Remove most of the public reexports mentioned in #19253

These are all leftovers from the enum namespacing transition

In particular:

* src/libstd/num/strconv.rs
 * ExponentFormat
 * SignificantDigits
 * SignFormat
* src/libstd/path/windows.rs
 * PathPrefix
* src/libstd/sys/windows/timer.rs
 * Req
* src/libcollections/str.rs
 * MaybeOwned
* src/libstd/collections/hash/map.rs
 * Entry
* src/libstd/collections/hash/table.rs
 * BucketState
* src/libstd/dynamic_lib.rs
 * Rtld
* src/libstd/os.rs
 * MemoryMapKind
 * MapOption
 * MapError
* src/libstd/sys/common/net.rs
 * SocketStatus
 * InAddr
* src/libstd/sys/unix/timer.rs
 * Req

[breaking-change]
2014-12-21 09:26:41 -08:00
Alex Crichton
bc99ced570 rollup merge of #19838: shepmaster/invariant-lifetime-copy
Both ContravariantLifetime and CovariantLifetime are marked as Copy,
so it makes sense for InvariantLifetime to be as well.
2014-12-21 09:26:41 -08:00
Corey Farwell
98af642f5c Remove a ton of public reexports
Remove most of the public reexports mentioned in #19253

These are all leftovers from the enum namespacing transition

In particular:

* src/libstd/num/strconv.rs
 * ExponentFormat
 * SignificantDigits
 * SignFormat
* src/libstd/path/windows.rs
 * PathPrefix
* src/libstd/sys/windows/timer.rs
 * Req
* src/libcollections/str.rs
 * MaybeOwned
* src/libstd/collections/hash/map.rs
 * Entry
* src/libstd/collections/hash/table.rs
 * BucketState
* src/libstd/dynamic_lib.rs
 * Rtld
* src/libstd/io/net/ip.rs
 * IpAddr
* src/libstd/os.rs
 * MemoryMapKind
 * MapOption
 * MapError
* src/libstd/sys/common/net.rs
 * SocketStatus
 * InAddr
* src/libstd/sys/unix/timer.rs
 * Req

[breaking-change]
2014-12-21 09:26:41 -08:00
Alex Crichton
693cfab5a6 rollup merge of #19823: iKevinY/doc-fixes
I was reading through the Rust Guide (hopefully looking to learn some Rust), and I figured it would be a good idea to open a pull request with some of the errata I noticed along the way. Most of the changes are pretty mundane, but there are a couple that might raise a bit of discussion.

### Punctuation outside of 'key term' quotes

This is something that was inconsistent in the Guide. While the convention in American English is to place punctuation immediately following a quotation mark *inside* the quotation mark, it seems strange to do this with 'key terms', considering they are not a true quotation.

### Changed comment placement in 17.2 code block

This is what the code block in [17.2 — Ownership, borrowing, and lifetimes](http://doc.rust-lang.org/guide.html#ownership,-borrowing,-and-lifetimes) looks like in fullscreened Safari 8:

![screen shot 2014-12-13 at 2 48 47 pm](https://cloud.githubusercontent.com/assets/2434728/5425704/2fff3bf0-82d7-11e4-8c8f-d594acde8937.png)

Some of the comments extend *just* too far, causing them to bleed into the next line, so I moved a few of them above the relevant lines of code to avoid this.
2014-12-21 09:26:40 -08:00
Alex Crichton
86cb99dac1 rollup merge of #19727: lfairy/patch-1
Closes #19323.
2014-12-21 09:26:40 -08:00
Alex Crichton
ebf0e9698d rollup merge of #19651: Gankro/ptr-docs
r? @steveklabnik @thestinger
2014-12-21 09:26:40 -08:00
Florian Gilcher
ee9de3b102 Fully remove notrust markers from rustdoc
Internally refactor all mentions of `notrust` to the
positive statement `rust`.
2014-12-21 15:48:40 +01:00
bors
c141f223d4 auto merge of #19953 : sanxiyn/rust/privacy-span, r=alexcrichton
Fix #19062.
2014-12-21 13:22:48 +00:00
Tshepang Lekhonkhobe
7d55249c91 doc: add missing "by default"
That sentence made it look like there was no option for using 'mut'
2014-12-21 09:32:32 +02:00
bors
ce468e643a auto merge of #19946 : cgaebel/rust/hashmap-drain-iter, r=gankro
It is useful to move all the elements out of a hashmap without deallocating
the underlying buffer. It came up in IRC, and this patch implements it as
`drain`.

r? @Gankro
cc: @frankmcsherry
2014-12-21 07:22:45 +00:00
Barosl Lee
c9010bff6c Fix error message on invalid field names for a struct variant
Fixes #19922.
2014-12-21 10:20:54 +09:00
Jake Goulding
bffd802a3f Fix small typos in std::rand documentation 2014-12-20 17:13:13 -05:00
bors
cc19e3380b auto merge of #19903 : cgaebel/rust/ringbuf-as-slice, r=Gankro
See: https://github.com/rust-lang/rfcs/pull/509

Not sure if this is allowed to land before the RFC. Either way,
it's here for review.

r? @Gankro
cc: @bfops
2014-12-20 20:00:36 +00:00
Tom Jakubowski
fb9b45189e Visit + encode stability for foreign items
Fix #19649
2014-12-20 10:08:16 -08:00
Simon Sapin
e40a81b37b Merge String::push_with_ascii_fast_path into String::push. 2014-12-20 17:36:30 +00:00
Simon Sapin
cc33ce6fd0 Add String::push_with_ascii_fast_path, bench it against String::push
`String::push(&mut self, ch: char)` currently has a single code path
that calls `Char::encode_utf8`.
Perhaps it could be faster for ASCII `char`s, which are represented as
a single byte in UTF-8.

This commit leaves the method unchanged,
adds a copy of it with the fast path,
and adds benchmarks to compare them.

Results show that the fast path very significantly improves the performance
of repeatedly pushing an ASCII `char`,
but does not significantly affect the performance for a non-ASCII `char`
(where the fast path is not taken).

Output of `make check-stage1-collections NO_REBUILD=1 PLEASE_BENCH=1 TESTNAME=string::tests::bench_push`

```
test string::tests::bench_push_char_one_byte                 ... bench:     59552 ns/iter (+/- 2132) = 167 MB/s
test string::tests::bench_push_char_one_byte_with_fast_path  ... bench:      6563 ns/iter (+/- 658) = 1523 MB/s
test string::tests::bench_push_char_two_bytes                ... bench:     71520 ns/iter (+/- 3541) = 279 MB/s
test string::tests::bench_push_char_two_bytes_with_slow_path ... bench:     71452 ns/iter (+/- 4202) = 279 MB/s
test string::tests::bench_push_str                           ... bench:        24 ns/iter (+/- 2)
test string::tests::bench_push_str_one_byte                  ... bench:     38910 ns/iter (+/- 2477) = 257 MB/s
```

A benchmark of pushing a one-byte-long `&str` is added for comparison,
but its performance [has varied a lot lately](
https://github.com/rust-lang/rust/pull/19640#issuecomment-67741561).
(When the input is fixed, `s.push_str("x")` could be used
instead of `s.push('x')`.)
2014-12-20 17:35:59 +00:00
Tom Jakubowski
44f6f52578 metadata: Encode attrs for foreign items.
Related to #19649 and #16289
2014-12-20 09:32:28 -08:00
bors
8a33de89c4 auto merge of #20073 : nikomatsakis/rust/generalized-where-clause-parser, r=nikomatsakis
This is the same branch as #20002 but with the pretty-printing test fixed.
2014-12-20 16:12:37 +00:00
Jake Goulding
b4a065a3a0 Correct typo in doc for StdinReaderGuard 2014-12-20 11:08:51 -05:00
Tobias Bucher
24329d7293 Change Extend and FromIterator functionality of BitvSet
Also fix up some tests from last commit.
2014-12-20 09:10:06 -05:00
Tobias Bucher
e84a383307 Add a new invariant to Bitv
The length of the underlying vector must now be exactly as long as it needs to
be.
2014-12-20 09:10:05 -05:00
Josh Stone
3deb97f5d0 bitv: Fix all() for nbits that are multiples of u32::BITS
The old logic would be ok with *either* 0 or all 1s in the last word,
because it didn't compute a proper mask for the case where nbits is an
exact multiple of u32::BITS.

Add mask_for_bits() to compute this properly, and use it in all().  Add
all/none assertions to most of the tests.  Note in particular, the all-zero
bitv in test_32_elements() was incorrectly all()==true before this patch.
2014-12-20 09:10:04 -05:00
Josh Stone
8f194de95d bitv: correct build failures
- Fix typos on Blocks and MutBlocks.
- Use slice_to_mut() for creating blocks_mut().
- Deref the block parameter in get().
- Access nbits separately from mutating set in pop().
2014-12-20 09:10:03 -05:00
Alexis Beingessner
9c5101542d Conventions and cleanup for Bitv and BitvSet
Part of #18424

This commit changes the semantics of `reserve` and `capacity` for Bitv and BitvSet to match conventions. It also introduces the notion of `reserve_index` and `reserve_index_exact` for collections with maximum-index-based capacity semantics.

Deprecates free function constructors in favour of functions on Bitv itself.

Changes `Bitv::pop` to return an Option rather than panicking.

Deprecates and renames several methods in favour of conventions.

Marks several blessed methods as unstable.

This commit also substantially refactors Bitv and BitvSet's implementations. The new implementation is simpler, cleaner, better documented, and more robust against overflows. It also reduces coupling between Bitv and BitvSet. Tests have been seperated into seperate submodules.

Fixes #16958

[breaking-change]
2014-12-20 09:10:02 -05:00
bors
f8f2c7a953 auto merge of #19900 : alexcrichton/rust/compiler-flags, r=cmr
This commit shuffles around some CLI flags of the compiler to some more stable
locations with some renamings. The changes made were:

* The `-v` flag has been repurposes as the "verbose" flag. The version flag has
  been renamed to `-V`.
* The `-h` screen has been split into two parts. Most top-level options (not
  all) show with `-h`, and the remaining options (generally obscure) can be
  shown with `--help -v` which is a "verbose help screen"
* The `-V` flag (version flag now) has lost its argument as it is now requested
  with `rustc -vV` "verbose version".
* The `--emit` option has had its `ir` and `bc` variants renamed to `llvm-ir`
  and `llvm-bc` to emphasize that they are LLVM's IR/bytecode.
* The `--emit` option has grown a new variant, `dep-info`, which subsumes the
  `--dep-info` CLI argument. The `--dep-info` flag is now deprecated.
* The `--parse-only`, `--no-trans`, `--no-analysis`, and `--pretty` flags have
  moved behind the `-Z` family of flags.
* The `--debuginfo` and `--opt-level` flags were moved behind the top-level `-C`
  flag.
* The `--print-file-name` and `--print-crate-name` flags were moved behind one
  global `--print` flag which now accepts one of `crate-name`, `file-names`, or
  `sysroot`. This global `--print` flag is intended to serve as a mechanism for
  learning various metadata about the compiler itself.
* The top-level `--pretty` flag was moved to a number of `-Z` options.

No warnings are currently enabled to allow tools like Cargo to have time to
migrate to the new flags before spraying warnings to all users.

cc https://github.com/rust-lang/rust/issues/19051
2014-12-20 13:52:27 +00:00
Niko Matsakis
acd31db229 patch up pretty-printing test 2014-12-20 08:41:33 -05:00
Jared Roesch
d87b308b67 Add support for multiple region bounds in where clauses 2014-12-20 03:54:39 -08:00
Jared Roesch
e0cac488ac Add parser support for generalized where clauses
Implement support in the parser for generalized where clauses,
as well as the conversion of ast::WherePredicates to
ty::Predicate in `collect.rs`.
2014-12-20 02:48:17 -08:00
Aaron Turon
92ccc073e1 Stabilize clone
This patch marks `clone` stable, as well as the `Clone` trait, but
leaves `clone_from` unstable. The latter will be decided by the beta.

The patch also marks most manual implementations of `Clone` as stable,
except where the APIs are otherwise deprecated or where there is
uncertainty about providing `Clone`.
2014-12-20 00:37:44 -08:00
Sean McArthur
84b8f318a5 add {:?} fmt syntax 2014-12-20 00:32:07 -08:00
Nick Cameron
31f5ab3f0c Allow Self in impls. 2014-12-20 21:11:36 +13:00
bors
8f51ad2420 auto merge of #19511 : eddyb/rust/no-shadow, r=alexcrichton
r? @erickt
2014-12-20 08:10:23 +00:00
Jarod Liu
a7f1ce37bf use binary literals to better reflect "bitflags" 2014-12-20 16:07:03 +08:00
Aaron Turon
e473e700cc Stabilize cell
This patch finalizes stabilization for the `cell` module, settling on
the current names `Cell`, `RefCell`, `UnsafeCell`, `Ref` and `RefMut`.

While we had considered improving these names, no one was able to
produce a truly compelling alternative.

There is one substantive change here: the `get` method of `UnsafeSell`
is now marked `unsafe`. Merely getting a raw pointer to the contents is
not, by itself, an unsafe operation. (Consider that you can always
safely turn a reference into a raw pointer, and that raw pointer may
then be aliased by subsequent references.)
2014-12-19 23:47:46 -08:00
Aaron Turon
89f75a6e81 Stabilize integer modules
This small patch stabilizes the names of all integer modules (including
`int` and `uint`) and the `MIN` and `MAX` constants. The `BITS` and
`BYTES` constants are left unstable for now.
2014-12-19 22:28:12 -08:00
Eduard Burtescu
b45d30da34 Fix fallout of removing import_shadowing in tests. 2014-12-20 07:49:37 +02:00
Eduard Burtescu
f95e0c21aa Fix more import_shadowing fallout in collections. 2014-12-20 07:49:37 +02:00
Eduard Burtescu
5193d542f6 Fix the fallout of removing feature(import_shadowing). 2014-12-20 07:49:37 +02:00
Eduard Burtescu
948cc666de rustc_resolve: move export recording into its own module. 2014-12-20 07:28:47 +02:00
Eduard Burtescu
1614d92f51 rustc_resolve: move unused import checking into its own module. 2014-12-20 07:28:47 +02:00
Eduard Burtescu
c54fc980f3 Split resolve from rustc::middle into rustc_resolve. 2014-12-20 07:28:47 +02:00
Eduard Burtescu
a74a050c44 rustc: middle: move some types from resolve to privacy. 2014-12-20 07:28:47 +02:00
Eduard Burtescu
5d1257a760 rustc: middle: move TraitItemKind from resolve to def. 2014-12-20 07:28:46 +02:00
Eduard Burtescu
d9504d4a47 rustc: middle: move Export and ExportMap from resolve to def. 2014-12-20 07:28:46 +02:00
Eduard Burtescu
10a862d4f4 rustc: middle: use cheaper Name in resolve::Export instead of String. 2014-12-20 07:25:42 +02:00
Eduard Burtescu
f0276072a3 rustc: middle: move TraitMap from resolve to ty. 2014-12-20 07:25:41 +02:00
Eduard Burtescu
d8f57c3804 rustc: middle: move DefMap from resolve to def. 2014-12-20 07:25:37 +02:00
Eduard Burtescu
fb1d6f24fc middle: resolve: fix inconsistencies around ExportMap and remove the 2 suffix. 2014-12-20 07:11:03 +02:00
Eduard Burtescu
533822207f rustc: don't allow(non_camel_case_types) in resolve. 2014-12-20 07:11:03 +02:00
Eduard Burtescu
e0d44386d3 rustc: use Ty instead of passing ty::sty around. 2014-12-20 07:04:42 +02:00
Eduard Burtescu
d5267d5845 Remove feature(import_shadowing) from all crates. 2014-12-20 06:37:14 +02:00
Nick Cameron
2e86929a4a Allow use of [_ ; n] syntax for fixed length and repeating arrays.
This does NOT break any existing programs because the `[_, ..n]` syntax is also supported.
2014-12-20 15:23:29 +13:00
bors
1c2df5cc3c auto merge of #19640 : aliblong/rust/power_of_two_reform, r=Gankro
The `is_power_of_two()` method of the `UnsignedInt` trait currently returns `true` for `self == 0`. Zero is not a power of two, assuming an integral exponent `k >= 0`. I've therefore moved this functionality to the new method `is_power_of_two_or_zero()` and reformed `is_power_of_two()` to return false for `self == 0`.

To illustrate the usefulness of the existence of both functions, consider `HashMap`. Its capacity must be zero or a power of two; conversely, it also requires a (non-zero) power of two for key and val alignment.

Also, added a small amount of documentation regarding #18604.
2014-12-20 01:12:19 +00:00
Barosl Lee
314ed2df09 Drop the Match prefix from the MatchSource variants 2014-12-20 09:17:14 +09:00
Barosl Lee
7023bea22c Print a friendly error for the if-let construct without an else block
Fixes #19991.
2014-12-20 09:17:14 +09:00
Barosl Lee
39f249067a Implement Deref for Box
Fixes #18624.
2014-12-20 08:58:33 +09:00
Aaron Liblong
f6328b60da Reform power_of_two methods for perf increase & semantic change to consider 0 not a power of 2.
Vec panics when attempting to reserve capacity > int::MAX (uint::MAX / 2).
2014-12-19 18:21:24 -05:00
Alex Crichton
a71686f4ea std: Second pass stabilization of Result<T, E>
This commit, like the second pass of `Option`, largely just stablizes the
existing functionality after renaming a few iterators.

The specific actions taken were:

* The `Ok` and `Err` variants were marked `#[stable]` as the stability
  inheritance was since removed.
* The `as_mut` method is now stable.
* The `map` method is now stable
* The `map_err` method is now stable
* The `iter`, `iter_mut`, and `into_iter` methods now returned structures named
  after the method of iteration. The methods are also now all stable.
* The `and_then` method is now stable.
* The `or_else` method is now stable.
* The `unwrap` family of functions are now all stable: `unwrap_or`,
  `unwrap_or_else`, `unwrap`, and `unwrap_err`.

There is a possible open extension to `Result::{and, and_then}` to make the
return type further generic over `FromError` (as proposed in #19078), but this
is a backwards compatible change due to the usage of default type parameters,
which makes the two functions safe to stabilize now regardless of the outcome of
that issue.
2014-12-19 13:42:55 -08:00
Michael Neumann
4c3a8f17cc load_self() needs to be public 2014-12-19 22:19:37 +01:00
Chase Southwood
d61db0c696 Implement resize for Vec
This commit adds `resize` to `Vec` in accordance with RFC 509.
2014-12-19 15:04:36 -06:00
bluss
cf350ea5eb hashset: Clean up and rename the HashSet iterators
This removes the type SetAlgebraItems and replaces it with the
structs Intersection and Difference.

Rename the existing HashSet iterators according to RFC #344:

* SetItems -> Iter
* SetMoveItems -> IntoIter
* Remaining set combination iterators renamed to Union and SymmetricDifference

[breaking-change]
2014-12-19 21:54:50 +01:00
bors
cbe9fb45bc auto merge of #19463 : kali/rust/master, r=alexcrichton
parse_ty() no longer takes a boolean parameter. quote_ty! implementation has not yet been modified accordingly. 

As a matter of fact, quote_ty! was not covered by tests. One test (called qquotes) references it, but it has been ignored for nearly one year and now need heavy refactoring.

quote_token.rs seemed like a good place to test quote_ty!, many other quote_*! macros were asserted there.
2014-12-19 20:22:17 +00:00
Barosl Lee
d9f306757d Detect type inference failure when auto-dereferencing a pointer
check::autoderef() returns a ty_err when it fails to infer the type.
probe::probe() should respect this failure and fail together to prevent
further corruption.

Call stack: check::check_method_call() -> method::lookup() ->
            probe::probe() + confirm::confirm()

Fixes #19692.
Fixes #19583.
Fixes #19297.
2014-12-20 04:54:43 +09:00
Alex Crichton
117984b884 rustc: Start "stabilizing" some flags
This commit shuffles around some CLI flags of the compiler to some more stable
locations with some renamings. The changes made were:

* The `-v` flag has been repurposes as the "verbose" flag. The version flag has
  been renamed to `-V`.
* The `-h` screen has been split into two parts. Most top-level options (not
  all) show with `-h`, and the remaining options (generally obscure) can be
  shown with `--help -v` which is a "verbose help screen"
* The `-V` flag (version flag now) has lost its argument as it is now requested
  with `rustc -vV` "verbose version".
* The `--emit` option has had its `ir` and `bc` variants renamed to `llvm-ir`
  and `llvm-bc` to emphasize that they are LLVM's IR/bytecode.
* The `--emit` option has grown a new variant, `dep-info`, which subsumes the
  `--dep-info` CLI argument. The `--dep-info` flag is now deprecated.
* The `--parse-only`, `--no-trans`, and `--no-analysis` flags have
  moved behind the `-Z` family of flags.
* The `--debuginfo` and `--opt-level` flags were moved behind the top-level `-C`
  flag.
* The `--print-file-name` and `--print-crate-name` flags were moved behind one
  global `--print` flag which now accepts one of `crate-name`, `file-names`, or
  `sysroot`. This global `--print` flag is intended to serve as a mechanism for
  learning various metadata about the compiler itself.

No warnings are currently enabled to allow tools like Cargo to have time to
migrate to the new flags before spraying warnings to all users.
2014-12-19 11:38:24 -08:00
Kevin Yap
1919de87bb Miscellaneous changes to Rust Guide
- Various grammatical changes
- Place punctuation outside of key term quotes
- Change comment placement in 17.2 code block
- Replace double hyphens with en dashes
2014-12-19 10:23:06 -08:00
Alex Crichton
84086c464f Register new snapshots
This does not yet start the movement to rustc-serialize. That detail is left to
a future PR.
2014-12-19 08:58:10 -08:00
Jorge Aparicio
f975b10310 windows: remove unused import 2014-12-19 10:51:01 -05:00
Jorge Aparicio
4c6e76b7c8 libtime: use #[deriving(Copy)] 2014-12-19 10:51:01 -05:00
Jorge Aparicio
ce92437769 libtest: use #[deriving(Copy)] 2014-12-19 10:51:01 -05:00
Jorge Aparicio
64234b3541 libterm: use #[deriving(Copy)] 2014-12-19 10:51:01 -05:00
Jorge Aparicio
86f8c127dd libsyntax: use #[deriving(Copy)] 2014-12-19 10:51:00 -05:00
Jorge Aparicio
a77e8a63d5 libstd: use #[deriving(Copy)] 2014-12-19 10:51:00 -05:00
Jorge Aparicio
2df30a47e2 libserialize: use #[deriving(Copy)] 2014-12-19 10:51:00 -05:00
Jorge Aparicio
1d25271e05 librustrt: use #[deriving(Copy)] 2014-12-19 10:51:00 -05:00
Jorge Aparicio
4c007568bf librustdoc: use #[deriving(Copy)] 2014-12-19 10:51:00 -05:00
Jorge Aparicio
fa0383f38d librustc_typeck: use #[deriving(Copy)] 2014-12-19 10:51:00 -05:00
Jorge Aparicio
5e2bca9e86 librustc_trans: use #[deriving(Copy)] 2014-12-19 10:51:00 -05:00
Jorge Aparicio
463475b7fa librustc_llvm: use #[deriving(Copy)] 2014-12-19 10:51:00 -05:00
Jorge Aparicio
db45be2616 librustc_driver: use #[deriving(Copy)] 2014-12-19 10:51:00 -05:00
Jorge Aparicio
392ea799b8 librustc_borrowck: use #[deriving(Copy)] 2014-12-19 10:51:00 -05:00
Jorge Aparicio
e64a0072d6 librustc: use #[deriving(Copy)] 2014-12-19 10:51:00 -05:00
Jorge Aparicio
f2ef2cda52 libregex: use #[deriving(Copy)] 2014-12-19 10:43:24 -05:00
Jorge Aparicio
fd4a5d9ef1 librbml: use #[deriving(Copy)] 2014-12-19 10:43:24 -05:00
Jorge Aparicio
a18d090c3c librand: use #[deriving(Copy)] 2014-12-19 10:43:24 -05:00
Jorge Aparicio
e0a88a78da liblog: use #[deriving(Copy)] 2014-12-19 10:43:24 -05:00
Jorge Aparicio
c407785ac0 libgetopts: use #[deriving(Copy)] 2014-12-19 10:43:24 -05:00
Jorge Aparicio
4c62c76ef9 libfmt_macros: use #[deriving(Copy)] 2014-12-19 10:43:24 -05:00
Jorge Aparicio
30cefcbdfd libcore: use #[deriving(Copy)] 2014-12-19 10:43:23 -05:00
Jorge Aparicio
c32a48293a libcollections: use #[deriving(Copy)] 2014-12-19 10:43:23 -05:00
Clark Gaebel
525f65ebbf Add RingBuf::as_slices as per collections reform v2.
See: https://github.com/rust-lang/rfcs/pull/509

Not sure if this is allowed to land before the RFC. Either way,
it's here for review.

r? @Gankro
cc: @bfops
2014-12-19 09:41:30 -05:00
Valerii Hiora
e5d8c85507 iOS: fallout of runtime removal 2014-12-19 16:34:01 +02:00
Mathieu Poumeyrol
8920181052 ack parser.parse_ty change in quote_ty! (+ test) 2014-12-19 15:25:02 +01:00
Michael Woerister
87c5927b79 debuginfo: Add test case for destructured for-loop variable. 2014-12-19 14:46:42 +01:00
bors
bd90b936d7 auto merge of #19884 : nikomatsakis/rust/issue-19730-perfect-forwarding, r=pnkfelix
Rewrite how the HRTB algorithm matches impls against obligations. Instead of impls providing higher-ranked trait-references, impls now once again only have early-bound regions. The skolemization checks are thus moved out into trait matching itself. This allows to implement "perfect forwarding" impls like those described in #19730. This PR builds on a previous PR that was already reviewed by @pnkfelix.

r? @pnkfelix 

Fixes #19730
2014-12-19 13:22:10 +00:00
Michael Neumann
25c1bfe175 Several fixes for DragonFly (rebase) 2014-12-19 13:05:06 +01:00
Michael Woerister
34a6fcf195 debuginfo: Clean the debuginfo module up a bit. 2014-12-19 12:07:17 +01:00
Philip Munksgaard
3bb91aa28f Add a check for uninferred type parameter
This fixes #19978. The bug was introduced by 570325d, where if the type
of an Fn has not been inferred (strs[0] is "_") we slice from 1 to
0. We now explicitly check if `strs[0]` is a single element tuple.
2014-12-19 11:06:38 +01:00
Kevin Ballard
14a5992ef6 Allow marker types to have unsized parameters
Tweak CovariantType, ContravariantType, and InvariantType to allow their
type parameter to be unsized.
2014-12-19 01:12:57 -08:00
Michael Woerister
b048114718 debuginfo: Create debuginfo for for-loop variables again. 2014-12-19 09:48:28 +01:00
Niko Matsakis
ebf1e4f23a Three random test cases that seem to produce more errors now. I've
not dug deeply into what is going on here, although the errors ARE
somewhat surprising.
2014-12-19 03:29:59 -05:00
Niko Matsakis
a04ce71172 Modify the Bytes type so that it remains cloneable even
though it includes a `fn()`. This is really a more general
problem but I wanted to ensures that `bytes` in particular
remains working due to #12677.
2014-12-19 03:29:59 -05:00
Niko Matsakis
89922e52b0 Correct comment on Binder. 2014-12-19 03:29:59 -05:00
Niko Matsakis
1085012cd2 Kill some warnings about shadowed lifetimes 2014-12-19 03:29:59 -05:00
Niko Matsakis
d4f8a5abc5 Work around #19982 by rewriting test impls to not use anonymous
lifetimes. This currently causes an ICE; it should (ideally) work, but
failing that at least give a structured error. For the purposes of
this PR, though, workaround is fine.
2014-12-19 03:29:59 -05:00
Niko Matsakis
aa20e2ff36 Document new algorithm at a high-level. 2014-12-19 03:29:31 -05:00
Niko Matsakis
0b88c5d392 Remove text on method matching, which is now out of date. 2014-12-19 03:29:31 -05:00
Niko Matsakis
dab6e70e03 Convert gigantic comment away from //! form. It is annoying to
read (`//!` is intrusive) and annoying to edit (must maintain a prefix
on every line). Since the only purpose of a `doc.rs` file is to have a
bunch of text, using `/*!` and `*/` without indentations seems
appropriate.
2014-12-19 03:29:31 -05:00
Niko Matsakis
f45c0ef51e Implement "perfect forwarding" for HR impls (#19730). 2014-12-19 03:29:31 -05:00
Niko Matsakis
c2ca1a4b62 Make all predicates higher-ranked, not just trait references. 2014-12-19 03:29:30 -05:00
Niko Matsakis
4f34524fcb Move leak_check into its own method, and ensure that all higher-ranked code is in
`higher_ranked.rs`.
2014-12-19 03:29:30 -05:00
Niko Matsakis
1205fd88df Centralize on using Binder to introduce new binding levels, rather than having FnSig carry an implicit binding level. This means that we be more typesafe in general, since things that instantiate bound regions can drop the Binder to reflect that. 2014-12-19 03:29:30 -05:00
Niko Matsakis
ed4952ef39 Add (currently unused) helper routine for skolemizing bound regions. 2014-12-19 03:29:30 -05:00
Niko Matsakis
416e62924e Rename the code that replaces unbound variables to "freshen" rather than "skolemize" -- strictly speaking, this is not skolemization, because it is not discharging quantifiers. Also, the trait selection code will still be doing true skolemization, so it would be a confusing overlap of names. 2014-12-19 03:29:30 -05:00
Niko Matsakis
3cf0fbeee9 Create distinct types for a PolyTraitRef (with bindings) and a normal TraitRef. 2014-12-19 03:29:30 -05:00