summary refs log tree commit diff
path: root/src/librustc/ty/structural_impls.rs
AgeCommit message (Collapse)AuthorLines
2017-06-01strip param-env from infcxNiko Matsakis-0/+25
2017-06-01Auto merge of #42281 - eddyb:well-adjusted, r=nikomatsakisbors-25/+98
Decompose Adjustment into smaller steps and remove the method map. The method map held method callee information for: * actual method calls (`x.f(...)`) * overloaded unary, binary, indexing and call operators * *every overloaded deref adjustment* (many can exist for each expression) That last one was a historical ~~accident~~ hack, and part of the motivation for this PR, along with: * a desire to compose adjustments more freely * containing the autoderef logic better to avoid mutation within an inference snapshot * not creating `TyFnDef` types which are incompatible with the original one * i.e. we used to take a`TyFnDef`'s `for<'a> &'a T -> &'a U` signature and instantiate `'a` using a region inference variable, *then* package the resulting `&'b T -> &'b U` signature in another `TyFnDef`, while keeping *the same* `DefId` and `Substs` * to fix #3548 by explicitly writing autorefs for the RHS of comparison operators Individual commits tell their own story, of "atomic" changes avoiding breaking semantics. Future work based on this PR could include: * removing the signature from `TyFnDef`, now that it's always "canonical" * some questions of variance remain, as subtyping *still* treats the signature differently * moving part of the typeck logic for methods, autoderef and coercion into `rustc::traits` * allowing LUB coercions (joining multiple expressions) to "stack up" many adjustments * transitive coercions (e.g. reify or unsize after multiple steps of autoderef) r? @nikomatsakis
2017-06-01rustc: decompose Adjustment into a vector of adjustment steps.Eduard-Mihai Burtescu-22/+25
2017-06-01rustc: move autoref and unsize from Adjust::DerefRef to Adjustment.Eduard-Mihai Burtescu-17/+18
2017-06-01rustc: replace autoderefs' use of MethodCallee with OverloadedDeref.Eduard-Mihai Burtescu-0/+108
2017-06-01rustc: remove unused TypeFolder methods.Eduard-Mihai Burtescu-16/+0
2017-06-01rustc: remove unnecessary ItemSubsts wrapper.Eduard-Mihai Burtescu-23/+0
2017-05-31Upgrade ProjectionTy's Name to a DefIdTobias Schottdorf-5/+2
Part of #42171, in preparation for downgrading the contained `TraitRef` to only its `substs`.
2017-04-30intern CodeExtentsNiko Matsakis-1/+1
Make a `CodeExtent<'tcx>` be something allocated in an arena instead of an index into the `RegionMaps`.
2017-04-11add Subtype predicateNiko Matsakis-2/+33
2017-03-26store a copy of the Issue32230 info within TypeErrorAriel Ben-Yehuda-4/+6
The data can't be looked up from the region variable directly, because the region variable might have been destroyed at the end of a snapshot. Fixes #40000. Fixes #40743.
2017-03-10Add extra methods to IndexVec and implement TypeFoldable for itJames Miller-0/+11
Adds `get`/`get_mut` accessors and `drain`/`drain_enumerated` iterators to IndexVec. Implements TypeFoldable for IndexVec.
2017-02-25rustc: combine BareFnTy and ClosureTy into FnSig.Eduard-Mihai Burtescu-50/+4
2017-02-25rustc: store type parameter defaults outside of ty::Generics.Eduard-Mihai Burtescu-35/+1
2017-02-03Add warning for () to ! switchAndrew Cann-2/+2
2017-01-30Merge ty::TyBox into ty::TyAdtVadim Petrochenkov-2/+0
2017-01-28rustc: remove unused `bounds` field from `RegionParameterDef`.Eduard-Mihai Burtescu-17/+1
2017-01-28rustc: move object default lifetimes to resolve_lifetimes.Eduard-Mihai Burtescu-25/+1
2016-12-05Refactor FnSig to contain a Slice for its inputs and outputs.Mark-Simulacrum-8/+12
2016-12-05Refactor ty::FnSig to privatize all fieldsMark-Simulacrum-11/+7
2016-11-28Refactor TyTrait to contain a interned ExistentialPredicate slice.Mark-Simulacrum-12/+28
Renames TyTrait to TyDynamic.
2016-11-28Remove BuiltinBound and BuiltinBounds.Mark-Simulacrum-11/+0
2016-11-28Refactor BuiltinBounds to Vec<DefId> on TraitObject.Mark-Simulacrum-1/+1
2016-11-28Privatize TraitObject.principal and add a method accessor, returning Option.Mark-Simulacrum-7/+7
2016-11-28rustc_privacy: visit Ty instead of HIR types in EmbargoVisitor.Eduard-Mihai Burtescu-0/+34
2016-11-24Avoid more unnecessary mk_ty calls in Ty::super_fold_with.Nicholas Nethercote-1/+6
This speeds up several rustc-benchmarks by 1--5%.
2016-11-12rustc: move closure upvar types to the closure substsAriel Ben-Yehuda-8/+4
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-11Avoid unnecessary mk_ty calls in Ty::super_fold_with.Nicholas Nethercote-1/+1
This speeds up compilation of several rustc-benchmarks by 1--2% and the workload in #36799 by 5%.
2016-11-02rustc: record the target type of every adjustment.Eduard Burtescu-12/+12
2016-10-25Utilize AccumulateVec to avoid heap allocations in mk_{substs, type_list, ↵Mark-Simulacrum-2/+3
tup} calls.
2016-10-19Use TypedArena::alloc_slice in rustc.Mark-Simulacrum-2/+2
2016-10-19Rollup merge of #37117 - pnkfelix:may-dangle-attr, r=nikomatsakisEduard-Mihai Burtescu-0/+2
`#[may_dangle]` attribute `#[may_dangle]` attribute Second step of #34761. Last big hurdle before we can work in earnest towards Allocator integration (#32838) Note: I am not clear if this is *also* a syntax-breaking change that needs to be part of a breaking-batch.
2016-10-14add a per-param-env cache to `impls_bound`Ariel Ben-Yehuda-17/+0
There used to be only a global cache, which led to uncached calls to trait selection when there were type parameters. I'm running a check that there are no adverse performance effects. Fixes #37106 (drop elaboration times are now ~half of borrow checking, so might still be worthy of optimization, but not critical).
2016-10-11Thread `pure_wrt_drop` field through lifetime and type parameters.Felix S. Klock II-0/+2
2016-09-28Remove unused `TypeError` variantsJonas Schievink-7/+0
These weren't flagged by the lint because they were still technically created somewhere... if you created them before, somehow.
2016-09-20rustc_metadata: remove ty{en,de}code and move to auto-derived serialization.Eduard Burtescu-12/+1
2016-09-08Refactor `TyStruct`/`TyEnum`/`TyUnion` into `TyAdt`Vadim Petrochenkov-6/+2
2016-09-03Add union typesVadim Petrochenkov-0/+2
2016-09-01turn the RFC1592 warnings into hard errorsAriel Ben-Yehuda-6/+0
The warnings have already reached stable The test rfc1592_deprecated is covered by `bad_sized` and `unsized6`. Fixes #33242 Fixes #33243
2016-08-27rustc: pass ty::Region behind an interned 'tcx reference.Eduard Burtescu-34/+16
2016-08-27rustc: use accessors for Substs::{types,regions}.Eduard Burtescu-17/+0
2016-08-17rustc: remove ParamSpace from Substs.Eduard Burtescu-13/+1
2016-08-17rustc: split GenericPredicates of a method from its parent predicates.Eduard Burtescu-12/+0
2016-08-17rustc: split Generics of a method from its parent Generics.Eduard Burtescu-14/+0
2016-08-17rustc: reduce Substs and Generics to a simple immutable API.Eduard Burtescu-20/+6
2016-08-17rustc: move trait objects from TraitRef to ExistentialTraitRef.Eduard Burtescu-29/+61
2016-08-17rustc: force all raw accesses to VecPerParamSpace through as_full_slice.Eduard Burtescu-1/+1
2016-08-13Rename empty/bang to neverAndrew Cann-2/+2
Split Ty::is_empty method into is_never and is_uninhabited
2016-08-13Remove obsolete divergence related stuffAndrew Cann-32/+0
Replace FnOutput with Ty Replace FnConverging(ty) with ty Purge FnDiverging, FunctionRetTy::NoReturn and FunctionRetTy::None
2016-08-13Start implementation of RFC 1216 (make ! a type)Andrew Cann-2/+2
Add `TyKind::Empty` and fix resulting build errors.