Remove IdxSet::elems
This commit is contained in:
parent
89d12478ac
commit
f69a0999e7
3 changed files with 11 additions and 39 deletions
|
|
@ -224,32 +224,6 @@ impl<T: Idx> IdxSet<T> {
|
|||
_pd: PhantomData,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn elems(&self, universe_size: usize) -> Elems<T> {
|
||||
Elems { i: 0, set: self, universe_size: universe_size }
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Elems<'a, T: Idx> { i: usize, set: &'a IdxSet<T>, universe_size: usize }
|
||||
|
||||
impl<'a, T: Idx> Iterator for Elems<'a, T> {
|
||||
type Item = T;
|
||||
fn next(&mut self) -> Option<T> {
|
||||
if self.i >= self.universe_size { return None; }
|
||||
let mut i = self.i;
|
||||
loop {
|
||||
if i >= self.universe_size {
|
||||
self.i = i; // (mark iteration as complete.)
|
||||
return None;
|
||||
}
|
||||
if self.set.contains(&T::new(i)) {
|
||||
self.i = i + 1; // (next element to start at.)
|
||||
return Some(T::new(i));
|
||||
}
|
||||
i = i + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Iter<'a, T: Idx> {
|
||||
|
|
|
|||
|
|
@ -555,7 +555,7 @@ impl<'cx, 'gcx, 'tcx> DataflowResultsConsumer<'cx, 'tcx> for MirBorrowckCtxt<'cx
|
|||
// Look for any active borrows to locals
|
||||
let domain = flow_state.borrows.operator();
|
||||
let data = domain.borrows();
|
||||
flow_state.borrows.with_elems_outgoing(|borrows| {
|
||||
flow_state.borrows.with_iter_outgoing(|borrows| {
|
||||
for i in borrows {
|
||||
let borrow = &data[i.borrow_index()];
|
||||
self.check_for_local_borrow(borrow, span);
|
||||
|
|
@ -571,7 +571,7 @@ impl<'cx, 'gcx, 'tcx> DataflowResultsConsumer<'cx, 'tcx> for MirBorrowckCtxt<'cx
|
|||
// so this "extra check" serves as a kind of backup.
|
||||
let domain = flow_state.borrows.operator();
|
||||
let data = domain.borrows();
|
||||
flow_state.borrows.with_elems_outgoing(|borrows| {
|
||||
flow_state.borrows.with_iter_outgoing(|borrows| {
|
||||
for i in borrows {
|
||||
let borrow = &data[i.borrow_index()];
|
||||
let context = ContextKind::StorageDead.new(loc);
|
||||
|
|
@ -1310,7 +1310,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
|
|||
place
|
||||
);
|
||||
|
||||
for i in flow_state.ever_inits.elems_incoming() {
|
||||
for i in flow_state.ever_inits.iter_incoming() {
|
||||
let init = self.move_data.inits[i];
|
||||
let init_place = &self.move_data.move_paths[init.path].place;
|
||||
if self.places_conflict(&init_place, place, Deep) {
|
||||
|
|
@ -2155,8 +2155,8 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
|
|||
|
||||
// check for loan restricting path P being used. Accounts for
|
||||
// borrows of P, P.a.b, etc.
|
||||
let mut elems_incoming = flow_state.borrows.elems_incoming();
|
||||
while let Some(i) = elems_incoming.next() {
|
||||
let mut iter_incoming = flow_state.borrows.iter_incoming();
|
||||
while let Some(i) = iter_incoming.next() {
|
||||
let borrowed = &data[i.borrow_index()];
|
||||
|
||||
if self.places_conflict(&borrowed.borrowed_place, place, access) {
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
//! locations.
|
||||
|
||||
use rustc::mir::{BasicBlock, Location};
|
||||
use rustc_data_structures::indexed_set::{self, IdxSetBuf};
|
||||
use rustc_data_structures::indexed_set::{IdxSetBuf, Iter};
|
||||
use rustc_data_structures::indexed_vec::Idx;
|
||||
|
||||
use dataflow::{BitDenotation, BlockSets, DataflowResults};
|
||||
|
|
@ -117,23 +117,21 @@ where
|
|||
}
|
||||
|
||||
/// Returns an iterator over the elements present in the current state.
|
||||
pub fn elems_incoming(&self) -> iter::Peekable<indexed_set::Elems<BD::Idx>> {
|
||||
let univ = self.base_results.sets().bits_per_block();
|
||||
self.curr_state.elems(univ).peekable()
|
||||
pub fn iter_incoming(&self) -> iter::Peekable<Iter<BD::Idx>> {
|
||||
self.curr_state.iter().peekable()
|
||||
}
|
||||
|
||||
/// Creates a clone of the current state and applies the local
|
||||
/// effects to the clone (leaving the state of self intact).
|
||||
/// Invokes `f` with an iterator over the resulting state.
|
||||
pub fn with_elems_outgoing<F>(&self, f: F)
|
||||
pub fn with_iter_outgoing<F>(&self, f: F)
|
||||
where
|
||||
F: FnOnce(indexed_set::Elems<BD::Idx>),
|
||||
F: FnOnce(Iter<BD::Idx>),
|
||||
{
|
||||
let mut curr_state = self.curr_state.clone();
|
||||
curr_state.union(&self.stmt_gen);
|
||||
curr_state.subtract(&self.stmt_kill);
|
||||
let univ = self.base_results.sets().bits_per_block();
|
||||
f(curr_state.elems(univ));
|
||||
f(curr_state.iter());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue