Skip to content

Commit d6fd9ef

Browse files
authored
Merge pull request #343 from yaahc/jane/intern-extend
Add &self to intern lifetime
2 parents 177d713 + 0b1261c commit d6fd9ef

File tree

17 files changed

+57
-48
lines changed

17 files changed

+57
-48
lines changed

chalk-integration/src/lowering.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1079,7 +1079,9 @@ impl LowerLifetime for Lifetime {
10791079
fn lower(&self, env: &Env) -> LowerResult<chalk_ir::Lifetime<ChalkIr>> {
10801080
match *self {
10811081
Lifetime::Id { name } => match env.lookup_lifetime(name)? {
1082-
LifetimeLookup::Parameter(d) => Ok(chalk_ir::LifetimeData::BoundVar(d).intern()),
1082+
LifetimeLookup::Parameter(d) => {
1083+
Ok(chalk_ir::LifetimeData::BoundVar(d).intern(env.interner()))
1084+
}
10831085
},
10841086
}
10851087
}

chalk-ir/src/fold.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ pub trait Folder<I: Interner, TI: TargetInterner<I> = I> {
131131
if self.forbid_free_vars() {
132132
panic!("unexpected free variable with depth `{:?}`", depth)
133133
} else {
134-
Ok(LifetimeData::<TI>::BoundVar(depth + binders).intern())
134+
Ok(LifetimeData::<TI>::BoundVar(depth + binders).intern(self.target_interner()))
135135
}
136136
}
137137

@@ -169,7 +169,7 @@ pub trait Folder<I: Interner, TI: TargetInterner<I> = I> {
169169
if self.forbid_free_placeholders() {
170170
panic!("unexpected placeholder lifetime `{:?}`", universe)
171171
} else {
172-
Ok(universe.to_lifetime::<TI>())
172+
Ok(universe.to_lifetime(self.target_interner()))
173173
}
174174
}
175175

@@ -191,7 +191,7 @@ pub trait Folder<I: Interner, TI: TargetInterner<I> = I> {
191191
if self.forbid_inference_vars() {
192192
panic!("unexpected inference type `{:?}`", var)
193193
} else {
194-
Ok(var.to_ty::<TI>(self.target_interner()))
194+
Ok(var.to_ty(self.target_interner()))
195195
}
196196
}
197197

@@ -204,7 +204,7 @@ pub trait Folder<I: Interner, TI: TargetInterner<I> = I> {
204204
if self.forbid_inference_vars() {
205205
panic!("unexpected inference lifetime `'{:?}`", var)
206206
} else {
207-
Ok(var.to_lifetime::<TI>())
207+
Ok(var.to_lifetime(self.target_interner()))
208208
}
209209
}
210210

@@ -328,7 +328,7 @@ where
328328
if *depth >= binders {
329329
folder.fold_free_var_lifetime(depth - binders, binders)
330330
} else {
331-
Ok(LifetimeData::<TI>::BoundVar(*depth).intern())
331+
Ok(LifetimeData::<TI>::BoundVar(*depth).intern(folder.target_interner()))
332332
}
333333
}
334334
LifetimeData::InferenceVar(var) => folder.fold_inference_lifetime(*var, binders),

chalk-ir/src/fold/shift.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ impl<I: Interner> Folder<I> for Shifter<'_, I> {
108108
}
109109

110110
fn fold_free_var_lifetime(&mut self, depth: usize, binders: usize) -> Fallible<Lifetime<I>> {
111-
Ok(LifetimeData::<I>::BoundVar(self.adjust(depth, binders)).intern())
111+
Ok(LifetimeData::<I>::BoundVar(self.adjust(depth, binders)).intern(self.interner()))
112112
}
113113

114114
fn interner(&self) -> &I {
@@ -157,7 +157,7 @@ impl<I: Interner> Folder<I> for DownShifter<'_, I> {
157157
}
158158

