Commit Graph

104 Commits

Author SHA1 Message Date
John Kåre Alsaker
d861982ca6 Generator literal support 2017-07-28 15:46:23 +02:00
Niko Matsakis
4f030d04f4 integrate anon dep nodes into trait selection 2017-07-12 06:56:54 -04:00
Tobias Schottdorf
687ee7fee4 Downgrade ProjectionTy's TraitRef to its substs
Addresses the second part of #42171 by removing the `TraitRef` from
`ProjectionTy`, and directly storing its `Substs`.

Closes #42171.
2017-07-11 10:33:09 -04:00
Ariel Ben-Yehuda
b7b965a3e7 return EvaluatedToRecur when evaluating a recursive obligation tree
This helps avoid cache pollution. Also add more comments explaining
that.
2017-07-07 14:05:21 -04:00
Ariel Ben-Yehuda
87a11812e1 use the evaluation cache instead of the global fulfillment cache
The evaluation cache already exists, and it can handle differing
parameter environments natively.

Fixes #39970.
Fixes #42796.
2017-07-07 14:05:02 -04:00
Ariel Ben-Yehuda
16d1700337 use dep-graph reads for the evaluation cache
This is just duplicating the logic from the old fulfillment cache, so
I'm not sure it is 100% correct, but it should not be more wrong than
the old logic.
2017-07-07 14:03:47 -04:00
Ariel Ben-Yehuda
14875fd3b7 prevent illegal coinductive matching in trait evaluation
Previously, coinductive matching was only blocked on the fulfillment
path, and ignored on the evaluation path.
2017-07-07 14:03:23 -04:00
Zack M. Davis
f668999153 use field init shorthand in src/librustc
The field init shorthand syntax was stabilized in 1.17.0 (aebd94f); we
are now free to use it in the compiler.
2017-07-05 22:37:10 -07:00
Masaki Hara
94862c601b
Correct comments about unsizing regarding #40319. 2017-06-29 21:25:35 +09:00
Masaki Hara
23d1521684
Add unsized tuple coercions. 2017-06-29 21:23:33 +09:00
Eduard-Mihai Burtescu
33ecf72e8e rustc: move the PolyFnSig out of TyFnDef. 2017-06-27 16:39:52 +03:00
Eduard-Mihai Burtescu
8e53a03d15 rustc: rename closure_type to fn_sig. 2017-06-27 16:32:48 +03:00
Michael Woerister
3607174909 incr.comp.: Uniformly represent DepNodes as (Kind, StableHash) pairs. 2017-06-09 15:03:34 +02:00
Niko Matsakis
af223fae27 pacify the mercilous tidy 2017-06-01 13:31:12 -04:00
Niko Matsakis
c7a2e32c10 ergonomic improvements to the methods in infcx 2017-06-01 13:31:11 -04:00
Niko Matsakis
5fb0f0dc2e strip param-env from infcx 2017-06-01 13:31:09 -04:00
Niko Matsakis
6c4b961eff move projection mode into parameter environment 2017-06-01 12:56:30 -04:00
Niko Matsakis
226358e2fb rename ParameterEnvironment to ParamEnv 2017-05-22 15:54:16 -04:00
Niko Matsakis
1b7acb6f34 centralize the caching for is-copy, is-sized, and is-freeze
Use the trait-environment+type as the key. Note that these
are only invoked on types that live for the entire compilation
(no inference artifacts). We no longer need the various special-case
bits and caches that were in place before.
2017-05-22 14:55:03 -04:00
Eduard-Mihai Burtescu
612bb1f54e rustc: rename some of the queries to match tcx methods. 2017-04-24 15:20:52 +03:00
bors
15ce54096a Auto merge of #41486 - arielb1:select-where, r=eddyb
traits::select: quickly filter out predicates from other traits

this improves most pre-trans passes's performance by ~1%.

That missed the spring cleaning PR because I wanted to ship it.

r? @eddyb
2017-04-23 23:06:50 +00:00
Ariel Ben-Yehuda
eadb049799 traits::select: quickly filter out predicates from other traits
this improves most pre-trans passes's performance by ~1%.
2017-04-23 23:05:25 +03:00
Ariel Ben-Yehuda
5412587910 clean-up adt_sized_constraint now that it uses on-demand 2017-04-23 14:37:18 +03:00
Ariel Ben-Yehuda
a660ad84b3 bail out of selection when there are multiple surviving candidates
In some cases (e.g. <[int-var] as Add<[int-var]>>), selection can turn up
a large number of candidates. Bailing out early avoids O(n^2) performance.

