Commit graph

8206 commits

Author SHA1 Message Date
Patrick Walton
e6e58e43f8 libsyntax: Forbid type parameters in field expressions.
This breaks code like:

    struct Foo {
        x: int,
    }

    let f: Foo = ...;
    ... f.x::<int> ...

Change this code to not contain an unused type parameter. For example:

    struct Foo {
        x: int,
    }

    let f: Foo = ...;
    ... f.x ...

Closes #18680.

[breaking-change]
2014-11-11 10:45:59 -08:00
bors
a30b72bb14 auto merge of #18802 : bkoropoff/rust/issue-18769, r=luqmana
Drill down the loan path for `McDeclared` references as well since it might lead to an upvar.  Closes #18769
2014-11-10 16:12:03 +00:00
bors
221115ceee auto merge of #18792 : sfackler/rust/struct-variants, r=alexcrichton
We need a snapshot before the parser can be adjusted.
2014-11-10 11:06:54 +00:00
bors
809cd0c89e auto merge of #18780 : bkoropoff/rust/regionck-for-loop, r=eddyb
Use the mem-cat of the iterator element type rather than the iterator itself when processing the for loop pattern.

Closes #17068
Closes #18767
2014-11-09 22:31:44 +00:00
bors
946225d77f auto merge of #18755 : japaric/rust/ord, r=alexcrichton
Closes #18738
cc #15689

r? @alexcrichton 
cc @cmr
2014-11-09 12:31:40 +00:00
Steven Fackler
00741a2c27 First stage of struct variant field visibility changes
We need a snapshot before the parser can be adjusted.
2014-11-09 00:30:04 -08:00
bors
16d80de231 auto merge of #18557 : aturon/rust/io-removal, r=alexcrichton
This PR includes a sequence of commits that gradually dismantles the `librustrt` `rtio` system -- the main trait previously used to abstract over green and native io. It also largely dismantles `libnative`, moving much of its code into `libstd` and refactoring as it does so.

TL;DR:

* Before this PR: `rustc hello.rs && wc -c hello` produces 715,996
* After this PR:  `rustc hello.rs && wc -c hello` produces 368,100

That is, this PR reduces the footprint of hello world by ~50%.

This is a major step toward #17325 (i.e. toward implementing the [runtime removal RFC](https://github.com/rust-lang/rfcs/pull/230).) What remains is to pull out the scheduling, synchronization and task infrastructure, and to remove `libgreen`. These will be done soon in a follow-up PR.

Part of the work here is eliminating the `rtio` abstraction, which in many cases means bringing the implementation of io closer to the actual API presented in `std::io`.

Another aspect of this PR is the creation of two new, *private* modules within `std` that implement io:

* The `sys` module, which represents a platform-specific implementation of a number of low-level abstractions that are used directly within `std::io` and `std::os`. These "abstractions" are left largely the same as they were in `libnative` (except for the removal of `Arc` in file descriptors), but they are expected to evolve greatly over time. Organizationally, there are `sys/unix/` and `sys/windows/` directories which both implement the entire `sys` module hierarchy; this means that nearly all of the platform-specific code is isolated and you can get a handle on each platform in isolation.

* The `sys_common` module, which is rooted at `sys/common`, and provides a few pieces of private, low-level, but cross-platform functionality.

In the long term, the `sys` modules will provide hooks for exposing high-level platform-specific APIs as part of `libstd`. The first such API will be access to file descriptors from `std::io` abstractions, but a bit of design work remains before that step can be taken. 

The `sys_common` module includes some traits (like `AsFileDesc`) which allow communication of private details between modules in disparate locations in the hierarchy; this helps overcome the relatively simple hierarchical privacy system in Rust.

To emphasize: the organization in `sys` is *very preliminary* and the main goal was to migrate away from `rtio` as quickly and simply as possible. The design will certainly evolve over time, and all of the details are currently private.

Along the way, this PR also entirely removes signal handling, since it was only supported on `librustuv` which was removed a while ago. 

Because of the removal of APIs from `libnative` and `librustrt`, and the removal of signal handling, this is a:

[breaking-change]

Some of these APIs will return in public from from `std` over time.

r? @alexcrichton
2014-11-09 05:51:44 +00:00
Brian Koropoff
c0a7d557db Update test to cover #18769 2014-11-08 21:51:02 -08:00
Aaron Turon
5ea09e6a25 Ignore sepcomp-lib-lto on android due to linker weirdness 2014-11-08 20:59:59 -08:00
Aaron Turon
0bea593ea2 Remove somewhat bogus process-spawn-errno test (non-mac, non-windows only) 2014-11-08 20:40:39 -08:00
bors
a2f303ad09 auto merge of #18743 : nikomatsakis/rust/hrtb-refactor-2, r=pcwalton
Various miscellaneous changes pushing towards HRTB support:

