address review
This commit is contained in:
parent
c9843d6144
commit
8252a6eddf
@ -505,7 +505,7 @@ pub(crate) fn next_region_var<F>(
|
||||
{
|
||||
let next_region = self.infcx.next_region_var(origin);
|
||||
let vid = next_region
|
||||
.try_get_var()
|
||||
.as_var()
|
||||
.unwrap_or_else(|| bug!("expected RegionKind::RegionVar on {:?}", next_region));
|
||||
|
||||
if cfg!(debug_assertions) {
|
||||
@ -534,7 +534,7 @@ pub(crate) fn next_nll_region_var<F>(
|
||||
{
|
||||
let next_region = self.infcx.next_nll_region_var(origin.clone());
|
||||
let vid = next_region
|
||||
.try_get_var()
|
||||
.as_var()
|
||||
.unwrap_or_else(|| bug!("expected RegionKind::RegionVar on {:?}", next_region));
|
||||
|
||||
if cfg!(debug_assertions) {
|
||||
|
@ -261,10 +261,10 @@ fn sccs_info<'cx, 'tcx>(
|
||||
}
|
||||
debug!(debug_str);
|
||||
|
||||
let num_components = sccs.scc_data.ranges.len();
|
||||
let num_components = sccs.scc_data().ranges().len();
|
||||
let mut components = vec![FxHashSet::default(); num_components];
|
||||
|
||||
for (reg_var_idx, scc_idx) in sccs.scc_indices.iter().enumerate() {
|
||||
for (reg_var_idx, scc_idx) in sccs.scc_indices().iter().enumerate() {
|
||||
let reg_var = ty::RegionVid::from_usize(reg_var_idx);
|
||||
let origin = var_to_origin.get(®_var).unwrap_or_else(|| &RegionCtxt::Unknown);
|
||||
components[scc_idx.as_usize()].insert((reg_var, *origin));
|
||||
@ -298,8 +298,8 @@ fn sccs_info<'cx, 'tcx>(
|
||||
|
||||
let mut scc_node_to_edges = FxHashMap::default();
|
||||
for (scc_idx, repr) in components_representatives.iter() {
|
||||
let edges_range = sccs.scc_data.ranges[*scc_idx].clone();
|
||||
let edges = &sccs.scc_data.all_successors[edges_range];
|
||||
let edges_range = sccs.scc_data().ranges()[*scc_idx].clone();
|
||||
let edges = &sccs.scc_data().all_successors()[edges_range];
|
||||
let edge_representatives =
|
||||
edges.iter().map(|scc_idx| components_representatives[scc_idx]).collect::<Vec<_>>();
|
||||
scc_node_to_edges.insert((scc_idx, repr), edge_representatives);
|
||||
|
@ -130,9 +130,8 @@ fn next_placeholder_region(&mut self, placeholder: ty::PlaceholderRegion) -> ty:
|
||||
ty::BoundRegionKind::BrEnv => BoundRegionInfo::Name(Symbol::intern("env")),
|
||||
};
|
||||
|
||||
let reg_var = reg
|
||||
.try_get_var()
|
||||
.unwrap_or_else(|| bug!("expected region {:?} to be of kind ReVar", reg));
|
||||
let reg_var =
|
||||
reg.as_var().unwrap_or_else(|| bug!("expected region {:?} to be of kind ReVar", reg));
|
||||
let mut var_to_origin = self.type_checker.infcx.reg_var_to_origin.borrow_mut();
|
||||
let prev = var_to_origin.insert(reg_var, RegionCtxt::Placeholder(reg_info));
|
||||
assert!(matches!(prev, None));
|
||||
@ -147,9 +146,8 @@ fn generalize_existential(&mut self, universe: ty::UniverseIndex) -> ty::Region<
|
||||
universe,
|
||||
);
|
||||
|
||||
let reg_var = reg
|
||||
.try_get_var()
|
||||
.unwrap_or_else(|| bug!("expected region {:?} to be of kind ReVar", reg));
|
||||
let reg_var =
|
||||
reg.as_var().unwrap_or_else(|| bug!("expected region {:?} to be of kind ReVar", reg));
|
||||
|
||||
if cfg!(debug_assertions) {
|
||||
let mut var_to_origin = self.type_checker.infcx.reg_var_to_origin.borrow_mut();
|
||||
|
@ -21,21 +21,21 @@
|
||||
pub struct Sccs<N: Idx, S: Idx> {
|
||||
/// For each node, what is the SCC index of the SCC to which it
|
||||
/// belongs.
|
||||
pub scc_indices: IndexVec<N, S>,
|
||||
scc_indices: IndexVec<N, S>,
|
||||
|
||||
/// Data about each SCC.
|
||||
pub scc_data: SccData<S>,
|
||||
scc_data: SccData<S>,
|
||||
}
|
||||
|
||||
pub struct SccData<S: Idx> {
|
||||
/// For each SCC, the range of `all_successors` where its
|
||||
/// successors can be found.
|
||||
pub ranges: IndexVec<S, Range<usize>>,
|
||||
ranges: IndexVec<S, Range<usize>>,
|
||||
|
||||
/// Contains the successors for all the Sccs, concatenated. The
|
||||
/// range of indices corresponding to a given SCC is found in its
|
||||
/// SccData.
|
||||
pub all_successors: Vec<S>,
|
||||
all_successors: Vec<S>,
|
||||
}
|
||||
|
||||
impl<N: Idx, S: Idx + Ord> Sccs<N, S> {
|
||||
@ -43,6 +43,14 @@ pub fn new(graph: &(impl DirectedGraph<Node = N> + WithNumNodes + WithSuccessors
|
||||
SccsConstruction::construct(graph)
|
||||
}
|
||||
|
||||
pub fn scc_indices(&self) -> &IndexVec<N, S> {
|
||||
&self.scc_indices
|
||||
}
|
||||
|
||||
pub fn scc_data(&self) -> &SccData<S> {
|
||||
&self.scc_data
|
||||
}
|
||||
|
||||
/// Returns the number of SCCs in the graph.
|
||||
pub fn num_sccs(&self) -> usize {
|
||||
self.scc_data.len()
|
||||
@ -115,6 +123,14 @@ fn len(&self) -> usize {
|
||||
self.ranges.len()
|
||||
}
|
||||
|
||||
pub fn ranges(&self) -> &IndexVec<S, Range<usize>> {
|
||||
&self.ranges
|
||||
}
|
||||
|
||||
pub fn all_successors(&self) -> &Vec<S> {
|
||||
&self.all_successors
|
||||
}
|
||||
|
||||
/// Returns the successors of the given SCC.
|
||||
fn successors(&self, scc: S) -> &[S] {
|
||||
// Annoyingly, `range` does not implement `Copy`, so we have
|
||||
|
@ -1752,7 +1752,7 @@ pub fn is_var(self) -> bool {
|
||||
matches!(self.kind(), ty::ReVar(_))
|
||||
}
|
||||
|
||||
pub fn try_get_var(self) -> Option<RegionVid> {
|
||||
pub fn as_var(self) -> Option<RegionVid> {
|
||||
match self.kind() {
|
||||
ty::ReVar(vid) => Some(vid),
|
||||
_ => None,
|
||||
|
Loading…
Reference in New Issue
Block a user