Add specialized variants of mk_region
.
Much like there are specialized variants of `mk_ty`. This will enable some optimization in the next commit. Also rename the existing `re_error*` functions as `mk_re_error*`, for consistency.
This commit is contained in:
parent
7439028374
commit
cef9004f5a
39 changed files with 196 additions and 173 deletions
|
@ -363,7 +363,7 @@ impl<'cx, 'tcx> TypeFolder<TyCtxt<'tcx>> for Canonicalizer<'cx, 'tcx> {
|
|||
opportunistically resolved to {:?}",
|
||||
vid, resolved_vid
|
||||
);
|
||||
let r = self.tcx.mk_region(ty::ReVar(resolved_vid));
|
||||
let r = self.tcx.mk_re_var(resolved_vid);
|
||||
self.canonicalize_mode.canonicalize_free_region(self, r)
|
||||
}
|
||||
|
||||
|
@ -737,8 +737,7 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> {
|
|||
) -> ty::Region<'tcx> {
|
||||
let var = self.canonical_var(info, r.into());
|
||||
let br = ty::BoundRegion { var, kind: ty::BrAnon(var.as_u32(), None) };
|
||||
let region = ty::ReLateBound(self.binder_index, br);
|
||||
self.interner().mk_region(region)
|
||||
self.interner().mk_re_late_bound(self.binder_index, br)
|
||||
}
|
||||
|
||||
/// Given a type variable `ty_var` of the given kind, first check
|
||||
|
|
|
@ -137,7 +137,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||
CanonicalVarKind::PlaceholderRegion(ty::PlaceholderRegion { universe, name }) => {
|
||||
let universe_mapped = universe_map(universe);
|
||||
let placeholder_mapped = ty::PlaceholderRegion { universe: universe_mapped, name };
|
||||
self.tcx.mk_region(ty::RePlaceholder(placeholder_mapped)).into()
|
||||
self.tcx.mk_re_placeholder(placeholder_mapped).into()
|
||||
}
|
||||
|
||||
CanonicalVarKind::Const(ui, ty) => self
|
||||
|
|
|
@ -642,15 +642,14 @@ pub fn make_query_region_constraints<'tcx>(
|
|||
let constraint = match *k {
|
||||
// Swap regions because we are going from sub (<=) to outlives
|
||||
// (>=).
|
||||
Constraint::VarSubVar(v1, v2) => ty::OutlivesPredicate(
|
||||
tcx.mk_region(ty::ReVar(v2)).into(),
|
||||
tcx.mk_region(ty::ReVar(v1)),
|
||||
),
|
||||
Constraint::VarSubVar(v1, v2) => {
|
||||
ty::OutlivesPredicate(tcx.mk_re_var(v2).into(), tcx.mk_re_var(v1))
|
||||
}
|
||||
Constraint::VarSubReg(v1, r2) => {
|
||||
ty::OutlivesPredicate(r2.into(), tcx.mk_region(ty::ReVar(v1)))
|
||||
ty::OutlivesPredicate(r2.into(), tcx.mk_re_var(v1))
|
||||
}
|
||||
Constraint::RegSubVar(r1, v2) => {
|
||||
ty::OutlivesPredicate(tcx.mk_region(ty::ReVar(v2)).into(), r1)
|
||||
ty::OutlivesPredicate(tcx.mk_re_var(v2).into(), r1)
|
||||
}
|
||||
Constraint::RegSubReg(r1, r2) => ty::OutlivesPredicate(r2.into(), r1),
|
||||
};
|
||||
|
@ -690,7 +689,7 @@ impl<'tcx> TypeRelatingDelegate<'tcx> for QueryTypeRelatingDelegate<'_, 'tcx> {
|
|||
}
|
||||
|
||||
fn next_placeholder_region(&mut self, placeholder: ty::PlaceholderRegion) -> ty::Region<'tcx> {
|
||||
self.infcx.tcx.mk_region(ty::RePlaceholder(placeholder))
|
||||
self.infcx.tcx.mk_re_placeholder(placeholder)
|
||||
}
|
||||
|
||||
fn generalize_existential(&mut self, universe: ty::UniverseIndex) -> ty::Region<'tcx> {
|
||||
|
|
|
@ -14,7 +14,7 @@ use rustc_hir::def_id::DefId;
|
|||
use rustc_middle::ty::error::ExpectedFound;
|
||||
use rustc_middle::ty::print::{FmtPrinter, Print, RegionHighlightMode};
|
||||
use rustc_middle::ty::subst::SubstsRef;
|
||||
use rustc_middle::ty::{self, RePlaceholder, ReVar, Region, TyCtxt};
|
||||
use rustc_middle::ty::{self, RePlaceholder, Region, TyCtxt};
|
||||
|
||||
use std::fmt;
|
||||
|
||||
|
@ -79,7 +79,7 @@ impl<'tcx> NiceRegionError<'_, 'tcx> {
|
|||
sup_placeholder @ Region(Interned(RePlaceholder(_), _)),
|
||||
_,
|
||||
)) => self.try_report_trait_placeholder_mismatch(
|
||||
Some(self.tcx().mk_region(ReVar(*vid))),
|
||||
Some(self.tcx().mk_re_var(*vid)),
|
||||
cause,
|
||||
Some(*sub_placeholder),
|
||||
Some(*sup_placeholder),
|
||||
|
@ -95,7 +95,7 @@ impl<'tcx> NiceRegionError<'_, 'tcx> {
|
|||
_,
|
||||
_,
|
||||
)) => self.try_report_trait_placeholder_mismatch(
|
||||
Some(self.tcx().mk_region(ReVar(*vid))),
|
||||
Some(self.tcx().mk_re_var(*vid)),
|
||||
cause,
|
||||
Some(*sub_placeholder),
|
||||
None,
|
||||
|
@ -111,7 +111,7 @@ impl<'tcx> NiceRegionError<'_, 'tcx> {
|
|||
sup_placeholder @ Region(Interned(RePlaceholder(_), _)),
|
||||
_,
|
||||
)) => self.try_report_trait_placeholder_mismatch(
|
||||
Some(self.tcx().mk_region(ReVar(*vid))),
|
||||
Some(self.tcx().mk_re_var(*vid)),
|
||||
cause,
|
||||
None,
|
||||
Some(*sup_placeholder),
|
||||
|
@ -127,7 +127,7 @@ impl<'tcx> NiceRegionError<'_, 'tcx> {
|
|||
sup_placeholder @ Region(Interned(RePlaceholder(_), _)),
|
||||
_,
|
||||
)) => self.try_report_trait_placeholder_mismatch(
|
||||
Some(self.tcx().mk_region(ReVar(*vid))),
|
||||
Some(self.tcx().mk_re_var(*vid)),
|
||||
cause,
|
||||
None,
|
||||
Some(*sup_placeholder),
|
||||
|
@ -141,7 +141,7 @@ impl<'tcx> NiceRegionError<'_, 'tcx> {
|
|||
SubregionOrigin::Subtype(box TypeTrace { cause, values }),
|
||||
sup_placeholder @ Region(Interned(RePlaceholder(_), _)),
|
||||
)) => self.try_report_trait_placeholder_mismatch(
|
||||
Some(self.tcx().mk_region(ReVar(*vid))),
|
||||
Some(self.tcx().mk_re_var(*vid)),
|
||||
cause,
|
||||
None,
|
||||
Some(*sup_placeholder),
|
||||
|
|
|
@ -82,10 +82,10 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||
|
||||
let delegate = FnMutDelegate {
|
||||
regions: &mut |br: ty::BoundRegion| {
|
||||
self.tcx.mk_region(ty::RePlaceholder(ty::PlaceholderRegion {
|
||||
self.tcx.mk_re_placeholder(ty::PlaceholderRegion {
|
||||
universe: next_universe,
|
||||
name: br.kind,
|
||||
}))
|
||||
})
|
||||
},
|
||||
types: &mut |bound_ty: ty::BoundTy| {
|
||||
self.tcx.mk_placeholder(ty::PlaceholderType {
|
||||
|
|
|
@ -382,7 +382,7 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {
|
|||
// name the placeholder, then the placeholder is
|
||||
// larger; otherwise, the only ancestor is `'static`.
|
||||
Err(placeholder) if empty_ui.can_name(placeholder.universe) => {
|
||||
self.tcx().mk_region(RePlaceholder(placeholder))
|
||||
self.tcx().mk_re_placeholder(placeholder)
|
||||
}
|
||||
Err(_) => self.tcx().lifetimes.re_static,
|
||||
};
|
||||
|
@ -1046,7 +1046,7 @@ impl<'tcx> LexicalRegionResolutions<'tcx> {
|
|||
ty::ReVar(rid) => match self.values[rid] {
|
||||
VarValue::Empty(_) => r,
|
||||
VarValue::Value(r) => r,
|
||||
VarValue::ErrorValue => tcx.re_error_misc(),
|
||||
VarValue::ErrorValue => tcx.mk_re_error_misc(),
|
||||
},
|
||||
_ => r,
|
||||
};
|
||||
|
|
|
@ -1103,7 +1103,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||
) -> ty::Region<'tcx> {
|
||||
let region_var =
|
||||
self.inner.borrow_mut().unwrap_region_constraints().new_region_var(universe, origin);
|
||||
self.tcx.mk_region(ty::ReVar(region_var))
|
||||
self.tcx.mk_re_var(region_var)
|
||||
}
|
||||
|
||||
/// Return the universe that the region `r` was created in. For
|
||||
|
|
|
@ -280,7 +280,7 @@ impl<'me, 'tcx> LeakCheck<'me, 'tcx> {
|
|||
placeholder1: ty::PlaceholderRegion,
|
||||
placeholder2: ty::PlaceholderRegion,
|
||||
) -> TypeError<'tcx> {
|
||||
self.error(placeholder1, self.tcx.mk_region(ty::RePlaceholder(placeholder2)))
|
||||
self.error(placeholder1, self.tcx.mk_re_placeholder(placeholder2))
|
||||
}
|
||||
|
||||
fn error(
|
||||
|
@ -413,19 +413,19 @@ impl<'tcx> MiniGraph<'tcx> {
|
|||
for undo_entry in undo_log {
|
||||
match undo_entry {
|
||||
&AddConstraint(Constraint::VarSubVar(a, b)) => {
|
||||
each_edge(tcx.mk_region(ReVar(a)), tcx.mk_region(ReVar(b)));
|
||||
each_edge(tcx.mk_re_var(a), tcx.mk_re_var(b));
|
||||
}
|
||||
&AddConstraint(Constraint::RegSubVar(a, b)) => {
|
||||
each_edge(a, tcx.mk_region(ReVar(b)));
|
||||
each_edge(a, tcx.mk_re_var(b));
|
||||
}
|
||||
&AddConstraint(Constraint::VarSubReg(a, b)) => {
|
||||
each_edge(tcx.mk_region(ReVar(a)), b);
|
||||
each_edge(tcx.mk_re_var(a), b);
|
||||
}
|
||||
&AddConstraint(Constraint::RegSubReg(a, b)) => {
|
||||
each_edge(a, b);
|
||||
}
|
||||
&AddGiven(a, b) => {
|
||||
each_edge(a, tcx.mk_region(ReVar(b)));
|
||||
each_edge(a, tcx.mk_re_var(b));
|
||||
}
|
||||
&AddVerify(i) => span_bug!(
|
||||
verifys[i].origin.span(),
|
||||
|
|
|
@ -651,7 +651,7 @@ impl<'tcx> RegionConstraintCollector<'_, 'tcx> {
|
|||
let unified_region = self.unification_table().probe_value(rid);
|
||||
unified_region.0.unwrap_or_else(|| {
|
||||
let root = self.unification_table().find(rid).vid;
|
||||
tcx.mk_region(ty::ReVar(root))
|
||||
tcx.mk_re_var(root)
|
||||
})
|
||||
}
|
||||
_ => region,
|
||||
|
@ -675,7 +675,7 @@ impl<'tcx> RegionConstraintCollector<'_, 'tcx> {
|
|||
) -> Region<'tcx> {
|
||||
let vars = TwoRegions { a, b };
|
||||
if let Some(&c) = self.combine_map(t).get(&vars) {
|
||||
return tcx.mk_region(ReVar(c));
|
||||
return tcx.mk_re_var(c);
|
||||
}
|
||||
let a_universe = self.universe(a);
|
||||
let b_universe = self.universe(b);
|
||||
|
@ -683,7 +683,7 @@ impl<'tcx> RegionConstraintCollector<'_, 'tcx> {
|
|||
let c = self.new_region_var(c_universe, MiscVariable(origin.span()));
|
||||
self.combine_map(t).insert(vars, c);
|
||||
self.undo_log.push(AddCombination(t, vars));
|
||||
let new_r = tcx.mk_region(ReVar(c));
|
||||
let new_r = tcx.mk_re_var(c);
|
||||
for old_r in [a, b] {
|
||||
match t {
|
||||
Glb => self.make_subregion(origin.clone(), new_r, old_r),
|
||||
|
|
|
@ -95,7 +95,7 @@ impl<'a, 'tcx> TypeFolder<TyCtxt<'tcx>> for OpportunisticRegionResolver<'a, 'tcx
|
|||
.borrow_mut()
|
||||
.unwrap_region_constraints()
|
||||
.opportunistic_resolve_var(rid);
|
||||
TypeFolder::interner(self).mk_region(ty::ReVar(resolved))
|
||||
TypeFolder::interner(self).mk_re_var(resolved)
|
||||
}
|
||||
_ => r,
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue