45 lines
1.1 KiB
Rust
45 lines
1.1 KiB
Rust
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<IrVrVariableDescriptor> {
|
|
self.self_parameter_or_variable.vr_uses()
|
|
}
|
|
}
|