Commit graph

3383 commits

Author SHA1 Message Date
bors
39d7402666 auto merge of #20190 : cmr/rust/gate-macro-args, r=alexcrichton
Uses the same approach as https://github.com/rust-lang/rust/pull/17286 (and
subsequent changes making it more correct), where the visitor will skip any
pieces of the AST that are from "foreign code", where the spans don't line up,
indicating that that piece of code is due to a macro expansion.

If this breaks your code, read the error message to determine which feature
gate you should add to your crate.

Closes #18102

[breaking-change]
2015-01-01 15:51:08 +00:00
Corey Richardson
41da99dff4 Feature gate macro arguments
Uses the same approach as https://github.com/rust-lang/rust/pull/17286 (and
subsequent changes making it more correct), where the visitor will skip any
pieces of the AST that are from "foreign code", where the spans don't line up,
indicating that that piece of code is due to a macro expansion.

If this breaks your code, read the error message to determine which feature
gate you should add to your crate, and bask in the knowledge that your code
won't mysteriously break should you try to use the 1.0 release.

Closes #18102

[breaking-change]
2015-01-01 07:06:46 -05:00
bors
7d4f4876d6 auto merge of #20374 : nikomatsakis/rust/assoc-types, r=nikomatsakis
These mostly derive from problems that @japaric encountered.

r? @pcwalton
2015-01-01 01:20:56 +00:00
Niko Matsakis
9675488ef9 Add tests for two random issues that seem to be fixed on this branch.
Fixes #20346.
Fixes #20371.
2014-12-31 12:52:16 -05:00
Niko Matsakis
6cb425d964 Rework normalization so that it works recursively, since the types extracted from an impl are potentially in need of normalization. This also lays groundwork for further cleanup in other areas by disconnecting normalization from the fulfillment context. 2014-12-31 12:50:30 -05:00
Alex Crichton
582cba183f Test fixes and rebase conflicts 2014-12-31 08:33:13 -08:00
Simonas Kazlauskas
f1b64017d0 Feature gate FFI imports of LLVM intrinsics
Fixes #20313
2014-12-31 15:58:36 +02:00
Alex Crichton
67d13883f8 rollup merge of #20061: aturon/stab-2-vec-slice
Conflicts:
	src/libcollections/slice.rs
	src/libcollections/vec.rs
	src/libstd/sys/windows/os.rs
2014-12-30 18:51:51 -08:00
Aaron Turon
6abfac083f Fallout from stabilization 2014-12-30 17:06:08 -08:00
Alex Crichton
d058520f06 rollup merge of #20325: nick29581/obj-safety-static
Closes #19949 and rust-lang/rfcs#428

[breaking change]

If you have traits used with objects with static methods, you'll need to move
the static methods to a different trait.

r? @cmr
2014-12-30 16:26:11 -08:00
Niko Matsakis
e186accbc4 Fix rebase conflicts 2014-12-30 12:09:21 -05:00
Niko Matsakis
de8e0ae22c Remove the AssocSpace 2014-12-30 09:36:23 -05:00
Niko Matsakis
c1bc150bc4 Correct licenses. 2014-12-30 09:36:23 -05:00
Niko Matsakis
05eb2eeb61 Adjust tests for inferenceGet more conservative about inference for now. Seems better to err on the side of being more correct rather than less. Fix a bug in typing index expressions that was exposed as a result, and add one type annotation that is not required. Delete some random tests that were relying on old behavior and don't seem to add anything anymore. 2014-12-30 09:36:23 -05:00
Niko Matsakis
7836c72eba Patch tests and create new tests related to projection from a HRTB. 2014-12-30 09:36:22 -05:00
Niko Matsakis
964a5fabb7 Update error messages in various compile-fail tests 2014-12-30 09:36:22 -05:00
Niko Matsakis
b7c6e317b0 Make projected types select out of the trait bounds. 2014-12-30 09:36:22 -05:00
Niko Matsakis
4404592f36 Implement associated type projection and normalization. 2014-12-30 09:36:21 -05:00
Niko Matsakis
c5edd22646 Rewrite the intrinsicck to take the parameter environment into account. Also fixes #20116. 2014-12-30 09:32:42 -05:00
Alex Crichton
470ae101d6 Test fixes and rebase conflicts 2014-12-29 23:55:49 -08:00
Nick Cameron
69716ef607 Tests 2014-12-30 19:06:18 +13:00
Alex Crichton
806cb35f4d rollup merge of #20289: nick29581/shadowing
r? eddyb
2014-12-29 16:36:49 -08:00
Alex Crichton
9cbbfee8a4 rollup merge of #20264: nagisa/threadrng
Since runtime is removed, rust has no tasks anymore and everything is moving
from being task-* to thread-*. Let’s rename TaskRng as well!

