deimos-lang/dmc-lib/src/ir/ir_statement.rs

36 lines
1.1 KiB
Rust

use crate::ir::ir_assign::IrAssign;
use crate::ir::ir_call::IrCall;
use crate::ir::ir_return::IrReturn;
use crate::ir::ir_set_field::IrSetField;
use crate::ir::ir_variable::IrVariableId;
use crate::ir::register_allocation::VrUser;
use std::collections::HashSet;
#[derive(Debug)]
pub enum IrStatement {
Assign(IrAssign),
Call(IrCall),
Return(IrReturn),
SetField(IrSetField),
}
impl VrUser for IrStatement {
fn vr_definitions(&self) -> HashSet<IrVariableId> {
match self {
IrStatement::Assign(ir_assign) => ir_assign.vr_definitions(),
IrStatement::Call(ir_call) => ir_call.vr_definitions(),
IrStatement::Return(ir_return) => ir_return.vr_definitions(),
IrStatement::SetField(ir_set_field) => ir_set_field.vr_definitions(),
}
}
fn vr_uses(&self) -> HashSet<IrVariableId> {
match self {
IrStatement::Assign(ir_assign) => ir_assign.vr_uses(),
IrStatement::Call(ir_call) => ir_call.vr_uses(),
IrStatement::Return(ir_return) => ir_return.vr_uses(),
IrStatement::SetField(ir_set_field) => ir_set_field.vr_uses(),
}
}
}