Commit graph

11446 commits

Author SHA1 Message Date
Simonas Kazlauskas
471f5a1f9a Generalise associative operator parsing
This commit generalises parsing of associative operators from left-associative
only (with some ugly hacks to support right-associative assignment) to properly
left/right-associative operators.

Parsing still is not general enough to handle non-associative,
non-highest-precedence prefix or non-highest-precedence postfix operators (e.g.
`..` range syntax), though. That should be fixed in the future.

Lastly, this commit adds support for parsing right-associative `<-` (left arrow)
operator with precedence higher than assignment as the operator for placement-in
feature.
2015-10-27 21:55:04 +02:00
bors
540fd3aa71 Auto merge of #26848 - oli-obk:const_fn_const_eval, r=pnkfelix
this has the funky side-effect of also allowing constant evaluation of function calls to functions that are not `const fn` as long as `check_const` didn't mark that function `NOT_CONST`

It's still not possible to call a normal function from a `const fn`, but let statements' initialization value can get const evaluated (this caused the fallout in the overflowing tests)

we can now do this:

```rust
const fn add(x: usize, y: usize) -> usize { x + y }
const ARR: [i32; add(1, 2)] = [5, 6, 7];
```

also added a test for destructuring in const fn args
```rust
const fn i((a, b): (u32, u32)) -> u32 { a + b } //~ ERROR: E0022
```

This is a **[breaking change]**, since it turns some runtime panics into compile-time errors. This statement is true for ANY improvement to the const evaluator.
2015-10-27 17:11:13 +00:00
bors
679b5a9faa Auto merge of #29327 - sanxiyn:argument, r=nrc
Fix #24114.
2015-10-27 14:25:57 +00:00
bors
95fb8d1c87 Auto merge of #29325 - alexcrichton:revert-trait-accessibility, r=nrc
These commits revert https://github.com/rust-lang/rust/pull/28504 and add a regression test pointed out by @petrochenkov, it's not immediately clear with the regression that the accessibility check should be removed, so for now preserve the behavior on stable by default.

r? @nrc
2015-10-27 01:04:14 +00:00
bors
04475b92f9 Auto merge of #29274 - thepowersgang:issues-29107-const-unsafe-fn-order, r=nikomatsakis
This PR switches the implemented ordering from `unsafe const fn` (as was in the original RFC) to `const unsafe fn` (which is what the lang team decided on)
2015-10-26 21:23:32 +00:00
bors
278cc2f157 Auto merge of #29287 - Ryman:fn_nopat, r=alexcrichton
Previously, if you copied a signature from a trait definition such as:

```rust
fn foo<'a>(&'a Bar) -> bool {}
```

and moved it into an `impl`, there would be an error message:

"unexpected token `'a`"

Adding to the error message that a pattern is expected should help
users to find the actual problem with using a lifetime here.
2015-10-26 17:44:37 +00:00
Alex Crichton
31fa9167c0 test: Add regression test for "source trait is private" 2015-10-26 10:38:26 -07:00
Alex Crichton
cb0ce69026 Revert "Remove unnecessary trait accessibility check."
This reverts commit f4f95eb3a9.
2015-10-26 09:16:05 -07:00
Alex Crichton
0cfdb33720 Revert "Add UFCS privacy test."
This reverts commit b3e1aca40f.
2015-10-26 09:16:01 -07:00
Seo Sanghyeon
d7944cee12 Distinguish argument from local variable 2015-10-27 00:46:11 +09:00
bors
bf7eec04d8 Auto merge of #29312 - apasel422:issue-21410, r=alexcrichton
Closes #21410.
Closes #24972.
2015-10-26 10:16:52 +00:00
Andrew Paseltiner
fbc53e5a63 Add tests for #21410 and #24972
Closes #21410.
Closes #24972.
2015-10-25 20:32:10 -04:00
bors
f7bde94ea8 Auto merge of #29284 - apasel422:tests, r=alexcrichton
Closes #22781.
Closes #23891.
Closes #24956.
Closes #25145.
Closes #25693.
Closes #26095.
Closes #26459.
Closes #27320.
Closes #27895.
2015-10-25 20:31:48 +00:00
bors
e02ada6d38 Auto merge of #29254 - alexcrichton:stabilize-1.5, r=brson
This commit stabilizes and deprecates library APIs whose FCP has closed in the
last cycle, specifically:

Stabilized APIs:

* `fs::canonicalize`
* `Path::{metadata, symlink_metadata, canonicalize, read_link, read_dir, exists,
   is_file, is_dir}` - all moved to inherent methods from the `PathExt` trait.
* `Formatter::fill`
* `Formatter::width`
* `Formatter::precision`
* `Formatter::sign_plus`
* `Formatter::sign_minus`
* `Formatter::alternate`
* `Formatter::sign_aware_zero_pad`
* `string::ParseError`
* `Utf8Error::valid_up_to`
* `Iterator::{cmp, partial_cmp, eq, ne, lt, le, gt, ge}`
* `<[T]>::split_{first,last}{,_mut}`
* `Condvar::wait_timeout` - note that `wait_timeout_ms` is not yet deprecated
  but will be once 1.5 is released.
* `str::{R,}MatchIndices`
* `str::{r,}match_indices`
* `char::from_u32_unchecked`
* `VecDeque::insert`
* `VecDeque::shrink_to_fit`
* `VecDeque::as_slices`
* `VecDeque::as_mut_slices`
* `VecDeque::swap_remove_front` - (renamed from `swap_front_remove`)
* `VecDeque::swap_remove_back` - (renamed from `swap_back_remove`)
* `Vec::resize`
* `str::slice_mut_unchecked`
* `FileTypeExt`
* `FileTypeExt::{is_block_device, is_char_device, is_fifo, is_socket}`
* `BinaryHeap::from` - `from_vec` deprecated in favor of this
* `BinaryHeap::into_vec` - plus a `Into` impl
* `BinaryHeap::into_sorted_vec`

Deprecated APIs

* `slice::ref_slice`
* `slice::mut_ref_slice`
* `iter::{range_inclusive, RangeInclusive}`
* `std::dynamic_lib`

Closes #27706
Closes #27725
cc #27726 (align not stabilized yet)
Closes #27734
Closes #27737
Closes #27742
Closes #27743
Closes #27772
Closes #27774
Closes #27777
Closes #27781
cc #27788 (a few remaining methods though)
Closes #27790
Closes #27793
Closes #27796
Closes #27810
cc #28147 (not all parts stabilized)
2015-10-25 16:38:38 +00:00
Alex Crichton
ff49733274 std: Stabilize library APIs for 1.5
This commit stabilizes and deprecates library APIs whose FCP has closed in the
last cycle, specifically:

Stabilized APIs:

* `fs::canonicalize`
* `Path::{metadata, symlink_metadata, canonicalize, read_link, read_dir, exists,
   is_file, is_dir}` - all moved to inherent methods from the `PathExt` trait.
* `Formatter::fill`
* `Formatter::width`
* `Formatter::precision`
* `Formatter::sign_plus`
* `Formatter::sign_minus`
* `Formatter::alternate`
* `Formatter::sign_aware_zero_pad`
* `string::ParseError`
* `Utf8Error::valid_up_to`
* `Iterator::{cmp, partial_cmp, eq, ne, lt, le, gt, ge}`
* `<[T]>::split_{first,last}{,_mut}`
* `Condvar::wait_timeout` - note that `wait_timeout_ms` is not yet deprecated
  but will be once 1.5 is released.
* `str::{R,}MatchIndices`
* `str::{r,}match_indices`
* `char::from_u32_unchecked`
* `VecDeque::insert`
* `VecDeque::shrink_to_fit`
* `VecDeque::as_slices`
* `VecDeque::as_mut_slices`
* `VecDeque::swap_remove_front` - (renamed from `swap_front_remove`)
* `VecDeque::swap_remove_back` - (renamed from `swap_back_remove`)
* `Vec::resize`
* `str::slice_mut_unchecked`
* `FileTypeExt`
* `FileTypeExt::{is_block_device, is_char_device, is_fifo, is_socket}`
* `BinaryHeap::from` - `from_vec` deprecated in favor of this
* `BinaryHeap::into_vec` - plus a `Into` impl
* `BinaryHeap::into_sorted_vec`

Deprecated APIs

* `slice::ref_slice`
* `slice::mut_ref_slice`
* `iter::{range_inclusive, RangeInclusive}`
* `std::dynamic_lib`

