aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src/infer
Commit message (Collapse)AuthorAgeFilesLines
* Remove Ty::substs{_mut}Florian Diebold2021-04-072-3/+8
| | | | | | Almost all uses actually only care about ADT substs, so it's better to be explicit. The methods were a bad abstraction anyway since they already didn't include the inner types of e.g. `TyKind::Ref` anymore.
* Remove `SolutionVariables`, add ConstrainedSubst analogous to ChalkFlorian Diebold2021-04-061-2/+9
| | | | ... just missing the constraints.
* Align `InferenceVar` to ChalkFlorian Diebold2021-04-061-12/+24
|
* infer: remove `record_pat_field_resolutions` fieldJonas Schievink2021-04-061-6/+0
| | | | | Same as https://github.com/rust-analyzer/rust-analyzer/pull/8376, this can be computed from other data
* infer: remove `record_field_resolutions` fieldJonas Schievink2021-04-062-9/+6
| | | | | It stores no useful data, since we can derive all fields from `variant_resolutions`
* Merge #8364bors[bot]2021-04-062-4/+10
|\ | | | | | | | | | | | | | | | | | | 8364: Memory usage improvements r=jonas-schievink a=alexmaco These are mostly focused on splitting up enum variants with large size differences between variants by `Box`-ing things up. In my testing this reduces the memory usage somewhere in the low percentages, even though the measurements are quite noisy. Co-authored-by: Alexandru Macovei <[email protected]>
| * Use Box'es to reduce the size of hir_def::expr::Pat from 112 to 64 bytes on ↵Alexandru Macovei2021-04-061-2/+2
| | | | | | | | 64bit
| * Use Box'es to reduce size of hir_def::expr::Expr from 128 to 72 bytes (on ↵Alexandru Macovei2021-04-061-2/+8
| | | | | | | | | | | | | | | | | | | | 64bit systems) Rationale: only a minority of variants used almost half the size. By keeping large members (especially in Option) behind a box the memory cost is only payed when the large variants are needed. This reduces the size Vec<Expr> needs to allocate.
* | Move Ty accessors to TyExtLukas Wirth2021-04-064-4/+7
| |
* | Add chalk_ir::Const to TyKind::ArrayLukas Wirth2021-04-063-10/+16
| |
* | Use a constructor function for Static lifetimesLukas Wirth2021-04-062-22/+14
| |
* | Add Lifetime to TyKind::RefLukas Wirth2021-04-064-18/+32
|/
* Fix shifting of binders in FnPointerFlorian Diebold2021-04-051-2/+4
| | | | | | | | | - don't shift in/out for Chalk mapping (we want to have the same binders now) - do shift in when creating the signature for a closure (though it shouldn't matter much) - do shift in when lowering a `fn()` type - correctly deal with the implied binder in TypeWalk
* Align FnPointer with ChalkFlorian Diebold2021-04-052-7/+7
|
* Substitution::prefix -> subst_prefixFlorian Diebold2021-04-051-2/+4
| | | | I probably want to get rid of this function completely later.
* Substitution::single -> from1Florian Diebold2021-04-051-2/+4
|
* Move ProjectionTy methods to extension traitFlorian Diebold2021-04-051-2/+2
|
* Get rid of subst_bound_vars usesFlorian Diebold2021-04-051-3/+3
|
* Get rid of some walk_mut usesFlorian Diebold2021-04-051-6/+9
|
* Add Interner parameter to Binders::substituteFlorian Diebold2021-04-053-12/+18
|
* Binders::subst -> substituteFlorian Diebold2021-04-053-10/+10
|
* Use VariableKinds in BindersFlorian Diebold2021-04-051-2/+2
|
* Rename TyKind::Unknown to ErrorLaurențiu Nicola2021-04-052-4/+4
|
* Move things from `traits` module to `types` as wellFlorian Diebold2021-04-042-4/+4
|
* Move things in hir_ty into submodulesFlorian Diebold2021-04-044-9/+5
| | | | | - all the types that will be replaced by Chalk go to `types` - `TypeWalk` impls go to `walk`
* Replace Substitution::bound_vars and ::type_params_for_genericsFlorian Diebold2021-04-041-1/+1
|
* Replace last uses of SubstsBuilder by TyBuilderFlorian Diebold2021-04-043-14/+7
|
* Some more TyBuilder useFlorian Diebold2021-04-041-29/+25
|
* Replace remaining uses of Substitution::build_for_defFlorian Diebold2021-04-042-5/+2
|
* More TyBuilder useFlorian Diebold2021-04-041-12/+9
|
* Add and start using TraitRef and ProjectionTy buildersFlorian Diebold2021-04-041-12/+4
|
* Add TyBuilder::adtFlorian Diebold2021-04-042-36/+17
|
* Move Ty::fn_ptr to TyBuilderFlorian Diebold2021-04-041-4/+5
|
* Add TyBuilder::unit() and TyExt::is_unit()Florian Diebold2021-04-041-11/+11
|
* Rename Ty::interned to Ty::kindFlorian Diebold2021-04-035-19/+19
| | | | ... since that's the actual method on Chalk side that matches the signature.
* Introduce `GenericArg` like in ChalkFlorian Diebold2021-04-035-46/+58
| | | | | | | Plus some more adaptations to Substitution. Lots of `assert_ty_ref` that we should revisit when introducing lifetime/const parameters.
* Don't recheck obligations if we have learned nothing newFlorian Diebold2021-04-013-5/+11
| | | | | | | | | | This is just the most trivial check: If no inference variables have been updated, and there are no new obligations, we can just skip trying to solve them again. We could be smarter about it, but this already helps quite a bit, and I don't want to touch this too much before we replace the inference table by Chalk's. Fixes #8263 (well, improves it quite a bit).
* internal: ensure that runaway type-inference doesn't block the main loopAleksey Kladov2021-03-291-0/+2
| | | | | | We have a bug where type-checking `per_query_memory_usage` takes a couple of seconds. It also reveals another bug: our type inference is not cancellable.
* Merge #8201bors[bot]2021-03-271-0/+1
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8201: Fix recursive macro statements expansion r=edwin0cheng a=edwin0cheng This PR attempts to properly handle macro statement expansion by implementing the following: 1. Merge macro expanded statements to parent scope statements. 2. Add a new hir `Expr::MacroStmts` for handle tail expression infer. PS : The scope of macro expanded statements are so strange that it took more time than I thought to understand and implement it :( Fixes #8171 Co-authored-by: Edwin Cheng <[email protected]>
| * Fix recursive macro statement expansionEdwin Cheng2021-03-251-0/+1
| |
* | completion relevance consider if types can be unifiedJosh Mcguigan2021-03-261-0/+4
|/
* Merge #7907bors[bot]2021-03-242-12/+34
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7907: Autoderef with visibility r=cynecx a=cynecx Fixes https://github.com/rust-analyzer/rust-analyzer/issues/7841. I am not sure about the general approach here. Right now this simply tries to check whether the autoderef candidate is reachable from the current module. ~~However this doesn't exactly work with traits (see the `tests::macros::infer_derive_clone_in_core` test, which fails right now).~~ see comment below Refs: - `rustc_typeck` checking fields: https://github.com/rust-lang/rust/blob/66ec64ccf31883cd2c28d045912a76179c0c6ed2/compiler/rustc_typeck/src/check/expr.rs#L1610 r? @flodiebold Co-authored-by: cynecx <[email protected]>
| * hir_ty: don't call write_field_resolution when field candidate isn't visiblecynecx2021-03-241-6/+4
| |
| * hir_ty: introduce visible_from_module param into method resolutioncynecx2021-03-202-0/+2
| |
| * hir_ty: check field visibility while iterating through autoderef candidatescynecx2021-03-201-14/+36
| |
* | Merge #8139bors[bot]2021-03-223-30/+43
|\ \ | | | | | | | | | | | | | | | | | | | | | 8139: Align `Canonical` and `InEnvironment` with the Chalk versions r=flodiebold a=flodiebold Co-authored-by: Florian Diebold <[email protected]>
| * | Align InEnvironment with ChalkFlorian Diebold2021-03-213-16/+13
| | | | | | | | | | | | | | | | | | This in particular means storing a chalk_ir::Environment, not our TraitEnvironment. This makes InEnvironment not usable for Type, where we need to keep the full TraitEnvironment.
| * | Align Canonical more with Chalk's versionFlorian Diebold2021-03-211-14/+30
| | | | | | | | | | | | In particular, use chalk_ir::CanonicalVarKinds.
* | | Merge #8136 #8146bors[bot]2021-03-222-4/+16
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8136: Introduce QuantifiedWhereClause and DynTy analogous to Chalk r=flodiebold a=flodiebold This introduces a bunch of new binders in lots of places, which we have to be careful about, but we had to add them at some point. There's a lot of skipping of the binders; once we're done with the Chalk move, we should review the remaining ones. 8146: Document patch policy r=matklad a=matklad bors r+ 🤖 Co-authored-by: Florian Diebold <[email protected]> Co-authored-by: Aleksey Kladov <[email protected]>
| * | Use QuantifiedWhereClause in generic_predicates as wellFlorian Diebold2021-03-211-1/+4
| | | | | | | | | | | | | | | Still far too much binder skipping going on; I find it hard to imagine this is all correct, but the tests pass.