Commit Graph

7725 Commits

Author SHA1 Message Date
Steven Fackler
65cca7c8b1 Deprecate #[ignore(cfg(...))]
Replace `#[ignore(cfg(a, b))]` with `#[cfg_attr(all(a, b), ignore)]`
2014-09-23 23:49:20 -07:00
Steven Fackler
e520bb1b2f Add a cfg_attr syntax extension
This extends cfg-gating to attributes.

```rust
 #[cfg_attr(<cfg pattern>, <attr>)]
```
will expand to
```rust
 #[<attr>]
```
if the `<cfg pattern>` matches the current cfg environment, and nothing
if it does not. The grammar for the cfg pattern has a simple
recursive structure:

 * `value` and `key = "value"` are cfg patterns,
 * `not(<cfg pattern>)` is a cfg pattern and matches if `<cfg pattern>`
    does not.
 * `all(<cfg pattern>, ...)` is a cfg pattern and matches if all of the
    `<cfg pattern>`s do.
 * `any(<cfg pattern>, ...)` is a cfg pattern and matches if any of the
    `<cfg pattern>`s do.

Examples:

```rust
 // only derive Show for assert_eq! in tests
 #[cfg_attr(test, deriving(Show))]
 struct Foo { ... }

 // only derive Show for assert_eq! in tests and debug builds
 #[cfg_attr(any(test, not(ndebug)), deriving(Show))]
 struct Foo { ... }

 // ignore a test in certain cases
 #[test]
 #[cfg_attr(all(not(target_os = "linux"), target_endian = "big"), ignore)]
 fn test_broken_thing() { ... }

 // Avoid duplication when fixing staging issues in rustc
 #[cfg_attr(not(stage0), lang="iter")]
 pub trait Iterator<T> { ... }
```
2014-09-23 23:47:45 -07:00
bors
321785927c auto merge of #17413 : jakub-/rust/issue-17385, r=pcwalton
This is to make sure it hadn't been moved if there are no bindings
in any of the arms.

Fixes #17385.
2014-09-23 17:05:39 +00:00
bors
d80cd3d9bc auto merge of #17028 : pcwalton/rust/higher-rank-trait-lifetimes, r=pnkfelix
They will ICE during typechecking if used, because they depend on trait
reform.

This is part of unboxed closures.

r? @nikomatsakis
2014-09-23 14:30:40 +00:00
Patrick Walton
5376b1c798 librustc: Parse and resolve higher-rank lifetimes in traits.
They will ICE during typechecking if used, because they depend on trait
reform.

This is part of unboxed closures.
2014-09-22 21:14:58 -07:00
Patrick Walton
e9ad12c0ca librustc: Forbid private types in public APIs.
This breaks code like:

    struct Foo {
        ...
    }

    pub fn make_foo() -> Foo {
        ...
    }

Change this code to:

    pub struct Foo {    // note `pub`
        ...
    }

    pub fn make_foo() -> Foo {
        ...
    }

The `visible_private_types` lint has been removed, since it is now an
error to attempt to expose a private type in a public API. In its place
a `#[feature(visible_private_types)]` gate has been added.

Closes #16463.

RFC #48.

[breaking-change]
2014-09-22 20:05:45 -07:00
bors
43fd619819 auto merge of #17286 : vberger/rust/deprecated_in_macros, r=aturon
Closes #17185.

The stability lint will now check code generated by macro expansion. It will allow to detect :
- arguments passed to macros using deprecated (and others) items
- macro expansion generating code using deprecated items due to its arguments (hence the second commit, fixing such issue found in libcollections)

Checking is still done at expansion, but it will also detect a macro explicitly using a deprecated item in its definition.
2014-09-22 23:50:30 +00:00
bors
4b5f4563bf auto merge of #17408 : bkoropoff/rust/bot-ice, r=alexcrichton
- Don't attempt to autoderef `!`.  The `Deref`/`DerefMut` trait lookup would generate a bunch of unhelpful error spew.
- Don't allow explicit deref of `!`, since later passes just ICE.  This closes issue #17373 
- Don't allow explicit index of `!`, since later passes just ICE.  There does not seem to be an issue associated with this
2014-09-22 22:05:33 +00:00
Victor Berger
eb58ac126e Lint stability now checks macro arguments.
Closes #17185.
2014-09-22 19:28:07 +02:00
Alex Crichton
c111db166f Fix snapshot builders
The test in question does not pass when cross compiling because the syntax
extension must always be compiled for the host, not the target.
2014-09-22 09:09:15 -07:00
bors
cbb07e81be auto merge of #17029 : alexcrichton/rust/vec-stable, r=aturon
The following methods, types, and names have become stable:

