use super::*;
impl StructuredBodyLowerer<'_, '_> {
pub(crate) fn block_prefix_temp_expr_overrides(
&self,
block: BlockRef,
) -> (BTreeMap<TempId, HirExpr>, BTreeSet<TempId>) {
let Some(prefix_indices) = self.block_prefix_instr_indices(block, false) else {
return (BTreeMap::new(), BTreeSet::new());
};
let mut expr_overrides = BTreeMap::new();
let mut all_prefix_temps = BTreeSet::new();
for instr_index in prefix_indices {
let instr_ref = InstrRef(instr_index);
if self.overrides.instr_is_suppressed(instr_ref) {
continue;
}
for def in &self.lowering.dataflow.instr_defs[instr_index] {
let temp = self.lowering.bindings.fixed_temps[def.index()];
all_prefix_temps.insert(temp);
let Some(mut expr) = expr_for_fixed_def(self.lowering, *def) else {
continue;
};
rewrite_expr_temps(&mut expr, &expr_overrides);
expr_overrides.insert(temp, expr);
}
}
(expr_overrides, all_prefix_temps)
}
pub(crate) fn block_prefix_temp_def_order(&self, block: BlockRef) -> BTreeMap<TempId, usize> {
let Some(prefix_indices) = self.block_prefix_instr_indices(block, false) else {
return BTreeMap::new();
};
let mut def_order = BTreeMap::new();
for instr_index in prefix_indices {
for def in &self.lowering.dataflow.instr_defs[instr_index] {
let temp = self.lowering.bindings.fixed_temps[def.index()];
def_order.insert(temp, instr_index);
}
}
def_order
}
}