This is a breaking change. If a breaking change for consistency is not desired, feel free to close.
2014-12-29 16:36:29 -08:00
Alex Crichton
3385ff7757 rollup merge of #20263: crhino/lifetime-elision-help
Fixes #19707.

In terms of output, it currently uses the form `argument #1`, `argument #2`, etc. If anyone has any better suggestions I would be glad to consider them.
2014-12-29 16:36:27 -08:00
Alex Crichton
4dacf2780f rollup merge of #20242: sanxiyn/break-from-fn
Fix #19331.
2014-12-29 16:36:15 -08:00
Alex Crichton
62c9a48953 rollup merge of #20165: tamird/needstest-tests
@alexcrichton @jakub-
2014-12-29 16:35:54 -08:00
Nick Cameron
3bf405682d Fallout from mut slices 2014-12-30 13:06:25 +13:00
Alex Crichton
bc83a009f6 std: Second pass stabilization for comm
This commit is a second pass stabilization for the `std::comm` module,
performing the following actions:

* The entire `std::comm` module was moved under `std::sync::mpsc`. This movement
  reflects that channels are just yet another synchronization primitive, and
  they don't necessarily deserve a special place outside of the other
  concurrency primitives that the standard library offers.
* The `send` and `recv` methods have all been removed.
* The `send_opt` and `recv_opt` methods have been renamed to `send` and `recv`.
  This means that all send/receive operations return a `Result` now indicating
  whether the operation was successful or not.
* The error type of `send` is now a `SendError` to implement a custom error
  message and allow for `unwrap()`. The error type contains an `into_inner`
  method to extract the value.
* The error type of `recv` is now `RecvError` for the same reasons as `send`.
* The `TryRecvError` and `TrySendError` types have had public reexports removed
  of their variants and the variant names have been tweaked with enum
  namespacing rules.
* The `Messages` iterator is renamed to `Iter`

This functionality is now all `#[stable]`:

* `Sender`
* `SyncSender`
* `Receiver`
* `std::sync::mpsc`
* `channel`
* `sync_channel`
* `Iter`
* `Sender::send`
* `Sender::clone`
* `SyncSender::send`
* `SyncSender::try_send`
* `SyncSender::clone`
* `Receiver::recv`
* `Receiver::try_recv`
* `Receiver::iter`
* `SendError`
* `RecvError`
* `TrySendError::{mod, Full, Disconnected}`
* `TryRecvError::{mod, Empty, Disconnected}`
* `SendError::into_inner`
* `TrySendError::into_inner`

This is a breaking change due to the modification of where this module is
located, as well as the changing of the semantics of `send` and `recv`. Most
programs just need to rename imports of `std::comm` to `std::sync::mpsc` and
add calls to `unwrap` after a send or a receive operation.

[breaking-change]
2014-12-29 12:16:49 -08:00
Alex Crichton
c32d03f417 std: Stabilize the prelude module
This commit is an implementation of [RFC 503][rfc] which is a stabilization
story for the prelude. Most of the RFC was directly applied, removing reexports.
Some reexports are kept around, however:

* `range` remains until range syntax has landed to reduce churn.
* `Path` and `GenericPath` remain until path reform lands. This is done to
  prevent many imports of `GenericPath` which will soon be removed.
* All `io` traits remain until I/O reform lands so imports can be rewritten all
  at once to `std::io::prelude::*`.

This is a breaking change because many prelude reexports have been removed, and
the RFC can be consulted for the exact list of removed reexports, as well as to
find the locations of where to import them.

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0503-prelude-stabilization.md
[breaking-change]