This improves item-type checking time by quite a bit, resulting in ~2% of total
time-to-typeck.
2017-04-22 21:02:50 +03:00
Mark Simulacrum
f8f5282e5c Remove MethodMatchResult and MethodMatchedData.
These two enums were unused.
2017-04-15 07:23:56 -06:00
Sean Griffin
c81c958e98 Further update with response to feedback 2017-04-14 22:04:53 -04:00
Niko Matsakis
58609ef879 add Subtype predicate 2017-04-11 20:32:46 -04:00
Eduard-Mihai Burtescu
319890487a Disallow subtyping between T and U in T: Unsize<U>. 2017-03-08 14:36:19 +02:00
Eduard-Mihai Burtescu
ba11640179 rustc_typeck: hook up collect and item/body check to on-demand. 2017-02-25 18:35:25 +02:00
Eduard-Mihai Burtescu
3146ee8672 rustc: simplify tcx.closure_type(...) as it can copy the cached values. 2017-02-25 18:35:25 +02:00
Eduard-Mihai Burtescu
91374f8fe4 rustc: combine BareFnTy and ClosureTy into FnSig. 2017-02-25 17:47:15 +02:00
Esteban Küber
a7f63d12a7 Remove noop method Substs::params()
Re: 48b3dd11f5
2017-02-15 22:17:07 -08:00
Andrew Cann
5c90dd7978 Use a proper future-compatibility lint 2017-02-03 18:48:15 +08:00
Andrew Cann
085f046c28 Add is_defaulted_unit helper method 2017-02-03 18:48:15 +08:00
Andrew Cann
2cc84df44c Add warning for () to ! switch 2017-02-03 18:48:15 +08:00
Vadim Petrochenkov
ffba0cea62 Merge ty::TyBox into ty::TyAdt 2017-01-30 23:14:15 +03:00
est31
af46d69b8a Remove Reflect
* Remove the Reflect trait
* Remove the "reflect" lang feature
2017-01-24 23:22:44 +01:00
Mark-Simulacrum
1eab19dba8 Refactor ty::FnSig to privatize all fields 2016-12-05 22:22:49 -07:00
bors
c80c31a502 Auto merge of #38053 - eddyb:lazy-9, r=nikomatsakis
[9/n] rustc: move type information out of AdtDef and TraitDef.

_This is part of a series ([prev](https://github.com/rust-lang/rust/pull/37688) | [next]()) of patches designed to rework rustc into an out-of-order on-demand pipeline model for both better feature support (e.g. [MIR-based](https://github.com/solson/miri) early constant evaluation) and incremental execution of compiler passes (e.g. type-checking), with beneficial consequences to IDE support as well.
If any motivation is unclear, please ask for additional PR description clarifications or code comments._

<hr>

Both `AdtDef` and `TraitDef` contained type information (field types, generics and predicates) which was required to create them, preventing their use before that type information exists, or in the case of field types, *mutation* was required, leading to a variance-magicking implementation of `ivar`s.

This PR takes that information out and the resulting cleaner setup could even eventually end up merged with HIR, because, just like `AssociatedItem` before it, there's no dependency on types anymore.
(With one exception, variant discriminants should probably be moved into their own map later.)
2016-12-02 15:06:36 +00:00
Eduard-Mihai Burtescu
07ff914be1 rustc: simplify AdtDef by removing the field types and ty::ivar. 2016-11-29 21:24:26 +02:00
Mark-Simulacrum
a79c80d0b0 Adds TyCtxt::require_lang_item(LangItem) to simplify lang item requires.
Replaces instances of tcx.lang_items.require(..) with fatal unwrap with
this method.
2016-11-28 18:09:15 -07:00
Mark-Simulacrum
bb35d50cad Refactor TyTrait to contain a interned ExistentialPredicate slice.
Renames TyTrait to TyDynamic.
2016-11-28 18:09:13 -07:00
Mark-Simulacrum
64e97d9b33 Remove BuiltinBound and BuiltinBounds. 2016-11-28 06:37:08 -07:00
Mark-Simulacrum
607af7218b Refactor BuiltinBounds to Vec<DefId> on TraitObject. 2016-11-28 06:37:08 -07:00
Mark-Simulacrum
46c7a117f8 Privatize TraitObject.principal and add a method accessor, returning Option. 2016-11-28 06:37:08 -07:00
Niko Matsakis
48dc6e26ca register infer-ok obligations properly
Or at least, more properly. I think I left one or two FIXMEs still in
there.

cc #32730
2016-11-15 16:12:41 -05:00
Niko Matsakis
19c1a47713 remove TypeOrigin and use ObligationCause instead
In general having all these different structs for "origins" is not
great, since equating types can cause obligations and vice-versa.  I
think we should gradually collapse these things. We almost certainly
also need to invest a big more energy into the `error_reporting` code to
rationalize it: this PR does kind of the minimal effort in that
direction.
2016-11-15 16:12:41 -05:00
Ariel Ben-Yehuda
ca9b5664c3 rustc: move closure upvar types to the closure substs
This moves closures to the (DefId, Substs) scheme like all other items,
and saves a word from the size of TyS now that Substs is 2 words.
2016-11-12 19:00:50 +02:00
Eduard Burtescu
3f9eba1c7c rustc: clean up lookup_item_type and remove TypeScheme. 2016-11-10 16:49:53 +02:00
Nicholas Nethercote
00e48affde Replace FnvHasher use with FxHasher.
This speeds up compilation by 3--6% across most of rustc-benchmarks.
2016-11-08 15:14:59 +11:00