1. Update parser and adjust ast to support `for<'a,'b>` syntax, both in closures and trait bounds. Warn on the old syntax (not error, for stage0).
2. Refactor TyTrait representation to include a TraitRef.
3. Purge `once_fns` feature gate and `once` keyword.

r? @pcwalton 

This is a [breaking-change]:

- The `once_fns` feature is now officially deprecated. Rewrite using normal closures or unboxed closures.
- The new `for`-based syntax now issues warnings (but not yet errors):
  - `fn<'a>(T) -> U` becomes `for<'a> fn(T) -> U`
  - `<'a> |T| -> U` becomes `for<'a> |T| -> U`
2014-11-09 03:51:41 +00:00
bors
93c85eb8bd auto merge of #18730 : bkoropoff/rust/issue-18652, r=eddyb
`FnOnce` environments that fit within an `int` are passed to the closure by value.  For some reason there was an assert that this would only happen if there were 1 or 0 free variables, but it can also happen if there are multiple variables that happen to fit.

Closes #18652
2014-11-08 23:56:39 +00:00
Brian Koropoff
a553c2d3bc Add regression for #18767 2014-11-08 11:07:28 -08:00
Brian Koropoff
472e0cf8f3 Add regression for #17068 2014-11-08 11:07:28 -08:00
bors
ebc625ad3e auto merge of #18634 : alexcrichton/rust/cfg-attr-crate-level, r=sfackler
This commit implements processing these two attributes at the crate level as
well as at the item level. When #[cfg] is applied at the crate level, then the
entire crate will be omitted if the cfg doesn't match. The #[cfg_attr] attribute
is processed as usual in that the attribute is included or not depending on
whether the cfg matches.

This was spurred on by motivations of #18585 where #[cfg_attr] annotations will
be applied at the crate-level.

cc #18585
2014-11-08 09:01:33 +00:00
bors
7bc3588faf auto merge of #18729 : bkoropoff/rust/issue-18711, r=cmr
Closes #18711
2014-11-08 05:01:34 +00:00
Jorge Aparicio
3c442b92ae syntax: Use UFCS in the expansion of #[deriving(PartialOrd)] 2014-11-07 18:26:44 -05:00
Niko Matsakis
091dc6e98a Purge the old once_fns, which are not coming back 2014-11-07 15:51:30 -05:00
Niko Matsakis
3112771001 Update tests where we don't report errors twice anymore 2014-11-07 15:51:30 -05:00
Niko Matsakis
244231720d Update parser with for syntax 2014-11-07 15:51:30 -05:00
bors
6ee56c9a5f auto merge of #18688 : bkoropoff/rust/unboxed-closure-subst-fixes, r=nikomatsakis
This resolves some issues that remained after adding support for monomorphizing unboxed closures in trans.

There were a few places where a set of substitutions for an unboxed closure type were dropped on the floor and later recalculated from scratch based on the def ID, but this failed spectacularly when the closure originated from a different param environment.  The substitutions are now plumbed through end-to-end.  Closes #18661

There was also a conflict in the meaning of the self param space within the body of the unboxed closure.  Trans attempted to insert the unboxed closure type as the self type, but this could conflict with the self type from the param environment when an unboxed closure was used within a default method on a trait.  Since the body of an unboxed closure cannot refer to its own self type or value, there's no need for it to actually use the self space.  The downstream consumers of the substitutions in trans do not seem to need it either since they look up the type of the closure some other way, so I just stopped setting it.  Closes #18685.

r? @pcwalton @nikomatsakis
2014-11-07 20:41:29 +00:00
Alex Crichton
3dbd32854f rustc: Process #[cfg]/#[cfg_attr] on crates
This commit implements processing these two attributes at the crate level as
well as at the item level. When #[cfg] is applied at the crate level, then the
entire crate will be omitted if the cfg doesn't match. The #[cfg_attr] attribute
is processed as usual in that the attribute is included or not depending on
whether the cfg matches.

This was spurred on by motivations of #18585 where #[cfg_attr] annotations will
be applied at the crate-level.

cc #18585
2014-11-07 12:04:28 -08:00
bors
0b48001c28 auto merge of #17830 : pczarn/rust/interp_tt, r=pnkfelix
Closes #14197

Removes the `matchers` nonterminal.

If you're using `$foo:matchers` in a macro, write `$foo:tt` instead.

[breaking-change]
2014-11-07 15:26:26 +00:00
bors
97a57ec909 auto merge of #18714 : nikomatsakis/rust/issue-18621-deref-for-refs, r=aturon
libs: add Deref, DerefMut impls for references, fixing a bug in compiler in the process that was blocking this.

