address review

This commit is contained in:
b-naber 2023-02-21 21:54:53 +00:00
parent c9843d6144
commit 8252a6eddf
5 changed files with 31 additions and 17 deletions

View file

@ -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) {

View file

@ -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(&reg_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);

View file

@ -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();

View file

@ -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

View file

@ -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,