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