Skip to content

Commit 50c6742

Browse files
committed
Use a TypedArena rather than an Arena for the backing storage of variance analysis.
(The code was not using the main feature of Arena in the first place, since all of the `alloc` calls were on the same type.
1 parent 189930f commit 50c6742

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

src/librustc_typeck/variance.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ use self::VarianceTerm::*;
192192
use self::ParamKind::*;
193193

194194
use arena;
195-
use arena::Arena;
195+
use arena::TypedArena;
196196
use middle::resolve_lifetime as rl;
197197
use middle::subst;
198198
use middle::subst::{ParamSpace, FnSpace, TypeSpace, SelfSpace, VecPerParamSpace};
@@ -210,7 +210,7 @@ use util::ppaux::Repr;
210210

211211
pub fn infer_variance(tcx: &ty::ctxt) {
212212
let krate = tcx.map.krate();
213-
let mut arena = arena::Arena::new();
213+
let mut arena = arena::TypedArena::new();
214214
let terms_cx = determine_parameters_to_be_inferred(tcx, &mut arena, krate);
215215
let constraints_cx = add_constraints_from_crate(terms_cx, krate);
216216
solve_constraints(constraints_cx);
@@ -254,7 +254,7 @@ impl<'a> fmt::Debug for VarianceTerm<'a> {
254254

255255
struct TermsContext<'a, 'tcx: 'a> {
256256
tcx: &'a ty::ctxt<'tcx>,
257-
arena: &'a Arena,
257+
arena: &'a TypedArena<VarianceTerm<'a>>,
258258

259259
empty_variances: Rc<ty::ItemVariances>,
260260

@@ -282,7 +282,7 @@ struct InferredInfo<'a> {
282282
}
283283

284284
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>>,
286286
krate: &ast::Crate)
287287
-> TermsContext<'a, 'tcx> {
288288
let mut terms_cx = TermsContext {
@@ -312,7 +312,7 @@ impl<'a, 'tcx> TermsContext<'a, 'tcx> {
312312
index: uint,
313313
param_id: ast::NodeId) {
314314
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));
316316
self.inferred_infos.push(InferredInfo { item_id: item_id,
317317
kind: kind,
318318
space: space,
@@ -455,10 +455,10 @@ fn add_constraints_from_crate<'a, 'tcx>(terms_cx: TermsContext<'a, 'tcx>,
455455

456456
let unsafe_lang_item = terms_cx.tcx.lang_items.unsafe_type();
457457

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));
462462
let mut constraint_cx = ConstraintContext {
463463
terms_cx: terms_cx,
464464

@@ -719,7 +719,7 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
719719
}
720720

721721
_ => {
722-
&*self.terms_cx.arena.alloc(|| TransformTerm(v1, v2))
722+
&*self.terms_cx.arena.alloc(TransformTerm(v1, v2))
723723
}
724724
}
725725
}

0 commit comments

Comments
 (0)