159159
fn fold_free_var_lifetime(&mut self, depth: usize, binders: usize) -> Fallible<Lifetime<I>> {
160-
Ok(LifetimeData::<I>::BoundVar(self.adjust(depth, binders)?).intern())
160+
Ok(LifetimeData::<I>::BoundVar(self.adjust(depth, binders)?).intern(self.interner()))
161161
}
162162

163163
fn interner(&self) -> &I {

chalk-ir/src/fold/subst.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ impl<I: Interner> Folder<I> for Subst<'_, '_, I> {
4444

4545
fn fold_free_var_lifetime(&mut self, depth: usize, binders: usize) -> Fallible<Lifetime<I>> {
4646
if depth >= self.parameters.len() {
47-
Ok(LifetimeData::<I>::BoundVar(depth - self.parameters.len() + binders).intern())
47+
Ok(
48+
LifetimeData::<I>::BoundVar(depth - self.parameters.len() + binders)
49+
.intern(self.interner()),
50+
)
4851
} else {
4952
match self.parameters[depth].data() {
5053
ParameterKind::Lifetime(l) => Ok(l.shifted_in(self.interner(), binders)),

chalk-ir/src/interner.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ pub trait Interner: Debug + Copy + Eq + Ord + Hash {
144144
/// normally invoked directly; instead, you invoke
145145
/// `LifetimeData::intern` (which will ultimately call this
146146
/// method).
147-
fn intern_lifetime(lifetime: LifetimeData<Self>) -> Self::InternedLifetime;
147+
fn intern_lifetime(&self, lifetime: LifetimeData<Self>) -> Self::InternedLifetime;
148148

149149
/// Lookup the `LifetimeData` that was interned to create a `InternedLifetime`.
150150
fn lifetime_data(lifetime: &Self::InternedLifetime) -> &LifetimeData<Self>;
@@ -279,7 +279,7 @@ mod default {
279279
ty
280280
}
281281

282-
fn intern_lifetime(lifetime: LifetimeData<ChalkIr>) -> LifetimeData<ChalkIr> {
282+
fn intern_lifetime(&self, lifetime: LifetimeData<ChalkIr>) -> LifetimeData<ChalkIr> {
283283
lifetime
284284
}
285285

chalk-ir/src/lib.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -313,8 +313,8 @@ impl InferenceVar {
313313
TyData::<I>::InferenceVar(self).intern(interner)
314314
}
315315

316-
pub fn to_lifetime<I: Interner>(self) -> Lifetime<I> {
317-
LifetimeData::<I>::InferenceVar(self).intern()
316+
pub fn to_lifetime<I: Interner>(self, interner: &I) -> Lifetime<I> {
317+
LifetimeData::<I>::InferenceVar(self).intern(interner)
318318
}
319319
}
320320

@@ -332,9 +332,9 @@ pub struct Lifetime<I: Interner> {
332332
}
333333

334334
impl<I: Interner> Lifetime<I> {
335-
pub fn new(data: impl CastTo<LifetimeData<I>>) -> Self {
335+
pub fn new(interner: &I, data: impl CastTo<LifetimeData<I>>) -> Self {
336336
Lifetime {
337-
interned: I::intern_lifetime(data.cast()),
337+
interned: I::intern_lifetime(interner, data.cast()),
338338
}
339339
}
340340

@@ -373,8 +373,8 @@ pub enum LifetimeData<I: Interner> {
373373
}
374374

375375
impl<I: Interner> LifetimeData<I> {
376-
pub fn intern(self) -> Lifetime<I> {
377-
Lifetime::new(self)
376+
pub fn intern(self, interner: &I) -> Lifetime<I> {
377+
Lifetime::new(interner, self)
378378
}
379379
}
380380

@@ -390,8 +390,8 @@ pub struct PlaceholderIndex {
390390
}
391391

392392
impl PlaceholderIndex {
393-
pub fn to_lifetime<I: Interner>(self) -> Lifetime<I> {
394-
LifetimeData::<I>::Placeholder(self).intern()
393+
pub fn to_lifetime<I: Interner>(self, interner: &I) -> Lifetime<I> {
394+
LifetimeData::<I>::Placeholder(self).intern(interner)
395395
}
396396

397397
pub fn to_ty<I: Interner>(self, interner: &I) -> Ty<I> {

chalk-ir/src/macros.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,15 @@ macro_rules! arg {
6161
#[macro_export]
6262
macro_rules! lifetime {
6363
(infer $b:expr) => {
64-
$crate::LifetimeData::InferenceVar($crate::InferenceVar::from($b)).intern()
64+
$crate::LifetimeData::InferenceVar($crate::InferenceVar::from($b)).intern(&chalk_ir::interner::ChalkIr)
6565
};
6666

6767
(bound $b:expr) => {
68-
$crate::LifetimeData::BoundVar($b).intern()
68+
$crate::LifetimeData::BoundVar($b).intern(&chalk_ir::interner::ChalkIr)
6969
};
7070

7171
(placeholder $b:expr) => {
72-
$crate::LifetimeData::Placeholder(PlaceholderIndex { ui: UniverseIndex { counter: $b }, idx: 0}).intern()
72+
$crate::LifetimeData::Placeholder(PlaceholderIndex { ui: UniverseIndex { counter: $b }, idx: 0}).intern(&chalk_ir::interner::ChalkIr)
7373
};
7474

7575
(expr $b:expr) => {

chalk-rust-ir/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ impl<'a> ToParameter for (&'a ParameterKind<()>, usize) {
270270
fn to_parameter<I: Interner>(&self, interner: &I) -> Parameter<I> {
271271
let &(binder, index) = self;
272272
match *binder {
273-
ParameterKind::Lifetime(_) => LifetimeData::BoundVar(index).intern().cast(),
273+
ParameterKind::Lifetime(_) => LifetimeData::BoundVar(index).intern(interner).cast(),
274274
ParameterKind::Ty(_) => TyData::BoundVar(index).intern(interner).cast(),
275275
}
276276
}

chalk-solve/src/infer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ impl<I: Interner> ParameterEnaVariableExt<I> for ParameterEnaVariable<I> {
208208
fn to_parameter(self, interner: &I) -> Parameter<I> {
209209
match self {
210210
ParameterKind::Ty(v) => v.to_ty(interner).cast(),
211-
ParameterKind::Lifetime(v) => v.to_lifetime().cast(),
211+
ParameterKind::Lifetime(v) => v.to_lifetime(interner).cast(),
212212
}
213213
}
214214
}

chalk-solve/src/infer/canonicalize.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ impl<I: Interner> Folder<I> for Canonicalizer<'_, I> {
107107
_binders: usize,
108108
) -> Fallible<Ty<I>> {
109109
self.max_universe = max(self.max_universe, universe.ui);
110-
Ok(universe.to_ty::<I>(self.interner()))
110+
Ok(universe.to_ty(self.interner()))
111111
}
112112

113113
fn fold_free_placeholder_lifetime(
@@ -116,7 +116,7 @@ impl<I: Interner> Folder<I> for Canonicalizer<'_, I> {
116116
_binders: usize,
117117
) -> Fallible<Lifetime<I>> {
118118
self.max_universe = max(self.max_universe, universe.ui);
119-
Ok(universe.to_lifetime::<I>())
119+
Ok(universe.to_lifetime(self.interner()))
120120
}
121121

122122
fn forbid_free_vars(&self) -> bool {
@@ -164,7 +164,7 @@ impl<I: Interner> Folder<I> for Canonicalizer<'_, I> {
164164
let free_var = ParameterKind::Lifetime(self.table.unify.find(var));
165165
let position = self.add(free_var);
166166
debug!("not yet unified: position={:?}", position);
167-
Ok(LifetimeData::BoundVar(position + binders).intern())
167+
Ok(LifetimeData::BoundVar(position + binders).intern(self.interner()))
168168
}
169169
}
170170
}

0 commit comments

Comments
 (0)