Closes #20068
2014-12-29 08:58:21 -08:00
Nick Cameron
9dce83ccd9 Tests 2014-12-29 19:10:08 +13:00
crhino
ba177596d3 Make lifetime elision help more useful on type signatures.
Fixes #19707.
2014-12-28 16:26:00 -08:00
Tamir Duberstein
252423f8b7 Regression test for #17740
Closes #17740.
2014-12-28 09:43:57 -08:00
Tamir Duberstein
2d100212a9 Regression test for #17728
Closes #17728.
2014-12-28 09:43:57 -08:00
Tamir Duberstein
01cdf00c2f Regression test for #16538
Closes #16538.
2014-12-28 09:43:54 -08:00
Tamir Duberstein
d1438f50cf Regression test for #15034
Closes #15034.
2014-12-28 09:22:54 -08:00
Tamir Duberstein
b745a4f944 Regression test for #14227
Closes #14227.
2014-12-28 09:22:54 -08:00
Tamir Duberstein
1fd491c3b4 Regression test for #14386
Closes #14386.
2014-12-28 09:22:53 -08:00
Tamir Duberstein
9cd7864147 Regression tests for #13853
Closes #13853, #14889.
2014-12-28 09:22:53 -08:00
Tamir Duberstein
ee6b97d5af Regression test for simple case of #9197 2014-12-28 09:22:52 -08:00
Tamir Duberstein
5e9a2ab846 Update test for #5543
Closes #5543.
2014-12-28 09:22:52 -08:00
Simonas Kazlauskas
1e89bbcb67 Rename TaskRng to ThreadRng
Since runtime is removed, rust has no tasks anymore and everything is moving
from being task-* to thread-*. Let’s rename TaskRng as well!

* Rename TaskRng to ThreadRng
* Rename task_rng to thread_rng

[breaking-change]
2014-12-28 13:46:35 +02:00
Eduard Burtescu
647e54d6d1 Fallout of changing format_args!(f, args) to f(format_args!(args)). 2014-12-27 23:57:43 +02:00
bors
0201334439 auto merge of #20244 : japaric/rust/bc-no-move, r=nikomatsakis
closes #19141
closes #20193
closes #20228

---

Currently whenever we encounter `let f = || {/* */}`, we *always* type check the RHS as a *boxed* closure. This is wrong when the RHS is `move || {/* */}` (because boxed closures can't capture by value) and generates all sort of badness during trans (see issues above). What we *should* do is always type check `move || {/* */}` as an *unboxed* closure, but ~~I *think* (haven't tried)~~ (2) this is not feasible right now because we have a limited form of kind (`Fn` vs `FnMut` vs `FnOnce`) inference that only works when there is an expected type (1).

In this PR, I've chosen to generate a type error whenever `let f = move || {/* */}` is encountered. The error asks the user to annotate the kind of the unboxed closure (e.g. `move |:| {/* */}`). Once annotated, the compiler will type check the RHS as an unboxed closure which is what the user wants.

r? @nikomatsakis 

(1) AIUI it only triggers in this scenario:

``` rust
fn is_uc<F>(_: F) where F: FnOnce() {}

fn main() {
    is_uc(|| {});  // type checked as unboxed closure with kind `FnOnce`
}
```

(2) I checked, and it's not possible because `check_unboxed_closure` expects a `kind` argument, but we can't supply that argument in this case (i.e. `let f = || {}`, what's the kind?). We could force the `FnOnce` kind in that case, but that's ad hoc. We should try to infer the kind depending on how the closure is used afterwards, but there is no inference mechanism to do that (at least, not right now).
2014-12-27 15:28:36 +00:00
Flavio Percoco
607f60712c Keep track of the whole error chain 2014-12-26 17:26:33 +01:00
Jorge Aparicio
5b0c8acd69 typeck: boxed closures can't capture by value
closes #19141
closes #20193
closes #20228
2014-12-26 11:20:34 -05:00
Seo Sanghyeon
9449161aea Do not resolve labels across function boundary 2014-12-26 20:17:43 +09:00
bors
7e11b22713 auto merge of #20117 : lfairy/rust/rename-include-bin, r=alexcrichton
According to [RFC 344][], methods that return `&[u8]` should have names ending in `bytes`. Though `include_bin!` is a macro not a method, it seems reasonable to follow the convention anyway.

We keep the old name around for now, but trigger a deprecation warning when it is used.

[RFC 344]: https://github.com/rust-lang/rfcs/blob/master/text/0344-conventions-galore.md

[breaking-change]
2014-12-24 20:47:12 +00:00
bors
14597f980a auto merge of #19813 : barosl/rust/autoderef-type-inference-ice, r=pnkfelix
`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.

Fixes #19692.
Fixes #19583.
Fixes #19297.
2014-12-24 18:37:07 +00:00
Nick Cameron
e82215d4e2 Review changes 2014-12-24 09:24:59 +13:00
Nick Cameron
e840e49b21 Tests 2014-12-24 09:12:46 +13:00