mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 04:44:57 +00:00
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.
This commit is contained in:
parent
a3d9cac690
commit
1250ddc5cf
11 changed files with 240 additions and 143 deletions
|
@ -1712,15 +1712,17 @@ impl Type {
|
|||
resolver: &Resolver,
|
||||
ty: Ty,
|
||||
) -> Type {
|
||||
let environment =
|
||||
resolver.generic_def().map_or_else(Default::default, |d| db.trait_environment(d));
|
||||
let environment = resolver
|
||||
.generic_def()
|
||||
.map_or_else(|| Arc::new(TraitEnvironment::empty(krate)), |d| db.trait_environment(d));
|
||||
Type { krate, env: environment, ty }
|
||||
}
|
||||
|
||||
fn new(db: &dyn HirDatabase, krate: CrateId, lexical_env: impl HasResolver, ty: Ty) -> Type {
|
||||
let resolver = lexical_env.resolver(db.upcast());
|
||||
let environment =
|
||||
resolver.generic_def().map_or_else(Default::default, |d| db.trait_environment(d));
|
||||
let environment = resolver
|
||||
.generic_def()
|
||||
.map_or_else(|| Arc::new(TraitEnvironment::empty(krate)), |d| db.trait_environment(d));
|
||||
Type { krate, env: environment, ty }
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue