Skip to content

Commit a87d1bb

Browse files
committed
infer: give access to region variable origins
1 parent 09b44bb commit a87d1bb

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/librustc/infer/mod.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use middle::lang_items;
2525
use mir::tcx::LvalueTy;
2626
use ty::subst::{Kind, Subst, Substs};
2727
use ty::{TyVid, IntVid, FloatVid};
28-
use ty::{self, Ty, TyCtxt};
28+
use ty::{self, RegionVid, Ty, TyCtxt};
2929
use ty::error::{ExpectedFound, TypeError, UnconstrainedNumeric};
3030
use ty::fold::{TypeFoldable, TypeFolder, TypeVisitor};
3131
use ty::relate::RelateResult;
@@ -1166,6 +1166,21 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
11661166
self.borrow_region_constraints().take_and_reset_data()
11671167
}
11681168

1169+
/// Returns the number of region variables created thus far.
1170+
pub fn num_region_vars(&self) -> usize {
1171+
self.borrow_region_constraints().var_origins().len()
1172+
}
1173+
1174+
/// Returns an iterator over all region variables created thus far.
1175+
pub fn all_region_vars(&self) -> impl Iterator<Item = RegionVid> {
1176+
self.borrow_region_constraints().var_origins().indices()
1177+
}
1178+
1179+
/// Returns the origin of a given region variable.
1180+
pub fn region_var_origin(&self, var: RegionVid) -> RegionVariableOrigin {
1181+
self.borrow_region_constraints().var_origins()[var].clone()
1182+
}
1183+
11691184
pub fn ty_to_string(&self, t: Ty<'tcx>) -> String {
11701185
self.resolve_type_vars_if_possible(&t).to_string()
11711186
}

src/librustc/infer/region_constraints/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ mod taint;
3333

3434
pub struct RegionConstraintCollector<'tcx> {
3535
/// For each `RegionVid`, the corresponding `RegionVariableOrigin`.
36-
pub var_origins: IndexVec<RegionVid, RegionVariableOrigin>,
36+
var_origins: IndexVec<RegionVid, RegionVariableOrigin>,
3737

3838
data: RegionConstraintData<'tcx>,
3939

@@ -284,6 +284,10 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
284284
}
285285
}
286286

287+
pub fn var_origins(&self) -> &VarOrigins {
288+
&self.var_origins
289+
}
290+
287291
/// Once all the constraints have been gathered, extract out the final data.
288292
///
289293
/// Not legal during a snapshot.

0 commit comments

Comments
 (0)