deimos-lang/dmc-lib/src/ir/ir_get_field_ref.rs
2026-03-15 13:16:21 -05:00

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()
}
}