@@ -33,7 +33,7 @@ mod taint;
3333
3434pub struct RegionConstraintCollector < ' tcx > {
3535 /// For each `RegionVid`, the corresponding `RegionVariableOrigin`.
36- var_origins : IndexVec < RegionVid , RegionVariableOrigin > ,
36+ var_infos : IndexVec < RegionVid , RegionVariableInfo > ,
3737
3838 data : RegionConstraintData < ' tcx > ,
3939
@@ -76,7 +76,7 @@ pub struct RegionConstraintCollector<'tcx> {
7676 unification_table : ut:: UnificationTable < ut:: InPlace < ty:: RegionVid > > ,
7777}
7878
79- pub type VarOrigins = IndexVec < RegionVid , RegionVariableOrigin > ;
79+ pub type VarInfos = IndexVec < RegionVid , RegionVariableInfo > ;
8080
8181/// The full set of region constraints gathered up by the collector.
8282/// Describes constraints between the region variables and other
@@ -230,6 +230,11 @@ enum CombineMapType {
230230
231231type CombineMap < ' tcx > = FxHashMap < TwoRegions < ' tcx > , RegionVid > ;
232232
233+ #[ derive( Debug , Clone , Copy ) ]
234+ pub struct RegionVariableInfo {
235+ pub origin : RegionVariableOrigin ,
236+ }
237+
233238pub struct RegionSnapshot {
234239 length : usize ,
235240 region_snapshot : ut:: Snapshot < ut:: InPlace < ty:: RegionVid > > ,
@@ -273,7 +278,7 @@ impl TaintDirections {
273278impl < ' tcx > RegionConstraintCollector < ' tcx > {
274279 pub fn new ( ) -> RegionConstraintCollector < ' tcx > {
275280 RegionConstraintCollector {
276- var_origins : VarOrigins :: default ( ) ,
281+ var_infos : VarInfos :: default ( ) ,
277282 data : RegionConstraintData :: default ( ) ,
278283 lubs : FxHashMap ( ) ,
279284 glbs : FxHashMap ( ) ,
@@ -284,8 +289,8 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
284289 }
285290 }
286291
287- pub fn var_origins ( & self ) -> & VarOrigins {
288- & self . var_origins
292+ pub fn num_region_vars ( & self ) -> usize {
293+ self . var_infos . len ( )
289294 }
290295
291296 pub fn region_constraint_data ( & self ) -> & RegionConstraintData < ' tcx > {
@@ -295,9 +300,9 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
295300 /// Once all the constraints have been gathered, extract out the final data.
296301 ///
297302 /// Not legal during a snapshot.
298- pub fn into_origins_and_data ( self ) -> ( VarOrigins , RegionConstraintData < ' tcx > ) {
303+ pub fn into_infos_and_data ( self ) -> ( VarInfos , RegionConstraintData < ' tcx > ) {
299304 assert ! ( !self . in_snapshot( ) ) ;
300- ( self . var_origins , self . data )
305+ ( self . var_infos , self . data )
301306 }
302307
303308 /// Takes (and clears) the current set of constraints. Note that
@@ -319,7 +324,7 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
319324 // should think carefully about whether it needs to be cleared
320325 // or updated in some way.
321326 let RegionConstraintCollector {
322- var_origins ,
327+ var_infos ,
323328 data,
324329 lubs,
325330 glbs,
@@ -343,7 +348,7 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
343348 // also insert `a <= b` and a `b <= a` edges, so the
344349 // `RegionConstraintData` contains the relationship here.
345350 * unification_table = ut:: UnificationTable :: new ( ) ;
346- for vid in var_origins . indices ( ) {
351+ for vid in var_infos . indices ( ) {
347352 unification_table. new_key ( unify_key:: RegionVidKey { min_vid : vid } ) ;
348353 }
349354
@@ -411,8 +416,8 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
411416 // nothing to do here
412417 }
413418 AddVar ( vid) => {
414- self . var_origins . pop ( ) . unwrap ( ) ;
415- assert_eq ! ( self . var_origins . len( ) , vid. index( ) as usize ) ;
419+ self . var_infos . pop ( ) . unwrap ( ) ;
420+ assert_eq ! ( self . var_infos . len( ) , vid. index( ) as usize ) ;
416421 }
417422 AddConstraint ( ref constraint) => {
418423 self . data . constraints . remove ( constraint) ;
@@ -434,7 +439,9 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
434439 }
435440
436441 pub fn new_region_var ( & mut self , origin : RegionVariableOrigin ) -> RegionVid {
437- let vid = self . var_origins . push ( origin. clone ( ) ) ;
442+ let vid = self . var_infos . push ( RegionVariableInfo {
443+ origin,
444+ } ) ;
438445
439446 let u_vid = self . unification_table
440447 . new_key ( unify_key:: RegionVidKey { min_vid : vid } ) ;
@@ -452,7 +459,7 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
452459
453460 /// Returns the origin for the given variable.
454461 pub fn var_origin ( & self , vid : RegionVid ) -> RegionVariableOrigin {
455- self . var_origins [ vid] . clone ( )
462+ self . var_infos [ vid] . origin
456463 }
457464
458465 /// Creates a new skolemized region. Skolemized regions are fresh
0 commit comments