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 IrGetFieldRef { self_parameter_or_variable: IrParameterOrVariable, field_index: usize, } impl IrGetFieldRef { 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 IrGetFieldRef { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { write!( f, "&{}.{}", self.self_parameter_or_variable, self.field_index ) } } impl VrUser for IrGetFieldRef { fn vr_uses(&self) -> HashSet { self.self_parameter_or_variable().vr_uses() } }