Skip to content

Commit 03d5e1d

Browse files
committed
use visit_free_var for everything instead for visit_free_var_* and remove visit_bound_var
1 parent abd029d commit 03d5e1d

File tree

3 files changed

+18
-85
lines changed

3 files changed

+18
-85
lines changed

chalk-ir/src/visit.rs

+12-71
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,15 @@ where
8585
/// Top-level callback: invoked for each `Ty<I>` that is
8686
/// encountered when visiting. By default, invokes
8787
/// `super_visit_with`, which will in turn invoke the more
88-
/// specialized visiting methods below, like `visit_free_var_ty`.
88+
/// specialized visiting methods below, like `visit_free_var`.
8989
fn visit_ty(&mut self, ty: &Ty<I>, outer_binder: DebruijnIndex) -> Self::Result {
9090
ty.super_visit_with(self.as_dyn(), outer_binder)
9191
}
9292

9393
/// Top-level callback: invoked for each `Lifetime<I>` that is
9494
/// encountered when visiting. By default, invokes
9595
/// `super_visit_with`, which will in turn invoke the more
96-
/// specialized visiting methods below, like `visit_free_lifetime_ty`.
96+
/// specialized visiting methods below, like `visit_free_var`.
9797
fn visit_lifetime(
9898
&mut self,
9999
lifetime: &Lifetime<I>,
@@ -102,10 +102,10 @@ where
102102
lifetime.super_visit_with(self.as_dyn(), outer_binder)
103103
}
104104

105-
/// Top-level callback: invoked for each `Lifetime<I>` that is
105+
/// Top-level callback: invoked for each `Const<I>` that is
106106
/// encountered when visiting. By default, invokes
107107
/// `super_visit_with`, which will in turn invoke the more
108-
/// specialized visiting methods below, like `visit_free_lifetime_ty`.
108+
/// specialized visiting methods below, like `visit_free_var`.
109109
fn visit_const(&mut self, constant: &Const<I>, outer_binder: DebruijnIndex) -> Self::Result {
110110
constant.super_visit_with(self.as_dyn(), outer_binder)
111111
}
@@ -139,13 +139,9 @@ where
139139
false
140140
}
141141

