@@ -192,7 +192,7 @@ use self::VarianceTerm::*;
192
192
use self :: ParamKind :: * ;
193
193
194
194
use arena;
195
- use arena:: Arena ;
195
+ use arena:: TypedArena ;
196
196
use middle:: resolve_lifetime as rl;
197
197
use middle:: subst;
198
198
use middle:: subst:: { ParamSpace , FnSpace , TypeSpace , SelfSpace , VecPerParamSpace } ;
@@ -210,7 +210,7 @@ use util::ppaux::Repr;
210
210
211
211
pub fn infer_variance ( tcx : & ty:: ctxt ) {
212
212
let krate = tcx. map . krate ( ) ;
213
- let mut arena = arena:: Arena :: new ( ) ;
213
+ let mut arena = arena:: TypedArena :: new ( ) ;
214
214
let terms_cx = determine_parameters_to_be_inferred ( tcx, & mut arena, krate) ;
215
215
let constraints_cx = add_constraints_from_crate ( terms_cx, krate) ;
216
216
solve_constraints ( constraints_cx) ;
@@ -254,7 +254,7 @@ impl<'a> fmt::Debug for VarianceTerm<'a> {
254
254
255
255
struct TermsContext < ' a , ' tcx : ' a > {
256
256
tcx : & ' a ty:: ctxt < ' tcx > ,
257
- arena : & ' a Arena ,
257
+ arena : & ' a TypedArena < VarianceTerm < ' a > > ,
258
258
259
259
empty_variances : Rc < ty:: ItemVariances > ,
260
260
@@ -282,7 +282,7 @@ struct InferredInfo<'a> {
282
282
}
283
283
284
284
fn determine_parameters_to_be_inferred < ' a , ' tcx > ( tcx : & ' a ty:: ctxt < ' tcx > ,
285
- arena : & ' a mut Arena ,
285
+ arena : & ' a mut TypedArena < VarianceTerm < ' a > > ,
286
286
krate : & ast:: Crate )
287
287
-> TermsContext < ' a , ' tcx > {
288
288
let mut terms_cx = TermsContext {
@@ -312,7 +312,7 @@ impl<'a, 'tcx> TermsContext<'a, 'tcx> {
312
312
index : uint ,
313
313
param_id : ast:: NodeId ) {
314
314
let inf_index = InferredIndex ( self . inferred_infos . len ( ) ) ;
315
- let term = self . arena . alloc ( || InferredTerm ( inf_index) ) ;
315
+ let term = self . arena . alloc ( InferredTerm ( inf_index) ) ;
316
316
self . inferred_infos . push ( InferredInfo { item_id : item_id,
317
317
kind : kind,
318
318
space : space,
@@ -455,10 +455,10 @@ fn add_constraints_from_crate<'a, 'tcx>(terms_cx: TermsContext<'a, 'tcx>,
455
455
456
456
let unsafe_lang_item = terms_cx. tcx . lang_items . unsafe_type ( ) ;
457
457
458
- let covariant = terms_cx. arena . alloc ( || ConstantTerm ( ty:: Covariant ) ) ;
459
- let contravariant = terms_cx. arena . alloc ( || ConstantTerm ( ty:: Contravariant ) ) ;
460
- let invariant = terms_cx. arena . alloc ( || ConstantTerm ( ty:: Invariant ) ) ;
461
- let bivariant = terms_cx. arena . alloc ( || ConstantTerm ( ty:: Bivariant ) ) ;
458
+ let covariant = terms_cx. arena . alloc ( ConstantTerm ( ty:: Covariant ) ) ;
459
+ let contravariant = terms_cx. arena . alloc ( ConstantTerm ( ty:: Contravariant ) ) ;
460
+ let invariant = terms_cx. arena . alloc ( ConstantTerm ( ty:: Invariant ) ) ;
461
+ let bivariant = terms_cx. arena . alloc ( ConstantTerm ( ty:: Bivariant ) ) ;
462
462
let mut constraint_cx = ConstraintContext {
463
463
terms_cx : terms_cx,
464
464
@@ -719,7 +719,7 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
719
719
}
720
720
721
721
_ => {
722
- & * self . terms_cx . arena . alloc ( || TransformTerm ( v1, v2) )
722
+ & * self . terms_cx . arena . alloc ( TransformTerm ( v1, v2) )
723
723
}
724
724
}
725
725
}
0 commit comments