Commit Graph

156 Commits

Author SHA1 Message Date
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
62ee3f1622 rustc: fix fallout 2015-01-03 09:34:05 -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
Niko Matsakis
83ef3042de Modify type_known_to_meet_builtin_bound so that it doesn't suppress overflow,
which should always result in an error.

NB. Some of the hunks in this commit rely on a later commit which adds
`tcx` into `param_env` and modifies `ParameterEnvironment` to
implement `Typer`.
2015-01-03 07:01:21 -05:00
Alex Crichton
340f3fd7a9 rollup merge of #20410: japaric/assoc-types
Conflicts:
	src/liballoc/lib.rs
	src/libcollections/lib.rs
	src/libcollections/slice.rs
	src/libcore/ops.rs
	src/libcore/prelude.rs
	src/libcore/ptr.rs
	src/librustc/middle/traits/project.rs
	src/libstd/c_str.rs
	src/libstd/io/mem.rs
	src/libstd/io/mod.rs
	src/libstd/lib.rs
	src/libstd/path/posix.rs
	src/libstd/path/windows.rs
	src/libstd/prelude.rs
	src/libstd/rt/exclusive.rs
	src/libsyntax/lib.rs
	src/test/compile-fail/issue-18566.rs
	src/test/run-pass/deref-mut-on-ref.rs
	src/test/run-pass/deref-on-ref.rs
	src/test/run-pass/dst-deref-mut.rs
	src/test/run-pass/dst-deref.rs
	src/test/run-pass/fixup-deref-mut.rs
	src/test/run-pass/issue-13264.rs
	src/test/run-pass/overloaded-autoderef-indexing.rs
2015-01-02 13:51:50 -08:00
Niko Matsakis
fc7d8faba8 Handle recursive obligations without exiting the inference probe
Conflicts:
	src/librustc/middle/traits/select.rs
2015-01-02 14:22:00 -05:00
Niko Matsakis
45468f37c8 Temporarily do not evaluate subobligations. 2015-01-02 14:21:49 -05:00
Niko Matsakis
ea1ad792f9 Evaluate projection predicates during trait selection. Fixes #20296. 2015-01-02 14:21:37 -05:00
Alex Crichton
4459b1dced rollup merge of #20341: nikomatsakis/impl-trait-for-trait-2
Conflicts:
	src/librustc/middle/traits/mod.rs
	src/libstd/io/mod.rs
	src/test/run-pass/builtin-superkinds-self-type.rs
2015-01-02 11:13:05 -08:00
Alex Crichton
735c308aed rollup merge of #20416: nikomatsakis/coherence
Conflicts:
	src/test/run-pass/issue-15734.rs
	src/test/run-pass/issue-3743.rs