* Vec
* Vec::as_mut_slice
* Vec::as_slice
* Vec::capacity
* Vec::clear
* Vec::default
* Vec::grow
* Vec::insert
* Vec::len
* Vec::new
* Vec::pop
* Vec::push
* Vec::remove
* Vec::set_len
* Vec::shrink_to_fit
* Vec::truncate
* Vec::with_capacity
* vec::raw
* vec::raw::from_buf
* vec::raw::from_raw_parts

The following have become unstable:

* Vec::dedup        // naming
* Vec::from_fn      // naming and unboxed closures
* Vec::get_mut      // will be removed for IndexMut
* Vec::grow_fn      // unboxed closures and naming
* Vec::retain       // unboxed closures
* Vec::swap_remove  // uncertain naming
* Vec::from_elem    // uncertain semantics
* vec::unzip        // should be generic for all collections

The following have been deprecated

* Vec::append - call .extend()
* Vec::append_one - call .push()
* Vec::from_slice - call .to_vec()
* Vec::grow_set - call .grow() and then .push()
* Vec::into_vec - move the vector instead
* Vec::move_iter - renamed to iter_move()
* Vec::push_all - call .extend()
* Vec::to_vec - call .clone()
* Vec:from_raw_parts - moved to raw::from_raw_parts

This is a breaking change in terms of the signature of the `Vec::grow` function.
The argument used to be taken by reference, but it is now taken by value. Code
must update by removing a leading `&` sigil or by calling `.clone()` to create a
value.

[breaking-change]
2014-09-22 05:30:30 +00:00
Alex Crichton
0169218047 Fix fallout from Vec stabilization 2014-09-21 22:15:51 -07:00
bors
4e5b62618c auto merge of #17419 : anchovieshat/rust/remove_no_opt, r=cmr
Closes #13649
2014-09-21 21:45:28 +00:00
Colin Davidson
a7a1bf81d7 Move -Z lto to -C lto.
Closes #12443
2014-09-21 02:17:31 -04:00
Colin Davidson
b2b0737fbe Remove -Z no-opt flag.
Closes #13649
2014-09-21 00:52:04 -04:00
bors
d7e1bb5ff4 auto merge of #17415 : jakub-/rust/issue-17383, r=huonw
Fixes #17383.
2014-09-21 01:00:29 +00:00
Jakub Wieczorek
3514737b4c Fix the span for discriminators in non-C-like enums
Fixes #17383.
2014-09-21 01:33:57 +02:00
bors
9c39b6c564 auto merge of #17218 : iliekturtles/rust/2789-invalid-doc-comment, r=huonw
Display an explicit message about items missing after sugared doc
comment attributes. References #2789.

 * I tried looking through `parser.rs` for an appropriate location for `expected_item_err` and ended up putting it just above the first use. Is there a better location?
 * Did I add enough test cases? Too many? Should I add more cases for the original error message?
2014-09-20 23:15:48 +00:00
bors
9100a8fe46 auto merge of #17382 : brson/rust/gdbwin, r=sfackler
Getting closer to turning on full tests.
2014-09-20 20:30:43 +00:00
Jakub Wieczorek
7b08827f2d Induce an empty loan for the value being matched in match expressions
This is to make sure it hadn't been moved if there are no bindings
in any of the arms.

Fixes #17385.
2014-09-20 21:01:29 +02:00
Mike Boutin
4a767007be libsyntax: Explicit error message for sugared doc comments.
Display an explicit message about items missing after sugared doc
comment attributes. References #2789.
2014-09-20 11:50:59 -04:00
Brian Koropoff
6035222d21 Add test that ! cannot be indexed 2014-09-20 00:25:50 -07:00
Brian Koropoff
fc3bd12a79 Add regression test for issue #17373 2014-09-20 00:18:55 -07:00
bors
f7fb0f5a17 auto merge of #17319 : kmcallister/rust/method-macro-bt, r=pcwalton
We were leaving these on the stack, causing spurious backtraces.
2014-09-20 04:55:41 +00:00
Alex Crichton
f082416bec Test fixes from the rollup 2014-09-19 19:58:14 -07:00
Alex Crichton
ebe9ec8074 rollup merge of #17379 : pcwalton/keywords-followed-by-double-colon 2014-09-19 10:01:01 -07:00
Alex Crichton
6fe4467188 rollup merge of #17358 : epdtry/pcg-lto 2014-09-19 10:00:38 -07:00
Alex Crichton
04f5fe5a08 rollup merge of #17338 : nick29581/variants-namespace 2014-09-19 10:00:29 -07:00
Alex Crichton
81ee3586b5 rollup merge of #17318 : nick29581/slice 2014-09-19 10:00:24 -07:00
Alex Crichton
b94075c9ce rollup merge of #17314 : eddyb/span-no-gc 2014-09-19 10:00:21 -07:00
Alex Crichton
1686353650 rollup merge of #17236 : fhahn/issue-16723-multiple-items 2014-09-19 10:00:06 -07:00
Florian Hahn
89b09440d8 Allow syntax extensions to return multiple items, closes #16723.
This patch replaces `MacItem` with `MacItems`.
2014-09-19 11:10:54 +02:00
Nick Cameron
ce0907e46e Add enum variants to the type namespace
Change to resolve and update compiler and libs for uses.

