Implement IntoIterator for PrimaryMap.
This makes iterating through a `PrimaryMap` more consistent with iterating through a `Vec`.
This commit is contained in:
@@ -44,7 +44,7 @@ pub fn do_dce(func: &mut Function, domtree: &mut DominatorTree) {
|
||||
let mut live = Vec::with_capacity(func.dfg.num_values());
|
||||
live.resize(func.dfg.num_values(), false);
|
||||
|
||||
for &ebb in domtree.cfg_postorder().iter() {
|
||||
for &ebb in domtree.cfg_postorder() {
|
||||
let mut pos = FuncCursor::new(func).at_bottom(ebb);
|
||||
while let Some(inst) = pos.prev_inst() {
|
||||
{
|
||||
|
||||
@@ -88,7 +88,7 @@ impl Pressure {
|
||||
};
|
||||
|
||||
// Get the layout of aliasing top-level register classes from the register banks.
|
||||
for bank in reginfo.banks.iter() {
|
||||
for bank in reginfo.banks {
|
||||
let first = bank.first_toprc;
|
||||
let num = bank.num_toprcs;
|
||||
|
||||
|
||||
@@ -50,31 +50,31 @@ fn write_preamble(
|
||||
writeln!(w, " {} = {}", ss, slot)?;
|
||||
}
|
||||
|
||||
for (gv, gv_data) in func.global_vars.iter() {
|
||||
for (gv, gv_data) in &func.global_vars {
|
||||
any = true;
|
||||
writeln!(w, " {} = {}", gv, gv_data)?;
|
||||
}
|
||||
|
||||
for (heap, heap_data) in func.heaps.iter() {
|
||||
for (heap, heap_data) in &func.heaps {
|
||||
any = true;
|
||||
writeln!(w, " {} = {}", heap, heap_data)?;
|
||||
}
|
||||
|
||||
// Write out all signatures before functions since function declarations can refer to
|
||||
// signatures.
|
||||
for (sig, sig_data) in func.dfg.signatures.iter() {
|
||||
for (sig, sig_data) in &func.dfg.signatures {
|
||||
any = true;
|
||||
writeln!(w, " {} = {}", sig, sig_data.display(regs))?;
|
||||
}
|
||||
|
||||
for (fnref, ext_func) in func.dfg.ext_funcs.iter() {
|
||||
for (fnref, ext_func) in &func.dfg.ext_funcs {
|
||||
any = true;
|
||||
if ext_func.signature != SigRef::reserved_value() {
|
||||
writeln!(w, " {} = {}", fnref, ext_func)?;
|
||||
}
|
||||
}
|
||||
|
||||
for (jt, jt_data) in func.jump_tables.iter() {
|
||||
for (jt, jt_data) in &func.jump_tables {
|
||||
any = true;
|
||||
writeln!(w, " {} = {}", jt, jt_data)?;
|
||||
}
|
||||
|
||||
@@ -121,6 +121,30 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, K, V> IntoIterator for &'a PrimaryMap<K, V>
|
||||
where
|
||||
K: EntityRef,
|
||||
{
|
||||
type Item = (K, &'a V);
|
||||
type IntoIter = Iter<'a, K, V>;
|
||||
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
Iter::new(self.elems.iter())
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, K, V> IntoIterator for &'a mut PrimaryMap<K, V>
|
||||
where
|
||||
K: EntityRef,
|
||||
{
|
||||
type Item = (K, &'a mut V);
|
||||
type IntoIter = IterMut<'a, K, V>;
|
||||
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
IterMut::new(self.elems.iter_mut())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@@ -171,7 +195,7 @@ mod tests {
|
||||
m.push(33);
|
||||
|
||||
let mut i = 0;
|
||||
for (key, value) in m.iter() {
|
||||
for (key, value) in &m {
|
||||
assert_eq!(key.index(), i);
|
||||
match i {
|
||||
0 => assert_eq!(*value, 12),
|
||||
|
||||
Reference in New Issue
Block a user