use crate::ir::ir_parameter_or_variable::IrParameterOrVariable; use crate::ir::ir_variable::IrVrVariableDescriptor; use crate::ir::register_allocation::VrUser; use std::collections::HashSet; use std::fmt::{Display, Formatter}; pub struct IrGetFieldRefMut { self_parameter_or_variable: IrParameterOrVariable, field_index: usize, } impl IrGetFieldRefMut { pub fn new(self_parameter_or_variable: IrParameterOrVariable, field_index: usize) -> Self { Self { self_parameter_or_variable, field_index, } } pub fn self_parameter_or_variable(&self) -> &IrParameterOrVariable { &self.self_parameter_or_variable } pub fn field_index(&self) -> usize { self.field_index } } impl Display for IrGetFieldRefMut { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { write!( f, "&mut {}.{}", self.self_parameter_or_variable, self.field_index() ) } } impl VrUser for IrGetFieldRefMut { fn vr_uses(&self) -> HashSet { self.self_parameter_or_variable.vr_uses() } }