diff options
| -rw-r--r-- | src/librustc/infer/mod.rs | 17 | ||||
| -rw-r--r-- | src/librustc/infer/region_constraints/mod.rs | 6 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/librustc/infer/mod.rs b/src/librustc/infer/mod.rs index 21f427fa80c..10734802a6d 100644 --- a/src/librustc/infer/mod.rs +++ b/src/librustc/infer/mod.rs @@ -25,7 +25,7 @@ use middle::lang_items; use mir::tcx::LvalueTy; use ty::subst::{Kind, Subst, Substs}; use ty::{TyVid, IntVid, FloatVid}; -use ty::{self, Ty, TyCtxt}; +use ty::{self, RegionVid, Ty, TyCtxt}; use ty::error::{ExpectedFound, TypeError, UnconstrainedNumeric}; use ty::fold::{TypeFoldable, TypeFolder, TypeVisitor}; use ty::relate::RelateResult; @@ -1166,6 +1166,21 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> { self.borrow_region_constraints().take_and_reset_data() } + /// Returns the number of region variables created thus far. + pub fn num_region_vars(&self) -> usize { + self.borrow_region_constraints().var_origins().len() + } + + /// Returns an iterator over all region variables created thus far. + pub fn all_region_vars(&self) -> impl Iterator<Item = RegionVid> { + self.borrow_region_constraints().var_origins().indices() + } + + /// Returns the origin of a given region variable. + pub fn region_var_origin(&self, var: RegionVid) -> RegionVariableOrigin { + self.borrow_region_constraints().var_origins()[var].clone() + } + pub fn ty_to_string(&self, t: Ty<'tcx>) -> String { self.resolve_type_vars_if_possible(&t).to_string() } diff --git a/src/librustc/infer/region_constraints/mod.rs b/src/librustc/infer/region_constraints/mod.rs index a9e36a5740f..402fdeba56a 100644 --- a/src/librustc/infer/region_constraints/mod.rs +++ b/src/librustc/infer/region_constraints/mod.rs @@ -33,7 +33,7 @@ mod taint; pub struct RegionConstraintCollector<'tcx> { /// For each `RegionVid`, the corresponding `RegionVariableOrigin`. - pub var_origins: IndexVec<RegionVid, RegionVariableOrigin>, + var_origins: IndexVec<RegionVid, RegionVariableOrigin>, data: RegionConstraintData<'tcx>, @@ -284,6 +284,10 @@ impl<'tcx> RegionConstraintCollector<'tcx> { } } + pub fn var_origins(&self) -> &VarOrigins { + &self.var_origins + } + /// Once all the constraints have been gathered, extract out the final data. /// /// Not legal during a snapshot. |
