aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/infer
Commit message (Collapse)AuthorAgeFilesLines
* Implement Chalk variable kindsFlorian Diebold2020-07-011-15/+40
| | | | | | | | | This means we need to keep track of the kinds (general/int/float) of variables in `Canonical`, which requires some more ceremony. (It also exposes some places where we're not really dealing with canonicalization correctly -- another thing to be cleaned up when we switch to using Chalk's types directly.) Should fix the last remaining issue of #2534.
* Simlify with matches!()Veetaha2020-06-281-5/+1
|
* Rename Expr::UnsafeBlock to Expr::UnsafePaul Daniel Faria2020-06-271-1/+1
|
* Track unsafe blocks, don't trigger missing unsafe diagnostic when unsafe ↵Paul Daniel Faria2020-06-271-0/+1
| | | | exprs within unsafe block
* Infer type for slice wildcard patternsadamrk2020-06-251-2/+7
|
* Fix string literal inference in matchLaurențiu Nicola2020-06-241-13/+20
|
* Push obligation instead of matching on solutionadamrk2020-06-201-41/+36
|
* Get Output assoc type by nameadamrk2020-06-201-13/+3
|
* Fixes to callable_sig_from_fn_traitadamrk2020-06-201-65/+65
|
* Make get_fn_trait a method of FnTraitadamrk2020-06-201-2/+2
|
* Switch back callable_sig for known fn typesadamrk2020-06-202-4/+4
|
* Infer FnSig from Fn traitsadamrk2020-06-192-16/+92
|
* Fix substs in resolve_value_path for ImplSelfVincent Rouillé2020-06-191-1/+1
| | | | Fixes #4953.
* Clean up handling of int/float literal typesFlorian Diebold2020-06-061-16/+12
| | | | | | 'Unknown' int/float types actually never exist as such, they get replaced by type variables immediately. So the whole `Uncertain<IntTy>` thing was unnecessary and just led to a bunch of match branches that were never hit.
* Fix type parameter defaultsFlorian Diebold2020-06-051-1/+2
| | | | | They should not be applied in expression or pattern contexts, unless there are other explicitly given type args.
* correctly infer labelled breaksrobojumper2020-05-311-16/+29
|
* Merge #4653bors[bot]2020-05-301-5/+11
|\ | | | | | | | | | | | | | | 4653: Fix match ergonomics in closure parameters r=matklad a=flodiebold Fixes #4476. Co-authored-by: Florian Diebold <[email protected]>
| * Fix match ergonomics in closure parametersFlorian Diebold2020-05-291-5/+11
| | | | | | | | Fixes #4476.
* | Merge #4651bors[bot]2020-05-291-3/+1
|\ \ | |/ |/| | | | | | | | | | | | | | | | | 4651: Use first match branch in case of type mismatch, not last r=kjeremy a=flodiebold The comment says this was intentional, but I do agree with #4304 that it makes more sense the other way around (for if/else as well). Fixes #4304. Co-authored-by: Florian Diebold <[email protected]>
| * Use first match branch in case of type mismatch, not lastFlorian Diebold2020-05-291-3/+1
| | | | | | | | | | | | | | The comment says this was intentional, but I do agree with #4304 that it makes more sense the other way around (for if/else as well). Fixes #4304.
* | Support raw_ref_op's raw reference operatorrobojumper2020-05-281-14/+23
|/
* Switch to new magic marksAleksey Kladov2020-05-203-9/+9
|
* Apply suggestion of @flodiebold: Get rid of multiple unwrapsRoland Ruckerbauer2020-05-191-12/+10
|
* loop return value inference: coerce_merge branchesRoland Ruckerbauer2020-05-191-15/+23
|
* Infer return type of loops with value breaks.Roland Ruckerbauer2020-05-181-6/+15
|
* Handle `Self` in values and patternsFlorian Diebold2020-05-151-1/+34
| | | | | | | | | I.e. - `Self(x)` or `Self` in tuple/unit struct impls - `Self::Variant(x)` or `Self::Variant` in enum impls - the same in patterns Fixes #4454.
* Handle coercing function types to function pointers in matchFlorian Diebold2020-05-081-11/+23
| | | | | | | | | | | | E.g. in ```rust match x { 1 => function1, 2 => function2, } ``` we need to try coercing both to pointers. Turns out this is a special case in rustc as well (see the link in the comment).
* Add diagnostic for break outside of loopFlorian Diebold2020-05-081-0/+4
|
* Handle break somewhat betterFlorian Diebold2020-05-081-2/+27
| | | | | Still no break-with-value or labels, but at least we know that `loop { break; }` doesn't diverge.
* Implement better handling of divergenceFlorian Diebold2020-05-081-14/+39
| | | | | | | | Divergence here means that for some reason, the end of a block will not be reached. We tried to model this just using the never type, but that doesn't work fully (e.g. in `let x = { loop {}; "foo" };` x should still have type `&str`); so this introduces a `diverges` flag that the type checker keeps track of, like rustc does.
* Fix type of byte literalsFlorian Diebold2020-05-081-2/+2
| | | | They're `&[u8; N]`, not `&[u8]` (see #4374).
* Revert "Merge #4233"Aleksey Kladov2020-05-021-0/+5
| | | | | This reverts commit a5f2b16366f027ad60c58266a66eb7fbdcbda9f9, reversing changes made to c96b2180c1c4206a0a98c280b4d30897eb116336.
* Kill more zombiesAleksey Kladov2020-04-301-5/+0
|
* Rename StructField -> FieldAleksey Kladov2020-04-252-7/+5
|
* Fix goto definition for record patternsAleksey Kladov2020-04-181-0/+6
|
* Fix type equality for dyn TraitFlorian Diebold2020-04-172-5/+41
| | | | | | | Fixes a lot of false type mismatches. (And as always when touching the unification code, I have to say I'm looking forward to replacing it by Chalk's...)
* Switch Chalk to recursive solverFlorian Diebold2020-04-161-0/+1
| | | | + various fixes related to that.
* handle tuple patterns with ellipsisJosh Mcguigan2020-04-131-3/+3
|
* add record pat missing field diagnosticJosh Mcguigan2020-04-101-1/+1
|
* missing match arms diagnosticJosh Mcguigan2020-04-072-3/+15
|
* Upgrade Chalk againFlorian Diebold2020-04-051-11/+17
| | | | | | | The big change here is counting binders, not variables (https://github.com/rust-lang/chalk/pull/360). We have to adapt to the same scheme for our `Ty::Bound`. It's mostly fine though, even makes some things more clear.
* Add inference for literal and range patternsFlorian Diebold2020-04-011-2/+9
|
* Use `dyn Trait` for working with databseAleksey Kladov2020-03-165-37/+35
| | | | | | | It improves compile time in `--release` mode quite a bit, it doesn't really slow things down and, conceptually, it seems closer to what we want the physical architecture to look like (we don't want to monomorphise EVERYTHING in a single leaf crate).
* Resolve `Self::AssocTy` in implsFlorian Diebold2020-03-061-2/+2
| | | | | | | | | | To do this we need to carry around the original resolution a bit, because `Self` gets resolved to the actual type immediately, but you're not allowed to write the equivalent type in a projection. (I tried just comparing the projection base type with the impl self type, but that seemed too dirty.) This is basically how rustc does it as well. Fixes #3249.
*-. Merge #3397 #3398bors[bot]2020-03-021-6/+2
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3397: Minimal viable meta r=matklad a=matklad bors r+ 🤖 3398: Reformat? r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| | * Reformat?Aleksey Kladov2020-03-021-6/+2
| |/
* | Merge #3385bors[bot]2020-03-021-3/+12
|\ \ | |/ |/| | | | | | | | | | | | | | | | | 3385: Fix #3373 r=matklad a=flodiebold Basically, we need to allow variables in the caller self type to unify with the impl's declared self type. That requires some more contortions in the variable handling. I'm looking forward to (hopefully) handling this in a cleaner way when we switch to Chalk's types and unification code. Co-authored-by: Florian Diebold <[email protected]>
| * Fix #3373Florian Diebold2020-03-011-3/+12
| | | | | | | | | | | | | | Basically, we need to allow variables in the caller self type to unify with the impl's declared self type. That requires some more contortions in the variable handling. I'm looking forward to (hopefully) handling this in a cleaner way when we switch to Chalk's types and unification code.
* | handle array pattern matching type inferenceJosh Mcguigan2020-03-011-10/+14
| |
* | remove match statement, handle suffixJosh Mcguigan2020-03-011-12/+9
| |