aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src/infer/expr.rs
Commit message (Collapse)AuthorAgeFilesLines
* Don't recheck obligations if we have learned nothing newFlorian Diebold2021-04-011-3/+3
| | | | | | | | | | 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.
* Fix recursive macro statement expansionEdwin Cheng2021-03-251-0/+1
|
* Merge #7907bors[bot]2021-03-241-12/+33
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-201-0/+1
| |
| * hir_ty: check field visibility while iterating through autoderef candidatescynecx2021-03-201-14/+36
| |
* | Merge #8139bors[bot]2021-03-221-8/+8
|\ \ | | | | | | | | | | | | | | | | | | | | | 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-211-8/+8
| | | | | | | | | | | | | | | | | | 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.
* | | Merge #8136 #8146bors[bot]2021-03-221-1/+4
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* / Fix box pattern inference panicLukas Wirth2021-03-211-3/+3
|/
* Turn Obligation into something similar to chalk_ir::DomainGoalFlorian Diebold2021-03-201-14/+11
| | | | This includes starting to make use of Chalk's `Cast` trait.
* Chalkify TraitRefFlorian Diebold2021-03-181-4/+9
|
* Rename Substs -> SubstitutionFlorian Diebold2021-03-161-18/+19
|
* Merge #8018bors[bot]2021-03-151-12/+9
|\ | | | | | | | | | | | | | | | | | | 8018: Make Ty wrap TyKind in an Arc r=flodiebold a=flodiebold ... to further move towards Chalk. This is a bit of a slowdown (218ginstr vs 213ginstr for inference on RA), even though it allows us to unwrap the Substs in `TyKind::Ref` etc.. Co-authored-by: Florian Diebold <[email protected]>
| * Don't use Substs for Ref/Raw/Array/SliceFlorian Diebold2021-03-141-11/+8
| |
| * Make Ty wrap TyKind in an ArcFlorian Diebold2021-03-141-1/+1
| | | | | | | | | | | | | | | | ... like it will be in Chalk. We still keep `interned_mut` and `into_inner` methods that will probably not exist with Chalk. This worsens performance slightly (5ginstr inference on RA), but doesn't include other simplifications we can do yet.
* | Simplify source maps for fieldsAleksey Kladov2021-03-151-3/+2
|/
* Use chalk_ir::FnSigFlorian Diebold2021-03-141-1/+1
|
* Rename some fields to their Chalk namesFlorian Diebold2021-03-141-2/+2
|
* Use chalk_ir::OpaqueTyIdFlorian Diebold2021-03-131-3/+4
|
* Use chalk_ir::ClosureIdFlorian Diebold2021-03-131-1/+2
|
* Use chalk_ir::FnDefIdFlorian Diebold2021-03-131-3/+4
|
* Use chalk_ir::AssocTypeIdFlorian Diebold2021-03-131-2/+5
|
* Separate `Ty` and `TyKind` like in ChalkFlorian Diebold2021-03-131-102/+133
| | | | | Currently `Ty` just wraps `TyKind`, but this allows us to change most places to already use `intern` / `interned`.
* Use upstream cov-markLaurențiu Nicola2021-03-081-2/+1
|
* Use chalk_ir::AdtIdLukas Wirth2021-03-041-12/+12
|
* Use chalk_ir::MutabilityLukas Wirth2021-03-011-9/+12
|
* Introduce Ty::AliasLukas Wirth2021-03-011-1/+1
|
* Being Ty::InferenceVar closes to chalk equivalentLukas Wirth2021-03-011-6/+7
|
* Merge #7816bors[bot]2021-02-281-8/+7
|\ | | | | | | | | | | | | | | 7816: Lift Ty::Fn into a struct r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <[email protected]>
| * Lift FnPointer into a structLukas Wirth2021-02-281-8/+7
| |
* | hir_ty: use default type generic for box expressionscynecx2021-02-281-0/+6
|/
* Turn Ty::Tuple variant into a tuple-variantLukas Wirth2021-02-281-4/+4
|
* Inline TypeCtor into TyLukas Wirth2021-02-281-143/+95
|
* Use chalk_ir::Scalar directlyLukas Wirth2021-02-281-6/+10
|
* Introduce TypeCtor::ScalarLukas Wirth2021-02-281-17/+46
|
* Put the old resolver backJonas Schievink2021-02-101-3/+8
|
* infer: update resolver when descending into blockJonas Schievink2021-02-101-16/+20
|
* Use block_def_map in body loweringJonas Schievink2021-02-031-1/+1
|
* Revert "Use block_def_map in body lowering"Jonas Schievink2021-02-021-1/+1
|
* Use block_def_map in body loweringJonas Schievink2021-02-011-1/+1
|
* Handle box with allocatorThiƩbaud Weksteen2021-01-221-1/+4
| | | | | | | | In 1.49.0, the definition of Box was modified to support an optional Allocator[1]. Adapt the parsing of the `box` keyword to supply the expected number of parameters to the constructor. [1] https://github.com/rust-lang/rust/commit/f288cd2e179f600fa00c2a407206a12f6c5a91e0
* Add support for yiled keywordDaiki Ihara2021-01-151-0/+7
|
* Allow spurious warning from rust-lang/rust#80501Laurențiu Nicola2020-12-301-0/+2
|
* Merge #7021bors[bot]2020-12-241-4/+4
|\ | | | | | | | | | | | | | | 7021: Track labels in the HIR r=matklad a=Veykril Groundwork for #6966 Co-authored-by: Lukas Wirth <[email protected]>
| * Track labels in the HIRLukas Wirth2020-12-241-4/+4
| |
* | Implement const block inferenceLukas Wirth2020-12-231-1/+1
|/
* Ignore lifetime params in substitutionsLukas Wirth2020-12-131-1/+6
|