Florian Diebold
67f1a08fd8
Some remaining cleanups
2021-05-21 18:23:03 +02:00
Florian Diebold
99c73537fa
Remove TypeVariableTable
2021-05-21 17:49:09 +02:00
Florian Diebold
9716c0b949
Deal with goals arising from unification
2021-05-21 17:49:09 +02:00
Florian Diebold
4bd446f5b3
Get rid of resolve_ty_as_possible
...
Instead use shallow resolving where necessary.
2021-05-21 17:49:07 +02:00
Florian Diebold
a78f0076ab
Make resolve_ty_shallow return Ty
2021-05-21 17:48:34 +02:00
Florian Diebold
1250ddc5cf
Rework obligation handling
...
We can't do the easy hack that we did before anymore, where we kept
track of whether any inference variables changed since the last time we
rechecked obligations. Instead, we store the obligations in
canonicalized form; that way we can easily check the inference variables
to see whether they have changed since the goal was canonicalized.
2021-05-21 17:48:34 +02:00
Florian Diebold
a3d9cac690
Fix another panic
2021-05-21 17:48:34 +02:00
Florian Diebold
7c423f5b88
Fix panic
2021-05-21 17:48:34 +02:00
Florian Diebold
8397734cfe
Fix HIR expecting errors to unify with anything
2021-05-21 17:48:34 +02:00
Florian Diebold
212f0477f2
Make diverging type variables work again
...
Chalk doesn't know about the `diverging` flag, so we need to instead
propagate it before fully resolving the variables.
2021-05-21 17:48:34 +02:00
Florian Diebold
afa6be2435
Update tests with expected changes
2021-05-21 17:48:34 +02:00
Florian Diebold
3379a52dff
Make type resolver a proper folder, make it resolve consts as well
2021-05-21 17:48:34 +02:00
Florian Diebold
278f5b043d
Fix fallback to bound vars in unify
2021-05-21 17:48:34 +02:00
Florian Diebold
4ca1981c91
Fix warnings & format
2021-05-21 17:48:34 +02:00
Florian Diebold
693582946f
Rewrite coercion using the new unification
2021-05-21 17:48:33 +02:00
Florian Diebold
84074cb185
Remove our unification code, use Chalk's instead
2021-05-21 17:48:33 +02:00
Comonad
78f1583bdd
fix: closure unify without check ClosureId
...
closes #8604
2021-04-29 15:26:41 +08:00
Florian Diebold
d992736e79
Remove unused
2021-04-08 14:36:14 +02:00
Florian Diebold
a163554857
Fix Canonicalized::apply_solution
...
Now that we're using Chalk's `substitute` which actually knows about
lifetimes, the hack doesn't work anymore, but we can put in a proper
lifetime.
2021-04-08 14:23:17 +02:00
Florian Diebold
a838a60caa
Fix missing match arms
2021-04-08 14:23:17 +02:00
Florian Diebold
0f058d61ce
Replace remaining fold
calls
2021-04-08 14:08:55 +02:00
Florian Diebold
caee3b6c2d
Replace some fold
calls
2021-04-08 14:08:55 +02:00
Florian Diebold
7e541e69b1
Add HasInterner bounds
2021-04-08 14:08:55 +02:00
Florian Diebold
4c35df47e8
Move equals_ctor
to TyExt
...
I'd prefer getting rid of it, but it's used in the impl search and not
super easy to replace there (I think ideally the impl search would do
proper unification, but that's a bit more complicated).
2021-04-07 20:08:50 +02:00
Florian Diebold
768ee3e47a
Align InferenceVar
to Chalk
2021-04-06 21:10:22 +02:00
Lukas Wirth
9fbba7bc45
Add chalk_ir::Const to TyKind::Array
2021-04-06 11:45:41 +02:00
Lukas Wirth
96756f1b1d
Add Lifetime to TyKind::Ref
2021-04-06 10:45:30 +02:00
Florian Diebold
edc59d897d
Align FnPointer with Chalk
2021-04-05 22:23:30 +02:00
Florian Diebold
fbab69cbff
Get rid of subst_bound_vars uses
2021-04-05 19:21:03 +02:00
Florian Diebold
e28f0c98ba
Get rid of some walk_mut uses
2021-04-05 19:21:03 +02:00
Laurențiu Nicola
65c2e51940
Rename TyKind::Unknown to Error
2021-04-05 15:39:06 +03:00
Florian Diebold
508a1ecad3
Move things in hir_ty into submodules
...
- all the types that will be replaced by Chalk go to `types`
- `TypeWalk` impls go to `walk`
2021-04-04 20:22:00 +02:00
Florian Diebold
584d1c9e5b
Replace last uses of SubstsBuilder by TyBuilder
2021-04-04 13:16:39 +02:00
Florian Diebold
c551604b5a
Rename Ty::interned to Ty::kind
...
... since that's the actual method on Chalk side that matches the signature.
2021-04-03 13:08:29 +02:00
Florian Diebold
e480d81988
Introduce GenericArg
like in Chalk
...
Plus some more adaptations to Substitution.
Lots of `assert_ty_ref` that we should revisit when introducing
lifetime/const parameters.
2021-04-03 11:17:13 +02:00
Florian Diebold
0e8c4503bf
Don't recheck obligations if we have learned nothing new
...
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).
2021-04-01 21:45:44 +02:00
Josh Mcguigan
957939292e
completion relevance consider if types can be unified
2021-03-26 09:11:50 -07:00
Florian Diebold
c4fd3f47f5
Align InEnvironment with Chalk
...
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.
2021-03-21 20:19:07 +01:00
Florian Diebold
f7be314579
Align Canonical more with Chalk's version
...
In particular, use chalk_ir::CanonicalVarKinds.
2021-03-21 20:05:38 +01:00
Florian Diebold
590c416359
Introduce QuantifiedWhereClause and DynTy analogous to Chalk
...
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.
2021-03-21 18:01:14 +01:00
Florian Diebold
7ec3b66f7a
Turn Obligation into something similar to chalk_ir::DomainGoal
...
This includes starting to make use of Chalk's `Cast` trait.
2021-03-20 12:47:12 +01:00
Florian Diebold
7a5fb37cf1
Rename GenericPredicate -> WhereClause
2021-03-20 10:46:36 +01:00
Lukas Wirth
8996b1a235
Replace Projection variant in GenericPredicate with AliasEq
2021-03-19 12:12:18 +01:00
Florian Diebold
7a7e47eab7
Chalkify TraitRef
2021-03-18 21:53:19 +01:00
Florian Diebold
ce2cae45b5
Rename Substs -> Substitution
2021-03-16 17:58:17 +01:00
Florian Diebold
287e9a870c
Fix unification logic
2021-03-15 19:14:10 +01:00
Florian Diebold
42217738e0
Don't use Substs for Ref/Raw/Array/Slice
2021-03-14 20:21:05 +01:00
Florian Diebold
af466f8542
Make Ty wrap TyKind in an Arc
...
... 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.
2021-03-14 17:31:08 +01:00
Florian Diebold
3411fe3e84
Rename some fields to their Chalk names
2021-03-14 16:30:43 +01:00
Florian Diebold
6c32bbf3ca
Separate Ty
and TyKind
like in Chalk
...
Currently `Ty` just wraps `TyKind`, but this allows us to change most
places to already use `intern` / `interned`.
2021-03-13 16:17:15 +01:00