Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Avoid intermediate allocation | Shotaro Yamada | 2019-09-25 | 1 | -1/+1 |
| | |||||
* | Give closures types | Florian Diebold | 2019-09-24 | 1 | -1/+22 |
| | |||||
* | Handle associated type shorthand (`T::Item`) | Florian Diebold | 2019-09-22 | 1 | -2/+2 |
| | | | | | | | | | | | | This is only allowed for generic parameters (including `Self` in traits), and special care needs to be taken to not run into cycles while resolving it, because we use the where clauses of the generic parameter to find candidates for the trait containing the associated type, but the where clauses may themselves contain instances of short-hand associated types. In some cases this is even fine, e.g. we might have `T: Trait<U::Item>, U: Iterator`. If there is a cycle, we'll currently panic, which isn't great, but better than overflowing the stack... | ||||
* | Upgrade Chalk | Florian Diebold | 2019-09-14 | 1 | -45/+0 |
| | | | | ... and remove Ty::UnselectedProjection. It'll be handled differently. | ||||
* | rename AdtDef -> Adt | Aleksey Kladov | 2019-09-12 | 1 | -6/+6 |
| | |||||
* | Make type walking infrastructure a bit nicer | Florian Diebold | 2019-09-03 | 1 | -113/+120 |
| | | | | | If/when we switch to using Chalk's Ty, we'll need to replace this by its `Fold` trait, but I didn't want to import the whole thing just yet. | ||||
* | Properly format `impl Trait<Type = Foo>` types | Florian Diebold | 2019-09-03 | 1 | -19/+93 |
| | | | | | | It's a bit complicated because we basically have to 'undo' the desugaring, and the result is very dependent on the specifics of the desugaring and will probably produce weird results otherwise. | ||||
* | Add support for associated type bindings (`where Trait<Type = X>`) | Florian Diebold | 2019-09-03 | 1 | -0/+33 |
| | |||||
* | Handle impl/dyn Trait in method resolution | Florian Diebold | 2019-08-22 | 1 | -0/+13 |
| | | | | | | | | | | | | | When we have one of these, the `Trait` doesn't need to be in scope to call its methods. So we need to consider this when looking for method candidates. (Actually I think the same is true when we have a bound `T: some::Trait`, but we don't handle that yet). At the same time, since Chalk doesn't handle these types yet, add a small hack to skip Chalk in method resolution and just consider `impl Trait: Trait` always true. This is enough to e.g. get completions for `impl Trait`, but since we don't do any unification we won't infer the return type of e.g. `impl Into<i64>::into()`. | ||||
* | Add `impl Trait` and `dyn Trait` types | Florian Diebold | 2019-08-22 | 1 | -10/+110 |
| | | | | | | | - refactor bounds handling in the AST a bit - add HIR for bounds - add `Ty::Dyn` and `Ty::Opaque` variants and lower `dyn Trait` / `impl Trait` syntax to them | ||||
* | Improve debug logging a bit | Florian Diebold | 2019-08-12 | 1 | -0/+14 |
| | |||||
* | Add representations of associated types | Florian Diebold | 2019-08-12 | 1 | -0/+86 |
| | | | | | | | | | | | | This adds three different representations, copied from the Chalk model: - `Ty::Projection` is an associated type projection written somewhere in the code, like `<Foo as Trait>::Bar`. - `Ty::UnselectedProjection` is similar, but we don't know the trait yet (`Foo::Bar`). - The above representations are normalized to their actual types during type inference. When that isn't possible, for example for `T::Item` inside an `fn foo<T: Iterator>`, the type is normalized to an application type with `TypeCtor::AssociatedType`. | ||||
* | provide completion in struct patterns | Ekaterina Babshukova | 2019-07-21 | 1 | -1/+1 |
| | |||||
* | Some renamings for clarity | Florian Diebold | 2019-07-14 | 1 | -1/+1 |
| | |||||
* | Unify `normalize` and `implements` to simplify code | Florian Diebold | 2019-07-08 | 1 | -1/+1 |
| | |||||
* | Refactor a bit & introduce Environment struct | Florian Diebold | 2019-07-08 | 1 | -1/+1 |
| | |||||
* | Add trait obligations for where clauses when calling functions/methods | Florian Diebold | 2019-07-06 | 1 | -2/+2 |
| | | | | | E.g. if we call `foo<T: Into<u32>>(x)`, that adds an obligation that `x: Into<u32>`, etc. | ||||
* | allow rustfmt to reorder imports | Aleksey Kladov | 2019-07-04 | 1 | -5/+8 |
| | | | | | | This wasn't a right decision in the first place, the feature flag was broken in the last rustfmt release, and syntax highlighting of imports is more important anyway | ||||
* | Simplifications / cleanup from review | Florian Diebold | 2019-06-16 | 1 | -0/+1 |
| | |||||
* | Somewhat handle variables in the derefed type, and add another test | Florian Diebold | 2019-06-15 | 1 | -0/+11 |
| | |||||
* | Implement autoderef using the Deref trait | Florian Diebold | 2019-06-15 | 1 | -2/+3 |
| | | | | - add support for other lang item targets, since we need the Deref lang item | ||||
* | Add basic infrastructure for assoc type projection | Florian Diebold | 2019-06-15 | 1 | -1/+10 |
| | |||||
* | Fix clippy::or_fun_call | Alan Du | 2019-06-04 | 1 | -1/+1 |
| | |||||
* | add union to code_model | Aleksey Kladov | 2019-05-23 | 1 | -0/+1 |
| | |||||
* | profile type inference | Aleksey Kladov | 2019-05-21 | 1 | -1/+1 |
| | |||||
* | Add infer for generic default type | Edwin Cheng | 2019-05-19 | 1 | -1/+1 |
| | |||||
* | Handle where clauses in trait solving | Florian Diebold | 2019-05-11 | 1 | -1/+30 |
| | |||||
* | Add a HirDisplay implementation for TraitRef | Florian Diebold | 2019-05-07 | 1 | -0/+17 |
| | |||||
* | Turn `implements` into a query again | Florian Diebold | 2019-05-07 | 1 | -1/+1 |
| | |||||
* | Differentiate Tuple / FnPtr type constructors by cardinality | Florian Diebold | 2019-05-04 | 1 | -7/+9 |
| | | | | | This is necessary because Chalk (reasonably) expects each 'struct' to know how many type parameters it takes. | ||||
* | Simplify subst / subst_bound_vars a bit | Florian Diebold | 2019-05-04 | 1 | -12/+2 |
| | |||||
* | Canonicalize before doing method resolution | Florian Diebold | 2019-05-04 | 1 | -0/+11 |
| | |||||
* | Implement Deref<Target=[Ty]> for Substs | Florian Diebold | 2019-05-04 | 1 | -17/+18 |
| | |||||
* | Chalk integration | Florian Diebold | 2019-05-04 | 1 | -1/+48 |
| | | | | | - add proper canonicalization logic - add conversions from/to Chalk IR | ||||
* | Add Ty::Bound variant for use in Chalk integration | Florian Diebold | 2019-05-04 | 1 | -2/+7 |
| | |||||
* | Make callable signature handling a bit nicer | Florian Diebold | 2019-04-14 | 1 | -0/+22 |
| | |||||
* | More trait infrastructure | Florian Diebold | 2019-04-14 | 1 | -0/+11 |
| | | | | | | | | | | - make it possible to get parent trait from method - add 'obligation' machinery for checking that a type implements a trait (and inferring facts about type variables from that) - handle type parameters of traits (to a certain degree) - improve the hacky implements check to cover enough cases to exercise the handling of traits with type parameters - basic canonicalization (will probably also be done by Chalk) | ||||
* | Make call info to use real name resolution | Aleksey Kladov | 2019-04-11 | 1 | -2/+12 |
| | |||||
* | Added ArrayExprKind, | Lenard Pratt | 2019-04-07 | 1 | -1/+1 |
| | | | | | changed the display for fixed array types, Added Array Enum to ra_hir/expr | ||||
* | Added inference of array length | Lenard Pratt | 2019-04-07 | 1 | -1/+5 |
| | |||||
* | Implement a very naive implements check | Florian Diebold | 2019-03-25 | 1 | -4/+19 |
| | | | | ... to make the infer_trait_method_simple test have the correct result. | ||||
* | Assert in apply_substs that the number of parameters doesn't change | Florian Diebold | 2019-03-21 | 1 | -1/+6 |
| | | | | ... and fix a small bug revealed by that. | ||||
* | Rename name field to ctor as well | Florian Diebold | 2019-03-21 | 1 | -14/+14 |
| | |||||
* | Some more doc comments | Florian Diebold | 2019-03-21 | 1 | -2/+12 |
| | |||||
* | TypeName => TypeCtor | Florian Diebold | 2019-03-21 | 1 | -24/+24 |
| | |||||
* | Remove the old variants replaced by Ty::Apply | Florian Diebold | 2019-03-21 | 1 | -197/+41 |
| | |||||
* | Add Ty::Apply | Florian Diebold | 2019-03-21 | 1 | -1/+177 |
| | |||||
* | Represent FnPtr and Tuple using Substs | Florian Diebold | 2019-03-21 | 1 | -15/+19 |
| | |||||
* | Remove FnSig from FnDef type | Florian Diebold | 2019-03-16 | 1 | -12/+6 |
| | | | | | It doesn't need to be in there since it's just information from the def. Another step towards aligning Ty with Chalk's representation. | ||||
* | Refactor FnSig a bit | Florian Diebold | 2019-03-16 | 1 | -34/+47 |
| |