|
9 | 9 | use chalk_ir::{
|
10 | 10 | fold::{Fold, Folder},
|
11 | 11 | interner::{HasInterner, Interner},
|
12 |
| - Binders, BoundVar, DebruijnIndex, Fallible, Lifetime, LifetimeData, NoSolution, Ty, TyKind, |
13 |
| - TyVariableKind, VariableKind, VariableKinds, |
| 12 | + Binders, BoundVar, Const, ConstData, ConstValue, DebruijnIndex, Fallible, Lifetime, |
| 13 | + LifetimeData, NoSolution, Ty, TyKind, TyVariableKind, VariableKind, VariableKinds, |
14 | 14 | };
|
15 | 15 | use rustc_hash::FxHashMap;
|
16 | 16 |
|
@@ -63,6 +63,26 @@ impl<I: Interner> Folder<I> for Generalize<I> {
|
63 | 63 | Ok(TyKind::BoundVar(new_var).intern(self.interner()))
|
64 | 64 | }
|
65 | 65 |
|
| 66 | + fn fold_free_var_const( |
| 67 | + &mut self, |
| 68 | + ty: Ty<I>, |
| 69 | + bound_var: BoundVar, |
| 70 | + outer_binder: DebruijnIndex, |
| 71 | + ) -> Fallible<Const<I>> { |
| 72 | + let binder_vec = &mut self.binders; |
| 73 | + let new_index = self.mapping.entry(bound_var).or_insert_with(|| { |
| 74 | + let i = binder_vec.len(); |
| 75 | + binder_vec.push(VariableKind::Const(ty.clone())); |
| 76 | + i |
| 77 | + }); |
| 78 | + let new_var = BoundVar::new(outer_binder, *new_index); |
| 79 | + Ok(ConstData { |
| 80 | + ty, |
| 81 | + value: ConstValue::BoundVar(new_var), |
| 82 | + } |
| 83 | + .intern(self.interner())) |
| 84 | + } |
| 85 | + |
66 | 86 | fn fold_free_var_lifetime(
|
67 | 87 | &mut self,
|
68 | 88 | bound_var: BoundVar,
|
|
0 commit comments