Skip to content

Commit 497e5fe

Browse files
committed
Emit EqGoals for projections / simplify
1 parent 593c636 commit 497e5fe

File tree

2 files changed

+16
-37
lines changed

2 files changed

+16
-37
lines changed

chalk-solve/src/clauses/env_elaborator.rs

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
use super::program_clauses::ToProgramClauses;
22
use crate::clauses::builder::ClauseBuilder;
33
use crate::clauses::{match_alias_ty, match_type_name};
4-
use crate::AliasEq;
54
use crate::DomainGoal;
65
use crate::FromEnv;
76
use crate::ProgramClause;
87
use crate::RustIrDatabase;
98
use crate::Ty;
10-
use crate::WhereClause;
119
use crate::{debug_span, TyData};
1210
use chalk_ir::interner::Interner;
1311
use chalk_ir::visit::{Visit, Visitor};
@@ -85,32 +83,25 @@ impl<'me, I: Interner> Visitor<'me, I> for EnvElaborator<'me, I> {
8583
}
8684

8785
fn visit_domain_goal(&mut self, domain_goal: &DomainGoal<I>, outer_binder: DebruijnIndex) {
88-
match domain_goal {
89-
DomainGoal::FromEnv(from_env) => {
90-
debug_span!("visit_domain_goal", ?from_env);
91-
match from_env {
92-
FromEnv::Trait(trait_ref) => {
93-
let trait_datum = self.db.trait_datum(trait_ref.trait_id);
86+
if let DomainGoal::FromEnv(from_env) = domain_goal {
87+
debug_span!("visit_domain_goal", ?from_env);
88+
match from_env {
89+
FromEnv::Trait(trait_ref) => {
90+
let trait_datum = self.db.trait_datum(trait_ref.trait_id);
9491

95-
trait_datum.to_program_clauses(&mut self.builder, self.environment);
92+
trait_datum.to_program_clauses(&mut self.builder, self.environment);
9693

97-
// If we know that `T: Iterator`, then we also know
98-
// things about `<T as Iterator>::Item`, so push those
99-
// implied bounds too:
100-
for &associated_ty_id in &trait_datum.associated_ty_ids {
101-
self.db
102-
.associated_ty_data(associated_ty_id)
103-
.to_program_clauses(&mut self.builder, self.environment);
104-
}
94+
// If we know that `T: Iterator`, then we also know
95+
// things about `<T as Iterator>::Item`, so push those
96+
// implied bounds too:
97+
for &associated_ty_id in &trait_datum.associated_ty_ids {
98+
self.db
99+
.associated_ty_data(associated_ty_id)
100+
.to_program_clauses(&mut self.builder, self.environment);
105101
}
106-
FromEnv::Ty(ty) => ty.visit_with(self, outer_binder),
107102
}
103+
FromEnv::Ty(ty) => ty.visit_with(self, outer_binder),
108104
}
109-
DomainGoal::Holds(WhereClause::AliasEq(AliasEq { alias, ty })) => {
110-
match_alias_ty(&mut self.builder, self.environment, alias);
111-
ty.visit_with(self, outer_binder);
112-
}
113-
_ => {}
114105
}
115106
}
116107
}

chalk-solve/src/clauses/syntactic_eq.rs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use chalk_ir::{
44
cast::Cast,
55
fold::{shift::Shift, Fold, Folder, SuperFold},
66
interner::Interner,
7-
AliasEq, AliasTy, Binders, BoundVar, DebruijnIndex, EqGoal, Fallible, Goal, GoalData, Goals,
7+
AliasTy, Binders, BoundVar, DebruijnIndex, EqGoal, Fallible, Goal, GoalData, Goals,
88
ProgramClause, ProgramClauseData, ProgramClauseImplication, QuantifierKind, Ty, TyData, TyKind,
99
VariableKind, VariableKinds,
1010
};
@@ -50,19 +50,7 @@ impl<'i, I: Interner> Folder<'i, I> for SynEqFolder<'i, I> {
5050

5151
let new_ty = TyData::BoundVar(bound_var).intern(interner);
5252
match ty.data(interner) {
53-
TyData::Alias(alias @ AliasTy::Projection(_)) => {
54-
self.new_params.push(VariableKind::Ty(TyKind::General));
55-
self.new_goals.push(
56-
AliasEq {
57-
alias: alias.clone(),
58-
ty: new_ty.clone(),
59-
}
60-
.cast(interner),
61-
);
62-
self.binders_len += 1;
63-
Ok(new_ty)
64-
}
65-
TyData::Function(_) => {
53+
TyData::Alias(AliasTy::Projection(_)) | TyData::Function(_) => {
6654
self.new_params.push(VariableKind::Ty(TyKind::General));
6755
self.new_goals.push(
6856
EqGoal {

0 commit comments

Comments
 (0)