261 Commits

Author SHA1 Message Date
Alex Crichton
754db0f7ac rollup merge of #22436: nikomatsakis/issue-22246-bound-lifetimes-of-assoc-types
Take 2. This PR includes a bunch of refactoring that was part of an experimental branch implementing [implied bounds]. That particular idea isn't ready to go yet, but the refactoring proved useful for fixing #22246. The implied bounds branch also exposed #22110 so a simple fix for that is included here. I still think some more refactoring would be a good idea here -- in particular I think most of the code in wf.rs is kind of duplicating the logic in implicator and should go, but I decided to post this PR and call it a day before diving into that. I'll write a bit more details about the solutions I adopted in the various bugs. I patched the two issues I was concerned about, which was the handling of supertraits and HRTB (the latter turned out to be fine, so I added a comment explaining why.)

r? @pnkfelix (for now, anyway)
cc @aturon

[implied bounds]: http://smallcultfollowing.com/babysteps/blog/2014/07/06/implied-bounds/
2015-02-18 14:31:58 -08:00
Alex Crichton
c07ec507e2 rollup merge of #22287: Ryman/purge_carthographers
This overlaps with #22276 (I left make check running overnight) but covers a number of additional cases and has a few rewrites where the clones are not even necessary.

This also implements `RandomAccessIterator` for `iter::Cloned`

cc @steveklabnik, you may want to glance at this before #22281 gets the bors treatment
2015-02-18 14:31:55 -08:00
Niko Matsakis
a994a99ec4 Always prefer where-clauses over impls in trait selection. Fixes #22110. 2015-02-18 15:23:34 -05:00
Niko Matsakis
5511add742 traits: break apart the "full normalization" code used for normalizing
parameter environments so that it can be used elsewhere.
2015-02-18 15:23:34 -05:00
Niko Matsakis
7134ad4d64 Move tcx from Typer into ClosureTyper 2015-02-18 15:23:34 -05:00
Kevin Butler
061206b9c7 Remove usage of .map(|&foo| foo) 2015-02-18 00:57:35 +00:00
Kevin Butler
2f586b9687 Opt for .cloned() over .map(|x| x.clone()) etc. 2015-02-18 00:56:07 +00:00
Huon Wilson
cae969e2a7 Remove the implicit 'static bound on Send.
Previously Send was defined as `trait Send: 'static {}`. As detailed in
https://github.com/rust-lang/rfcs/pull/458, the `'static` bound is not
actually necessary for safety, we can use lifetimes to enforce that more
flexibly.

`unsafe` code that was previously relying on `Send` to insert a
`'static` bound now may allow incorrect patterns, and so should be
audited (a quick way to ensure safety immediately and postpone the audit
is to add an explicit `'static` bound to any uses of the `Send` type).

cc #22251.
2015-02-18 08:19:21 +11:00
Manish Goregaokar
8ebbf584a0 Rollup merge of #22262 - lfairy:unsafe-cell-lang-item, r=alexcrichton
`Unsafe` was renamed to `UnsafeCell` a while ago, but the corresponding lang item kept the old name. This patch fixes the inconsistency.

r? @eddyb
2015-02-15 18:26:05 +05:30
bors
b6d91a2bda Auto merge of #22126 - steveklabnik:gh21281, r=nikomatsakis
This is super black magic internals at the moment, but having it
somewhere semi-public seems good. The current versions weren't being
rendered, and they'll be useful for some people.

Fixes #21281

r? @nikomatsakis @kmcallister
2015-02-15 07:53:07 +00:00
Steve Klabnik
ad2efdc67d Instead of putting them in the book, make them READMEs. 2015-02-13 12:32:37 -05:00
Chris Wong
b4a286144d Rename the "unsafe" lang item to "unsafe_cell" 2015-02-13 19:40:22 +13:00
Niko Matsakis
3e88b5bbf9 Rote changes to fix fallout throughout the compiler from splitting the
predicates and renaming some things.
2015-02-12 13:29:51 -05:00
Edward Wang
2af968eaa6 Eliminate assoc type projection predicate candidate duplicates
When projecting associate types for a trait's default methods, the
trait itself was added to the predicate candidate list twice: one from
parameter environment, the other from trait definition. Then the
duplicates were deemed as code ambiguity and the compiler rejected the
code. Simply checking and dropping the duplicates solves the issue.

Closes #22036
2015-02-12 01:12:57 +08:00
Steve Klabnik
005a2506a6 Move rustc docs to the book
This is super black magic internals at the moment, but having it
somewhere semi-public seems good. The current versions weren't being
rendered, and they'll be useful for some people.

Fixes #21281
2015-02-10 22:02:53 -05:00
Alex Crichton
8ee86860bc rollup merge of #21353: sanxiyn/upvar
Fix #20558.
2015-02-10 08:39:51 -08:00
bors
88d8ba5ab3 Auto merge of #22028 - nikomatsakis:issue-22019-caching, r=aturon
Simplify cache selection by just using the local cache whenever there
are any where-clauses at all. This seems to be the simplest possible
rule and will (hopefully!) put an end to these annoying "cache leak"
bugs. Fixes #22019.

r? @aturon
2015-02-10 13:23:29 +00:00
bors
7ebf9bc5c2 Auto merge of #21505 - GuillaumeGomez:interned_string, r=alexcrichton
It's in order to make the code more homogeneous.
2015-02-07 02:04:47 +00:00
Niko Matsakis
acaad3ad67 Simplify cache selection by just using the local cache whenever there
are any where-clauses at all. This seems to be the simplest possible
rule and will (hopefully!) put an end to these annoying "cache leak"
bugs. Fixes #22019.
2015-02-06 19:11:50 -05:00
GuillaumeGomez
7b973ba827 Update to last version, remove "[]" as much as possible 2015-02-06 12:03:46 +01:00
GuillaumeGomez
664c41b427 librustc has been updated 2015-02-06 11:59:10 +01:00
Manish Goregaokar
703364f214 Rollup merge of #21968 - nikomatsakis:issue-21965-duplicate-preds-in-env, r=pnkfelix
We were already building a hashset to check for duplicates, but we assumed that the initial vector had no duplicates. Fixes #21965.

r? @pnkfelix
2015-02-06 16:21:13 +05:30
Manish Goregaokar
67b51291f0 Rollup merge of #21925 - sfackler:allow-missing-copy, r=alexcrichton
This was particularly helpful in the time just after OIBIT's
implementation to make sure things that were supposed to be Copy
continued to be, but it's now creates a lot of noise for types that
intentionally don't want to be Copy.

r? @alexcrichton
2015-02-06 16:21:08 +05:30
Manish Goregaokar
08a2bef632 Rollup merge of #21954 - jbcrail:fix-misspelled-comments, r=steveklabnik
The spelling corrections were made in both documentation comments and
regular comments.
2015-02-06 16:21:06 +05:30
Niko Matsakis
fab32b4167 Now that the elaboration mechanism is suppressing defaults, we can remove this overeager code that was pruning out ambig where-clause matches in trait selection. cc #21974. 2015-02-05 16:34:54 -05:00
Niko Matsakis
8d9bb17204 Extend the solution to encompass HRTB 2015-02-05 15:50:34 -05:00
Jorge Aparicio
17bc7d8d5b cleanup: replace as[_mut]_slice() calls with deref coercions 2015-02-05 13:45:01 -05:00
Niko Matsakis
be8d9bb98a When elaborating predicates, purge duplicates from the initial vector.
Fixes #21965.
2015-02-05 11:48:44 -05:00
Joseph Crail
dc2e444e50 Fix for misspelled comments.
The spelling corrections were made in both documentation comments and
regular comments.
2015-02-04 23:00:02 -05:00
Seo Sanghyeon
4ef7551cca Fix type inference related to upvars in closures 2015-02-05 11:29:38 +09:00
Steven Fackler
85a85c2070 Switch missing_copy_implementations to default-allow
This was particularly helpful in the time just after OIBIT's
implementation to make sure things that were supposed to be Copy
continued to be, but it's now creates a lot of noise for types that
intentionally don't want to be Copy.
2015-02-03 23:31:07 -08:00
Niko Matsakis
498595a3dc Teach project to unify the return type even if a precise match is not
possible.  There is some amount of duplication as a result (similar to
select) -- I am not happy about this but not sure how to fix it
without deeper rewrites.
2015-02-03 11:55:45 -05:00
Niko Matsakis
c9e1c445db Allow closure arguments types to unify even if we can't fully resolve
a trait obligation. Partial fix for #16440 -- closure return types are
not handled yet.
2015-02-03 11:55:45 -05:00
Jorge Aparicio
3484706c38 remove unused mut qualifiers 2015-02-02 13:40:18 -05:00
Jorge Aparicio
fd702702ee for x in xs.into_iter() -> for x in xs
Also `for x in option.into_iter()` -> `if let Some(x) = option`
2015-02-02 13:40:18 -05:00
Jorge Aparicio
d5d7e6565a for x in xs.iter() -> for x in &xs 2015-02-02 13:40:18 -05:00
Niko Matsakis
bc41cc0ec9 Make unboxed_closure_kind return Option to allow for the possibility that its value is not yet known. 2015-02-01 06:13:05 -05:00
bors
e8489d3cc7 Auto merge of #21792 - nikomatsakis:orphan-ordered-first, r=aturon
Update the coherence rules to "covered first" -- the first type parameter to contain either a local type or a type parameter must contain only covered type parameters.

cc #19470.
Fixes #20974.
Fixes #20749.

r? @aturon
2015-02-01 01:34:08 +00:00
Niko Matsakis
ecaa68768c Update the coherence rules to "covered first" -- the first type parameter to contain either a local type or a type parameter must contain only covered type parameters. 2015-01-30 20:25:07 -05:00
Alex Crichton
103f1459c0 rollup merge of #21702: nikomatsakis/issue-21636
Check and extract bindings from trait definitions.

Fixes #21636.

r? @nick29581
2015-01-30 12:02:56 -08:00
Jorge Aparicio
788181d405 s/Show/Debug/g 2015-01-29 07:49:02 -05:00
Jorge Aparicio
efc97a51ff convert remaining range(a, b) to a..b 2015-01-29 07:49:01 -05:00
Niko Matsakis
694432e935 Adjust comment per nrc's suggestion. 2015-01-28 05:15:24 -05:00
Niko Matsakis
aeeab35ec2 Add missing space to error message. 2015-01-28 05:15:24 -05:00
Niko Matsakis
006f3eacae Fix a latent bug in trait dispatch where we sometimes counted associated types
when constructing the vtable-index. Not good.
2015-01-28 05:15:23 -05:00
Niko Matsakis
07cdb85331 Move return type an associated type of the Fn* traits. Mostly this involves tweaking things in
the compiler that assumed two input types to assume two ouputs; we also have to teach `project.rs`
to project `Output` from the unboxed closure and fn traits.
2015-01-28 05:15:23 -05:00
Niko Matsakis
c61d7889b4 Add the notion of normalizing a parameter environment and ensure that
all parameter environments are normalized. Correspondingly, stop
normalizing predicates we extract out of the environment. Fixes #21664.
2015-01-28 05:13:53 -05:00
Niko Matsakis
c73a1d0a2c Change list of predicates in ParameterEnvironment to a Vec. 2015-01-28 05:13:53 -05:00
bors
92ff8ea528 Auto merge of #21523 - nikomatsakis:issue-21245-japaric-ti-failure, r=eddyb
This also includes some miscellaneous cleanup. This is kind of a band-aid but it fixes the problems @japaric was encountering.

r? @eddyb
2015-01-27 23:08:13 +00:00
Niko Matsakis
093926e841 Check and extract bindings from trait definitions.
Fixes #21636.
2015-01-27 15:39:58 -05:00