Closes #27706
Closes #27725
cc #27726 (align not stabilized yet)
Closes #27734
Closes #27737
Closes #27742
Closes #27743
Closes #27772
Closes #27774
Closes #27777
Closes #27781
cc #27788 (a few remaining methods though)
Closes #27790
Closes #27793
Closes #27796
Closes #27810
cc #28147 (not all parts stabilized)
2015-10-25 09:36:32 -07:00
bors
079f3848c3 Auto merge of #29281 - skeleten:issue-28189, r=steveklabnik
Closes #28189
2015-10-25 14:41:06 +00:00
Andrew Paseltiner
671602c8c9 Add tests
Closes #22781.
Closes #23891.
Closes #24956.
Closes #25145.
Closes #25693.
Closes #26095.
Closes #26459.
Closes #27320.
Closes #27895.
2015-10-25 07:37:21 -04:00
bors
f68cd9aef1 Auto merge of #29273 - Manishearth:regression, r=alexcrichton
None
2015-10-25 10:45:27 +00:00
bors
49b232edaf Auto merge of #29261 - apasel422:issue-22403, r=alexcrichton
Closes #22403.

r? @pnkfelix
2015-10-25 06:48:21 +00:00
John Hodge
f9b8c49cdb Switch to 'const unsafe fn' ordering (rust-lang/rust#29107) 2015-10-25 12:03:07 +08:00
Kevin Butler
64da379c8c libsyntax: better error for lifetimes in patterns
Previously, if you copied a signature from a trait definition such as:

```
fn foo<'a>(&'a Bar) -> bool {}
```

and moved it into an `impl`, there would be an error message:

"unexpected token `'a`"

Adding to the error message that a pattern is expected should help
users to find the actual problem with using a lifetime here.
2015-10-25 01:28:00 +01:00
bors
d2f41bd5be Auto merge of #29151 - wthrowe:linker-output-ICE, r=alexcrichton
I suspect this won't work on Windows, but let's be optimistic and try it before disabling.
2015-10-24 21:24:49 +00:00
skeleten
37904063ec adding test for #28189 2015-10-24 21:23:32 +02:00
Manish Goregaokar
aec5576623 Add regression test for #26886
(fixes #26886)
2015-10-24 18:01:06 +05:30
bors
04e497c005 Auto merge of #29259 - arielb1:supertrait-self-2, r=eddyb
…being it

This is a [breaking-change]:lang, but the broken code does not make
much sense.

Fixes #26056

r? @eddyb
2015-10-24 12:21:12 +00:00
Andrew Paseltiner
b83235f76f Add test for #22403
Closes #22403.
2015-10-23 20:15:33 -04:00
Ariel Ben-Yehuda
5d6d26c241 object_safety: check whether a supertrait contains Self even without being it
This is a [breaking-change]:lang, but the broken code does not make
much sense.

Fixes #26056
2015-10-24 00:22:29 +03:00
William Throwe
a1c8431f82 Add a regression test for #29122 (fixed in #29134) 2015-10-23 17:11:33 -04:00
bors
bbb5f8e12e Auto merge of #29241 - nikomatsakis:issue-28871, r=arielb1
Give preference to projections from where-clauses over those from trait definitions. This makes #28871 work again, though I think there's more to fix in this general area.

r? @arielb1 
cc @brson (fixes regression)
2015-10-23 19:46:57 +00:00
bors
7ee4e9e7ec Auto merge of #29243 - skeleten:issue-29184, r=alexcrichton
Fixes #29184 

This adds an error message for the use of the reserved `typeof` keyword, instead of reporting an ICE.
Also adds a `compile-fail` test.

I chose to add a `span_err` instead of removing to parser code, as to preserve the reservation of `typeof`.
2015-10-23 16:53:40 +00:00
Niko Matsakis
b69e08ceca add main fn to test 2015-10-23 11:04:38 -04:00
skeleten
044a8fe6f6 Add error message for using typeof instead of an ICE.
This adds error E0516

fixing a type pointed out by @jonas-schievink
2015-10-23 16:34:47 +02:00
Niko Matsakis
8fa5f09a8f distinguish projections from the env/obj-types vs those from
trait definitions, and give prefence to the former. This is consistent
with what we do for selection. It also works around a limitation
that was leading to #28871.
2015-10-22 16:58:08 -04:00
bors
5eac68cca7 Auto merge of #29210 - arielb1:suggest-overflow, r=eddyb
This prevents a stack-overflow when the module graph was cyclic.

Fixes #29181 

r? @eddyb
2015-10-22 06:47:27 +00:00
Ariel Ben-Yehuda
ad4cdf7077 don't revisit modules while finding traits in suggest
Fixes #29181
2015-10-21 20:18:21 +03:00
Andrew Paseltiner
0f6b71846c Add test for #28936
Closes #28936.
2015-10-21 08:40:33 -04:00
bors
fddf2f7574 Auto merge of #29186 - pnkfelix:fsk-fix-issue-29166, r=alexcrichton
Add dropck unsafe escape hatch (UGEH) to vec::IntoIter.

Fix #29166
2015-10-21 02:39:59 +00:00
bors
4826f9625b Auto merge of #29171 - nrc:servo-dxr, r=@arielb1 2015-10-21 00:55:49 +00:00
Nick Cameron
401c80dab1 save-analysis: don't recompute crate name 2015-10-21 12:04:48 +13:00
bors
97ba52ec37 Auto merge of #29148 - petrochenkov:noshow, r=alexcrichton
Closes https://github.com/rust-lang/rust/issues/29145

[breaking-change], needs a crater run.
2015-10-20 19:02:27 +00:00
Felix S. Klock II
2b712c78cf Add dropck unsafe escape hatch (UGEH) to vec::IntoIter.
Fix #29166
2015-10-20 14:54:38 +02:00
bors
e7eb7d58f9 Auto merge of #27723 - mystor:vecdeque_drain_range, r=bluss
This is a WIP PR for my implementation of drain over the VecDeque data structure supporting ranges. It brings the VecDeque drain implementation in line with Vec's.

Tests haven't been written for the new function yet.
2015-10-20 11:55:17 +00:00
Carlos Liam
f9d056f1b7 Clean whitespace
Remove leading newlines; replace lines containing only whitespace with empty lines; replace multiple trailing newlines with a single newline; remove trailing whitespace in lines
2015-10-19 11:16:31 -04:00
Oliver Schneider
b4e30bd2a3 allow constant evaluation of function calls 2015-10-19 13:13:02 +02:00
Vadim Petrochenkov
025cf75864 Remove #[derive(Show)] 2015-10-18 19:12:09 +03:00
bors
3f2ad610a8 Auto merge of #28845 - oli-obk:rfc1229, r=pnkfelix
This PR turns statically known erroneous code (e.g. numeric overflow) into a warning and continues normal code-generation to emit the same code that would have been generated without `check_const` detecting that the result can be computed at compile-time.

<del>It's not done yet, as I don't know how to properly emit a lint from trans. I can't seem to extract the real lint level of the item the erroneous expression is in.</del> It's an unconditional warning now.

r? @pnkfelix 

cc @nikomatsakis 

* [RFC 1229 text](https://github.com/rust-lang/rfcs/blob/master/text/1229-compile-time-asserts.md)
* RFC PR: rust-lang/rfcs#1229
* tracking issue: https://github.com/rust-lang/rust/issues/28238
2015-10-18 11:09:03 +00:00
bors
4af89fe317 Auto merge of #29091 - luqmana:29073-overflow-cabi, r=pnkfelix
Fixes #29073.
2015-10-18 02:07:01 +00:00
bors
c7a58b534e Auto merge of #28933 - fhahn:issue-28837-partialeq-note, r=alexcrichton
this PR adds notes for missing `PartialEq` and `PartialOrd`. I've added a test case but it seems like `NOTE` is ignored by the test runner.

#28837
2015-10-17 13:24:01 +00:00
bors
ad5a43a483 Auto merge of #29114 - apasel422:issue-27105, r=alexcrichton
Closes #27105.
2015-10-17 11:38:10 +00:00
bors
e1944b6b0b Auto merge of #29110 - apasel422:shared, r=alexcrichton
Fixes #29037.
Fixes #29106.

r? @pnkfelix 
CC @Gankro
2015-10-17 09:51:30 +00:00