36 lines
1.1 KiB
Rust
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(),
|
|
}
|
|
}
|
|
}
|