use std::io::Write;
use crate::{reg::Label, traits::Writable};
pub enum Expr {
Sub(Label, Label),
Add(Label, Label),
UConst(usize),
SConst(isize),
}
impl Writable for Expr {
fn write_in(&self, file: &mut std::fs::File) -> std::io::Result<()> {
match self {
Expr::Sub(lab1, lab2) => {
lab1.write_in(file)?;
file.write_all(b"-")?;
lab2.write_in(file)
}
Expr::Add(lab1, lab2) => {
lab1.write_in(file)?;
file.write_all(b"+")?;
lab2.write_in(file)
}
Expr::UConst(c) => file.write_all(format!("{c}").as_bytes()),
Expr::SConst(c) => file.write_all(format!("{c}").as_bytes()),
}
}
}