[breaking-change]

Enum variants are now in both the value and type namespaces. This means that
if you have a variant with the same name as a type in scope in a module, you
will get a name clash and thus an error. The solution is to either rename the
type or the variant.
2014-09-19 15:11:00 +12:00
Nick Cameron
cf9c586fcc reviewer changes 2014-09-19 14:30:54 +12:00
Brian Anderson
0a83d02efc Ignore two gdb tests on windows that are failing on the bots 2014-09-18 18:35:41 -07:00
Patrick Walton
7c00d77e8b librustc: Implement the syntax in the RFC for unboxed closure sugar.
Part of issue #16640. I am leaving this issue open to handle parsing of
higher-rank lifetimes in traits.

This change breaks code that used unboxed closures:

* Instead of `F:|&: int| -> int`, write `F:Fn(int) -> int`.

* Instead of `F:|&mut: int| -> int`, write `F:FnMut(int) -> int`.

* Instead of `F:|: int| -> int`, write `F:FnOnce(int) -> int`.

[breaking-change]
2014-09-18 16:31:58 -07:00
Patrick Walton
5aa264a14f libsyntax: Disallow keywords followed by ::.
This breaks code that looked like:

    mymacro!(static::foo);

... where `mymacro!` expects a path or expression. Change such macros to
not accept keywords followed by `::`.

Closes #17298.

[breaking-change]
2014-09-18 16:26:47 -07:00
Nick Cameron
31a7e38759 Implement slicing syntax.
`expr[]`, `expr[expr..]`, `expr[..expr]`,`expr[expr..expr]`

Uses the Slice and SliceMut traits.

Allows ... as well as .. in range patterns.
2014-09-19 11:15:49 +12:00
Eduard Burtescu
f1a8f53cf1 Fix fallout in tests from removing the use of Gc in ExpnInfo. 2014-09-18 14:36:18 +03:00
bors
35be9b817d auto merge of #17341 : alexcrichton/rust/unignore, r=brson
I've confirmed that these are working on the snapshot builders

Closes #16919
2014-09-18 05:50:38 +00:00
bors
28407b6ff0 auto merge of #17335 : TeXitoi/rust/relicense-shootout, r=brson
Everyone agreed.  Fix #17064, fix #17072 

@brson OK?
2014-09-18 03:20:39 +00:00
Stuart Pernsteiner
ed476b02a6 support LTO against libraries built with codegen-units > 1 2014-09-17 16:58:20 -07:00
Patrick Walton
78a841810e librustc: Implement associated types behind a feature gate.
The implementation essentially desugars during type collection and AST
type conversion time into the parameter scheme we have now. Only fully
qualified names--e.g. `<T as Foo>::Bar`--are supported.
2014-09-17 16:38:57 -07:00
bors
8067f4425d auto merge of #17331 : kballard/rust/rust_log_pattern_inverted, r=alexcrichton
RUST_LOG supports regex filtering of log messages with a syntax like
`RUST_LOG=main/foo` to use the regex filter 'foo'. Unfortunately, the
filter was inverted, so `RUST_LOG=main/foo` would actually show all
messages except the ones containing 'foo'.
2014-09-17 21:15:38 +00:00
Kevin Ballard
e7b257089c Fix the inverted RUST_LOG filter
RUST_LOG supports regex filtering of log messages with a syntax like
`RUST_LOG=main/foo` to use the regex filter 'foo'. Unfortunately, the
filter was inverted, so `RUST_LOG=main/foo` would actually show all
messages except the ones containing 'foo'.
2014-09-17 13:26:26 -07:00
bors
b88d1030e1 auto merge of #17343 : alexcrichton/rust/rollup, r=alexcrichton 2014-09-17 18:26:14 +00:00
Keegan McAllister
5b42f79ff0 Pop the expansion context after expanding a method macro
We were leaving these on the stack, causing spurious backtraces.

I've confirmed that this test fails without the fix.
2014-09-17 11:18:53 -07:00
bors
4d2af38611 auto merge of #16836 : P1start/rust/closure_ret_bang, r=alexcrichton
Fixes #13490.
2014-09-17 15:51:11 +00:00
Alex Crichton
498e35aa87 rollup merge of #17311 : jakub-/issue-17302 2014-09-17 08:49:41 -07:00
Alex Crichton
2278f9575d rollup merge of #17310 : nikomatsakis/type-bounds-generalize-to-multiple-object-bounds 2014-09-17 08:49:39 -07:00