142-
/// Invoked for `TyData::BoundVar` instances that are not bound
142+
/// Invoked for `BoundVar` instances that are not bound
143143
/// within the type being visited over:
144-
fn visit_free_var_ty(
145-
&mut self,
146-
bound_var: BoundVar,
147-
outer_binder: DebruijnIndex,
148-
) -> Self::Result {
144+
fn visit_free_var(&mut self, bound_var: BoundVar, outer_binder: DebruijnIndex) -> Self::Result {
149145
if self.forbid_free_vars() {
150146
panic!(
151147
"unexpected free variable `{:?}` with outer binder {:?}",
@@ -156,61 +152,6 @@ where
156152
}
157153
}
158154

159-
fn visit_bound_var_ty(
160-
&mut self,
161-
_bound_var: BoundVar,
162-
_outer_binder: DebruijnIndex,
163-
) -> Self::Result {
164-
Self::Result::new()
165-
}
166-
167-
/// As `visit_free_var_ty`, but for lifetimes.
168-
fn visit_free_var_lifetime(
169-
&mut self,
170-
bound_var: BoundVar,
171-
outer_binder: DebruijnIndex,
172-
) -> Self::Result {
173-
if self.forbid_free_vars() {
174-
panic!(
175-
"unexpected free variable `{:?}` with outer binder {:?}",
176-
bound_var, outer_binder
177-
)
178-
} else {
179-
Self::Result::new()
180-
}
181-
}
182-
183-
fn visit_bound_var_lifetime(
184-
&mut self,
185-
_bound_var: BoundVar,
186-
_outer_binder: DebruijnIndex,
187-
) -> Self::Result {
188-
Self::Result::new()
189-
}
190-
191-
fn visit_free_var_const(
192-
&mut self,
193-
bound_var: BoundVar,
194-
outer_binder: DebruijnIndex,
195-
) -> Self::Result {
196-
if self.forbid_free_vars() {
197-
panic!(
198-
"unexpected free variable `{:?}` with outer binder {:?}",
199-
bound_var, outer_binder
200-
)
201-
} else {
202-
Self::Result::new()
203-
}
204-
}
205-
206-
fn visit_bound_var_const(
207-
&mut self,
208-
_bound_var: BoundVar,
209-
_outer_binder: DebruijnIndex,
210-
) -> Self::Result {
211-
Self::Result::new()
212-
}
213-
214155
/// If overridden to return true, we will panic when a free
215156
/// placeholder type/lifetime is encountered.
216157
fn forbid_free_placeholders(&self) -> bool {
@@ -376,9 +317,9 @@ where
376317
match self.data(interner) {
377318
TyData::BoundVar(bound_var) => {
378319
if let Some(_) = bound_var.shifted_out_to(outer_binder) {
379-
visitor.visit_free_var_lifetime(*bound_var, outer_binder)
320+
visitor.visit_free_var(*bound_var, outer_binder)
380321
} else {
381-
visitor.visit_bound_var_lifetime(*bound_var, outer_binder)
322+
R::new()
382323
}
383324
}
384325
TyData::Dyn(clauses) => clauses.visit_with(visitor, outer_binder),
@@ -417,9 +358,9 @@ impl<I: Interner> SuperVisit<I> for Lifetime<I> {
417358
match self.data(interner) {
418359
LifetimeData::BoundVar(bound_var) => {
419360
if let Some(_) = bound_var.shifted_out_to(outer_binder) {
420-
visitor.visit_free_var_lifetime(*bound_var, outer_binder)
361+
visitor.visit_free_var(*bound_var, outer_binder)
421362
} else {
422-
visitor.visit_bound_var_lifetime(*bound_var, outer_binder)
363+
R::new()
423364
}
424365
}
425366
LifetimeData::InferenceVar(var) => visitor.visit_inference_lifetime(*var, outer_binder),
@@ -457,9 +398,9 @@ impl<I: Interner> SuperVisit<I> for Const<I> {
457398
match self.data(interner) {
458399
ConstData::BoundVar(bound_var) => {
459400
if let Some(_) = bound_var.shifted_out_to(outer_binder) {
460-
visitor.visit_free_var_const(*bound_var, outer_binder)
401+
visitor.visit_free_var(*bound_var, outer_binder)
461402
} else {
462-
visitor.visit_bound_var_const(*bound_var, outer_binder)
403+
R::new()
463404
}
464405
}
465406
ConstData::InferenceVar(var) => visitor.visit_inference_const(*var, outer_binder),

chalk-ir/src/visit/visitors.rs

+1-9
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,7 @@ impl<'i, I: Interner> Visitor<'i, I> for FindFreeVarsVisitor<'i, I> {
5555
self.interner
5656
}
5757

58-
fn visit_free_var_ty(
59-
&mut self,
60-
_bound_var: BoundVar,
61-
_outer_binder: DebruijnIndex,
62-
) -> Self::Result {
63-
FindAny::FOUND
64-
}
65-
66-
fn visit_free_var_lifetime(
58+
fn visit_free_var(
6759
&mut self,
6860
_bound_var: BoundVar,
6961
_outer_binder: DebruijnIndex,

chalk-solve/src/infer/unify.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,11 @@ impl<'t, I: Interner> Unifier<'t, I> {
8585
fn unify_ty_ty<'a>(&mut self, a: &'a Ty<I>, b: &'a Ty<I>) -> Fallible<()> {
8686
let interner = self.interner;
8787
// ^^ ^^ ^^ FIXME rustc bug
88-
if let Some(n_a) = self.table.normalize_ty_shallow(interner, a) {
89-
return self.unify_ty_ty(&n_a, b);
90-
} else if let Some(n_b) = self.table.normalize_ty_shallow(interner, b) {
91-
return self.unify_ty_ty(a, &n_b);
92-
}
88+
89+
let n_a = self.table.normalize_ty_shallow(interner, a);
90+
let n_b = self.table.normalize_ty_shallow(interner, b);
91+
let a = n_a.as_ref().unwrap_or(a);
92+
let b = n_b.as_ref().unwrap_or(b);
9393

9494
debug_heading!(
9595
"unify_ty_ty(a={:?}\

0 commit comments

Comments
 (0)