r? @aturon
2014-11-07 11:31:25 +00:00
Piotr Czarnecki
964191a313 Add and update tests 2014-11-07 10:21:50 +01:00
bors
a0a7ab4612 auto merge of #18672 : brandonson/rust/functional-update-walk, r=nikomatsakis
Fixes #18567. `Struct{x:foo, .. with_expr}` did not walk `with_expr`, which allowed
using moved variables in some cases.  The CFG for structs also built up with
`with_expr` happening before the fields, which is now reversed. (Fields are now
before the `with_expr` in the CFG)
2014-11-07 07:16:33 +00:00
Brian Koropoff
2c956d0abf Add regression test for #18652 2014-11-06 20:46:23 -08:00
Brian Koropoff
5f6392d848 Add regression test for #18711 2014-11-06 19:33:47 -08:00
Niko Matsakis
f2aaed8338 libs: add Deref, DerefMut impls for references, fixing a bug in compiler in the process that was blocking this.
Fixes #18621.
2014-11-06 21:51:40 -05:00
Brian Koropoff
ddb17b239b Add regression test for #18685 2014-11-06 18:17:58 -08:00
Brian Koropoff
d317039b22 Add regression test for #18661 2014-11-06 18:17:58 -08:00
Alex Crichton
e4cf9c4b58 rollup merge of #18691 : subhashb/add_clone_trait_to_filetype 2014-11-06 13:53:27 -08:00
Alex Crichton
953302f85f rollup merge of #18707 : japaric/moar-dst 2014-11-06 13:53:26 -08:00
Alex Crichton
ec983c684b rollup merge of #18684 : nathan7/patch-1 2014-11-06 13:53:26 -08:00
Alex Crichton
90bfcec323 rollup merge of #18679 : brson/lint-trait 2014-11-06 13:53:25 -08:00
Alex Crichton
fa530fff51 rollup merge of #18656 : thiagopnts/rename-deprecated-non_uppercase_statics 2014-11-06 13:31:54 -08:00
Alex Crichton
e3ade0f012 rollup merge of #18644 : luqmana/pefc 2014-11-06 13:31:48 -08:00
Alex Crichton
b3ed448f62 rollup merge of #18633 : huonw/target-spec-spelling 2014-11-06 13:31:32 -08:00
Alex Crichton
76d2abe0e7 rollup merge of #18630 : nikomatsakis/purge-the-bars 2014-11-06 13:31:18 -08:00
Alex Crichton
b747f70394 rollup merge of #18591 : nick29581/dst-bug-str 2014-11-06 13:30:37 -08:00
Alex Crichton
73aaeb0fbd rollup merge of #18555 : jakub-/e-needstest 2014-11-06 13:30:16 -08:00
Jorge Aparicio
5272e6c4c6 Add tests 2014-11-06 14:14:31 -05:00
Brandon Sanderson
d80a62d84b Fix soundness hole in struct with expressions.
Fixes #18567. Struct{x:foo, .. with_expr} did not walk with_expr, which allowed
using moved variables in some cases.  The CFG for structs also built up with
with_expr happening before the fields, which is now reversed. (Fields are now
before the with_expr in the CFG)
2014-11-06 10:42:40 -08:00
Alexis Beingessner
eec145be3f Fallout from collection conventions 2014-11-06 12:26:08 -05:00
bors
60a669a174 auto merge of #18608 : alexcrichton/rust/lint-some-crates, r=aturon
This commit adds support for linting `extern crate` statements for stability
attributes attached to the crate itself. This is likely to be the mechanism used
to deny access to experimental crates that are part of the standard
distribution.

cc #18585 

r? @aturon
2014-11-06 14:06:59 +00:00
Subhash Bhushan
2cde618b17 Make Filetype Clonable 2014-11-06 19:17:50 +05:30
Niko Matsakis
d0fa4c6239 Remove the unboxed closure |:| notation from types and trait references completely. 2014-11-06 06:48:24 -05:00
Niko Matsakis
221edbae38 Support parenthesized paths Foo(A,B) -> C that expand to Foo<(A,B),C>. These paths also bind anonymous regions (or will, once HRTB is fully working).
Fixes #18423.
2014-11-06 06:48:23 -05:00
bors
e84e7a00dd auto merge of #18467 : japaric/rust/eq, r=alexcrichton
`eq`, `ne`, `cmp`, etc methods now require one less level of indirection when dealing with `&str`/`&[T]`

``` rust
"foo".ne(&"bar") -> "foo".ne("bar")
slice.cmp(&another_slice) -> slice.cmp(another_slice)
// slice and another_slice have type `&[T]`
```

[breaking-change]
2014-11-06 08:06:50 +00:00
Nathan Zadoks
dddef44a6b Make x86_64-unknown-linux-gnu.json true to its name 2014-11-06 06:37:40 +01:00