2015-01-02 09:23:42 -08:00
Niko Matsakis
cddb41dd1f Do not ICE when projecting out of a value with type ty::ty_err 2015-01-02 12:20:29 -05:00
Niko Matsakis
704ed4c7d0 Address nits. 2015-01-02 12:09:38 -05:00
Niko Matsakis
dabd7507b6 Ensure that, for every trait Foo, the predicate Foo : Foo holds. 2015-01-02 12:09:38 -05:00
Niko Matsakis
19dcecb225 Refactor object-safety into its own (cached) module so that we can
check it more easily; also extend object safety to cover sized types
as well as static methods.  This makes it sufficient so that we can
always ensure that `Foo : Foo` holds for any trait `Foo`.
2015-01-02 12:08:36 -05:00
Niko Matsakis
2c1d7a7caa Move the upcast routine into traits and use it for method selection; also
move get_method_index into traits and give it a better name (`get_vtable_index_of_object_method`).
2015-01-02 12:08:36 -05:00
Niko Matsakis
c61a0092bc Fix orphan checking (cc #19470). (This is not a complete fix of #19470 because of the backwards compatibility feature gate.)
This is a [breaking-change]. The new rules require that, for an impl of a trait defined
in some other crate, two conditions must hold:

1. Some type must be local.
2. Every type parameter must appear "under" some local type.

Here are some examples that are legal:

```rust
struct MyStruct<T> { ... }

// Here `T` appears "under' `MyStruct`.
impl<T> Clone for MyStruct<T> { }

// Here `T` appears "under' `MyStruct` as well. Note that it also appears
// elsewhere.
impl<T> Iterator<T> for MyStruct<T> { }
```

Here is an illegal example:

```rust
// Here `U` does not appear "under" `MyStruct` or any other local type.
// We call `U` "uncovered".
impl<T,U> Iterator<U> for MyStruct<T> { }
```

There are a couple of ways to rewrite this last example so that it is
legal:

1. In some cases, the uncovered type parameter (here, `U`) should be converted
   into an associated type. This is however a non-local change that requires access
   to the original trait. Also, associated types are not fully baked.
2. Add `U` as a type parameter of `MyStruct`:
   ```rust
   struct MyStruct<T,U> { ... }
   impl<T,U> Iterator<U> for MyStruct<T,U> { }
   ```
3. Create a newtype wrapper for `U`
   ```rust
   impl<T,U> Iterator<Wrapper<U>> for MyStruct<T,U> { }
   ```

Because associated types are not fully baked, which in the case of the
`Hash` trait makes adhering to this rule impossible, you can
temporarily disable this rule in your crate by using
`#![feature(old_orphan_check)]`. Note that the `old_orphan_check`
feature will be removed before 1.0 is released.
2015-01-02 04:06:09 -05:00
Niko Matsakis
1e3214ba33 Normalize the associated types in closure and closure upvar types. 2015-01-01 18:48:26 -05:00
Niko Matsakis
78f848cde5 Refactor the Typer interface to separate out UnboxedClosureTyper methods, which are
the only things that trait selection needs.
2015-01-01 18:48:26 -05:00
Niko Matsakis
7092af7ee3 Normalize predicates found on the impl 2015-01-01 18:48:26 -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
Niko Matsakis
0aa7ba9f5e Normalize bounds also in the UFCS cases (and get more systematic about it) 2014-12-31 11:16:28 -05:00
Niko Matsakis
4f05ec7d2c Patch projection to not be so eager to unify type variables. This code
is still probably wrong since it fails to incorporate the ambiguity
resolution measures that `select` uses. Also, made more complicated by
the fact that trait object types do not impl their own traits yet.
2014-12-31 11:15:42 -05:00
Niko Matsakis
919975d0a5 Address nits. 2014-12-30 09:36:23 -05:00
Niko Matsakis
de8e0ae22c Remove the AssocSpace 2014-12-30 09:36:23 -05:00
Niko Matsakis
7ed0e23209 Resolve merge conflicts. This changes should really be integrated back to their respective
commits but oh dear what a pain.
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
f1c041a54d Patch long line. 2014-12-30 09:36:23 -05:00
Niko Matsakis
00cf176a5e Add FIXMEs relating to caching of projection results 2014-12-30 09:36:22 -05:00
Niko Matsakis
3657ae13f5 Don't normalize associated types when in region binders, wait until we instantiate
them. Also fix some assertions and handling of builtin bounds.
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
de806bc057 Teach project to project associated types out of object types. 2014-12-30 09:36:22 -05:00
Niko Matsakis
82787c2252 Convert to use Rc<TraitRef> in object types (finally!). 2014-12-30 09:36:21 -05:00
Niko Matsakis
4404592f36 Implement associated type projection and normalization. 2014-12-30 09:36:21 -05:00
Niko Matsakis
f95bb55a1c Move the scalar types out of static data so that we can put Rc into sty. 2014-12-30 09:34:38 -05:00
Niko Matsakis
986f654f3b Rename trait_ref field to predicate, since trait_ref is really
overly general, and the value is always *some* sort of predicate.
2014-12-30 09:32:42 -05:00
Niko Matsakis
4946e1a463 Move the TypeContents-based "Sized" queries into trans, where the full
types are always known and hence the ParameterEnvironment is not
necessary. For other `Sized` queries, use the trait infrastructure
just like `Copy`.
2014-12-30 09:32:42 -05:00
Huon Wilson
91db254c81 More rebase fixes. 2014-12-30 00:11:30 +11:00
Huon Wilson
ce3c949115 Intern BareFnTys to make sty slightly smaller.
This cuts the ty_bare_fn variant to 48 bytes rather than 56. There
doesn't seem to be a noticable memory usage decrease from this.
2014-12-29 23:55:24 +11:00
Huon Wilson
4f2b0f032a Store Substs in an arena in the tcx.
This current inflates memory use more than 3 times.
2014-12-29 23:55:24 +11:00
bors
4a4c89c7a4 auto merge of #20119 : FlaPer87/rust/oibit-send-and-friends, r=nikomatsakis
More work on opt-in built in traits. `Send` and `Sync` are not opt-in, `OwnedPtr` renamed to `UniquePtr` and the `Send` and `Sync` traits are now unsafe.

NOTE: This likely needs to be rebased on top of the yet-to-land snapshot.

r? @nikomatsakis 

cc #13231
2014-12-27 13:11:48 +00:00
Flavio Percoco
607f60712c Keep track of the whole error chain 2014-12-26 17:26:33 +01:00
Flavio Percoco
fb803a8570 Require types to opt-in Sync 2014-12-26 17:26:32 +01:00
Niko Matsakis
a583ba2fa0 Remove McResult from the mem-categorization interface. 2014-12-25 07:04:07 -05:00
Alex Crichton
de11710d80 rollup merge of #19891: nikomatsakis/unique-fn-types-3
Conflicts:
	src/libcore/str.rs
	src/librustc_trans/trans/closure.rs
	src/librustc_typeck/collect.rs
	src/libstd/path/posix.rs
	src/libstd/path/windows.rs
2014-12-22 12:51:23 -08:00
Alex Crichton
459f3b2cfa rollup merge of #20056: MrFloya/iter_rename
Conflicts:
	src/libcollections/bit.rs
	src/libcore/str.rs
2014-12-22 12:49:57 -08:00
Niko Matsakis
2a43b352f7 Rote changes that don't care to distinguish between a fn pointer and a fn item. 2014-12-22 12:27:07 -05:00
Florian Wilkens
f8cfd2480b Renaming of the Iter types as in RFC #344
libcore: slice::Items -> slice::Iter, slice::MutItems -> slice::IterMut
libcollections: *::Items -> *::Iter, *::MoveItems -> *::IntoIter, *::MutItems -> *::IterMut

This is of course a [breaking-change].
2014-12-22 12:58:55 +01:00
Alex Crichton
082bfde412 Fallout of std::str stabilization 2014-12-21 23:31:42 -08:00
Corey Farwell
98af642f5c Remove a ton of public reexports
Remove most of the public reexports mentioned in #19253

These are all leftovers from the enum namespacing transition

In particular:

* src/libstd/num/strconv.rs
 * ExponentFormat
 * SignificantDigits
 * SignFormat
* src/libstd/path/windows.rs
 * PathPrefix
* src/libstd/sys/windows/timer.rs
 * Req
* src/libcollections/str.rs
 * MaybeOwned
* src/libstd/collections/hash/map.rs
 * Entry
* src/libstd/collections/hash/table.rs
 * BucketState
* src/libstd/dynamic_lib.rs
 * Rtld
* src/libstd/io/net/ip.rs
 * IpAddr
* src/libstd/os.rs
 * MemoryMapKind
 * MapOption
 * MapError
* src/libstd/sys/common/net.rs
 * SocketStatus
 * InAddr
* src/libstd/sys/unix/timer.rs
 * Req

[breaking-change]
2014-12-21 09:26:41 -08:00