36205 Commits

Author SHA1 Message Date
Niko Matsakis
6e68fd09ed Implement new orphan rule that requires that impls of remote traits meet the following two criteria:
- the self type includes some local type; and,
- type parameters in the self type must be constrained by a local type.

A type parameter is called *constrained* if it appears in some type-parameter of a local type.

Here are some examples that are accepted. In all of these examples, I
assume that `Foo` is a trait defined in another crate. If `Foo` were
defined in the local crate, then all the examples would be legal.

- `impl Foo for LocalType`
- `impl<T> Foo<T> for LocalType` -- T does not appear in Self, so it is OK
- `impl<T> Foo<T> for LocalType<T>` -- T here is constrained by LocalType
- `impl<T> Foo<T> for (LocalType<T>, T)` -- T here is constrained by LocalType

Here are some illegal examples (again, these examples assume that
`Foo` is not local to the current crate):

- `impl Foo for int` -- the Self type is not local
- `impl<T> Foo for T` -- T appears in Self unconstrained by a local type
- `impl<T> Foo for (LocalType, T)` -- T appears in Self unconstrained by a local type

This is a [breaking-change]. For the time being, you can opt out of
the new rules by placing `#[old_orphan_check]` on the trait (and
enabling the feature gate where the trait is defined). Longer term,
you should restructure your traits to avoid the problem. Usually this
means changing the order of parameters so that the "central" type
parameter is in the `Self` position.

As an example of that refactoring, consider the `BorrowFrom` trait:

```rust
pub trait BorrowFrom<Sized? Owned> for Sized? {
    fn borrow_from(owned: &Owned) -> &Self;
}
```

As defined, this trait is commonly implemented for custom pointer
types, such as `Arc`. Those impls follow the pattern:

```rust
impl<T> BorrowFrom<Arc<T>> for T {...}
```

Unfortunately, this impl is illegal because the self type `T` is not
local to the current crate. Therefore, we are going to change the order of the parameters,
so that `BorrowFrom` becomes `Borrow`:

```rust
pub trait Borrow<Sized? Borrowed> for Sized? {
    fn borrow_from(owned: &Self) -> &Borrowed;
}
```

Now the `Arc` impl is written:

```rust
impl<T> Borrow<T> for Arc<T> { ... }
```

This impl is legal because the self type (`Arc<T>`) is local.
2015-01-05 17:17:26 -05:00
bors
260e46115b auto merge of #20443 : nikomatsakis/rust/autoderef-overloaded-calls, r=pcwalton
Use autoderef for call notation. This is consistent in that we now autoderef all postfix operators (`.`, `[]`, and `()`). It also means you can call closures without writing `(*f)()`. Note that this is rebased atop the rollup, so only the final commit is relevant.

r? @pcwalton
2015-01-04 16:36:41 +00:00
bors
5e21e17d96 auto merge of #20437 : ranma42/rust/fix-make-install, r=alexcrichton
After 8b3c67690c4747b9fadfef407e6261524fb03f8a the `make install`
command fails if docs are not disabled through CFG_DISABLE_DOCS,
because now the `install` target uses
../../tmp/dist/$(DOC_PKG_NAME)-$(CFG_BUILD)/install.sh

Instead of explicitly depending on
dist/$(PKG_NAME)-$(CFG_BUILD).tar.gz, the `prepare_[un]install`
targets now depend on `dist-tar-bins`, which packages the appropriate
dist archives depending on the configuration.
2015-01-04 14:21:08 +00:00
bors
856b90c400 auto merge of #20393 : japaric/rust/impl-any, r=aturon
Needs a snapshot that contains PR #20385

r? @aturon
2015-01-04 11:01:04 +00:00
bors
7e3d115724 auto merge of #20462 : alexcrichton/rust/remove-deprecated, r=aturon
This removes a large array of deprecated functionality, regardless of how
recently it was deprecated. The purpose of this commit is to clean out the
standard libraries and compiler for the upcoming alpha release.

Some notable compiler changes were to enable warnings for all now-deprecated
command line arguments (previously the deprecated versions were silently
accepted) as well as removing deriving(Zero) entirely (the trait was removed).

The distribution no longer contains the libtime or libregex_macros crates. Both
of these have been deprecated for some time and are available externally.
2015-01-04 07:51:06 +00:00
Alex Crichton
7d8d06f86b Remove deprecated functionality
This removes a large array of deprecated functionality, regardless of how
recently it was deprecated. The purpose of this commit is to clean out the
standard libraries and compiler for the upcoming alpha release.

Some notable compiler changes were to enable warnings for all now-deprecated
command line arguments (previously the deprecated versions were silently
accepted) as well as removing deriving(Zero) entirely (the trait was removed).

The distribution no longer contains the libtime or libregex_macros crates. Both
of these have been deprecated for some time and are available externally.
2015-01-03 23:43:57 -08:00
bors
470118f3e9 auto merge of #20504 : japaric/rust/derive-self, r=alexcrichton
I put the sed scripts in the commits, in case this needs a "rebase".
2015-01-04 04:50:56 +00:00
Jorge Aparicio
5172b8046a remove Any[Mut]RefExt traits in favor of impl Any 2015-01-03 23:01:33 -05:00
Jorge Aparicio
351409a622 sed -i -s 's/#\[deriving(/#\[derive(/g' **/*.rs 2015-01-03 22:54:18 -05:00
Jorge Aparicio
8c5bb80d9b sed -i -s 's/\bmod}/self}/g' **/*.rs 2015-01-03 22:42:37 -05:00
Jorge Aparicio
56dcbd17fd sed -i -s 's/\bmod,/self,/g' **/*.rs 2015-01-03 22:42:21 -05:00
bors
c6c786671d auto merge of #20490 : japaric/rust/assoc-types, r=aturon
closes #20486 
closes #20474 
closes #20441

[breaking-change]

The `Index[Mut]` traits now have one less input parameter, as the return type of the indexing operation is an associated type. This breaks all existing implementations.

---

binop traits (`Add`, `Sub`, etc) now have an associated type for their return type. Also, the RHS input parameter now defaults to `Self` (except for the `Shl` and `Shr` traits). For example, the `Add` trait now looks like this:

``` rust
trait Add<Rhs=Self> {
    type Output;

    fn add(self, Rhs) -> Self::Output;
}
```

The `Neg` and `Not` traits now also have an associated type for their return type.

This breaks all existing implementations of these traits.

---
Affected traits:

- `Iterator { type Item }`
- `IteratorExt` no input/output types, uses `<Self as Iterator>::Item` in its methods
- `DoubleEndedIterator` no input/output types, uses `<Self as Iterator>::Item` in its methods
- `DoubleEndedIteratorExt` no input/output types, uses `<Self as Iterator>::Item` in its methods
- `RandomAccessIterator` no input/output types
- `ExactSizeIterator` no input/output types, uses `<Self as Iterator>::Item` in its methods

This breaks all the implementations of these traits.
2015-01-04 00:50:59 +00:00
Jorge Aparicio
ce8f748b4c add feature gate to some benchmarks 2015-01-03 17:29:27 -05:00
Jorge Aparicio
9aadbadb93 fix rpass/cfail tests 2015-01-03 16:30:49 -05:00
Jorge Aparicio
6fc92578fe serialize: fix fallout 2015-01-03 16:30:49 -05:00
Jorge Aparicio
4bfaa93978 std: fix fallout 2015-01-03 16:30:49 -05:00
Jorge Aparicio
32dd592d36 collections: fix fallout 2015-01-03 16:30:49 -05:00
Jorge Aparicio
234dc4d4dd core: use assoc types in Index[Mut] 2015-01-03 16:30:48 -05:00
Jorge Aparicio
fc343304af typeck: Index[Mut] traits now have *one* input parameter (not two) 2015-01-03 16:30:48 -05:00
Jorge Aparicio
7d3c5f020e use assoc types in unop traits 2015-01-03 16:29:22 -05:00
Jorge Aparicio
99017f82b6 use assoc types in binop traits 2015-01-03 16:29:19 -05:00
bors
496dc4eae7 auto merge of #19790 : akiss77/rust/aarch64-configure, r=alexcrichton
Preparing AArch64 support, starting work at the build system.
2015-01-03 20:20:48 +00:00
Akos Kiss
6e5fb8bd1b Initial version of AArch64 support.
Adds AArch64 knowledge to:
* configure,
* make files,
* sources,
* tests, and
* documentation.
2015-01-03 15:16:10 +00:00
Jorge Aparicio
7095dd0070 core: merge IteratorPairExt into IteratorExt 2015-01-03 09:34:05 -05:00
Jorge Aparicio
6002c13f9b Register new snapshots 2015-01-03 09:34:05 -05:00
Jorge Aparicio
de1446680c core: merge DoubleEndedIteratorExt into IteratorExt 2015-01-03 09:34:05 -05:00
Jorge Aparicio
6c0ad5b564 bench: fix fallout 2015-01-03 09:34:05 -05:00
Jorge Aparicio
91eeb641cd coretest: fix fallout 2015-01-03 09:34:05 -05:00
Jorge Aparicio
4f4ae538ae fix rpass/cfail tests 2015-01-03 09:34:05 -05:00
Jorge Aparicio
3bf24d6b63 test: fix fallout 2015-01-03 09:34:05 -05:00
Jorge Aparicio
ab6b651403 regex_macros: fix fallout 2015-01-03 09:34:05 -05:00
Jorge Aparicio
9dd65dd624 rustc_driver: fix fallout 2015-01-03 09:34:05 -05:00
Jorge Aparicio
964ff83cbc rustc_trans: fix fallout 2015-01-03 09:34:05 -05:00
Jorge Aparicio
274146d650 rustc_typeck: fix fallout 2015-01-03 09:34:05 -05:00
Jorge Aparicio
62ee3f1622 rustc: fix fallout 2015-01-03 09:34:05 -05:00
Jorge Aparicio
6b19a02080 syntax: fix fallout 2015-01-03 09:34:05 -05:00
Jorge Aparicio
6bff9de8ea serialize: fix fallout 2015-01-03 09:34:04 -05:00
Jorge Aparicio
f3333d5e10 regex: fix fallout 2015-01-03 09:34:04 -05:00
Jorge Aparicio
17cf5e8104 fmt_macros: fix fallout 2015-01-03 09:34:04 -05:00
Jorge Aparicio
9d36a2d593 graphviz: fix fallout 2015-01-03 09:34:04 -05:00
Jorge Aparicio
1971a24441 std: fix fallout 2015-01-03 09:34:04 -05:00
Jorge Aparicio
6b116bedaf collections: fix fallout 2015-01-03 09:34:04 -05:00
Jorge Aparicio
8c59ec0488 unicode: fix fallout 2015-01-03 09:34:04 -05:00
Jorge Aparicio
3fdd4b366a rand: fix fallout 2015-01-03 09:34:04 -05:00
Jorge Aparicio
41df05dd0e core: use assoc types in Iterator et al 2015-01-03 09:34:04 -05:00
bors
fe7e285d0c auto merge of #20432 : nikomatsakis/rust/fn-inference-2, r=eddyb
Previously, the borrow mode of each upvar was inferred as part of regionck. This PR moves it into its own separate step. It also employs the `ExprUseVisitor`, further simplifying the code. The eventual goal is to support better inference of `Fn` vs `FnMut` vs `FnOnce` that is not based on the expected type, as well as supporting individual by-move upvars.

r? @eddyb
2015-01-03 14:20:47 +00:00
Niko Matsakis
cbeff8b8b3 "Fallout": Slightly different errors are generated in this edge case. 2015-01-03 07:01:21 -05:00
Niko Matsakis
09a7bc55db Running EUV requires the Copy lang item, so adjust privacy tests. 2015-01-03 07:01:21 -05:00
Niko Matsakis
ecd9c10e1a Move upvar checking into its own pre-pass that occurs before regionck
and which uses EUV. For now, upvar inference is not any smarter than
it ever was, but regionck is simpler because it doesn't have to do as
many things at once.
2015-01-03 07:01:21 -05:00
Niko Matsakis
7474be0660 Make ty::ParameterEnvironment, not ty::ctxt, implement Typer and
`UnboxedClosureTyper`. This requires adding a `tcx` field to
`ParameterEnvironment` but generally simplifies everything since we
only need to pass along an `UnboxedClosureTyper` or `Typer`.
2015-01-03 07:01:21 -05:00