use super::{ Instruction, Address }; impl Instruction { fn new_subleq(a: &Address, b: &Address, c: &Address) -> Instruction { Instruction { name: "subleq".to_string(), args: vec![a.clone(), b.clone(), c.clone()], } } pub(crate) fn collapse(&mut self) -> Vec { self.name = self.name.to_lowercase(); static Z: Address = Address::Memory(0); match &*self.name { "subleq" | "add" | "mult" => vec![self.clone()], "jmp" => vec![ Instruction::new_subleq(&Z, &Z, &self.args[0]), ], _ => panic!("Unknown instruction {}!", self.name), } } }