use crate::ast::{BinOp, UnOp};
use crate::number::Number;
#[cfg(feature = "serialization")]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
pub enum Instr {
Push(Number),
Load(usize), Store(usize), Neg,
Add,
Sub,
Mul,
Div,
Pow,
Fact,
Call(usize, usize), Equal,
NotEqual,
Less,
LessEqual,
Greater,
GreaterEqual,
Jmp(usize), Jz(usize), }
impl From<UnOp> for Instr {
fn from(op: UnOp) -> Self {
match op {
UnOp::Neg => Instr::Neg,
UnOp::Fact => Instr::Fact,
}
}
}
impl From<BinOp> for Instr {
fn from(op: BinOp) -> Self {
match op {
BinOp::Add => Instr::Add,
BinOp::Sub => Instr::Sub,
BinOp::Mul => Instr::Mul,
BinOp::Div => Instr::Div,
BinOp::Pow => Instr::Pow,
BinOp::Equal => Instr::Equal,
BinOp::NotEqual => Instr::NotEqual,
BinOp::Less => Instr::Less,
BinOp::LessEqual => Instr::LessEqual,
BinOp::Greater => Instr::Greater,
BinOp::GreaterEqual => Instr::GreaterEqual,
}
}
}