use derive_more::Display;
use crate::{
instruction::InstructionMeta,
opcode::{Mnemonic, OpCode},
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display)]
#[display("{}", self.opcode())]
pub struct Jump;
impl InstructionMeta for Jump {
fn opcode(&self) -> OpCode {
OpCode::Known(Mnemonic::JUMP)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display)]
#[display("{}", self.opcode())]
pub struct JumpI;
impl InstructionMeta for JumpI {
fn opcode(&self) -> OpCode {
OpCode::Known(Mnemonic::JUMPI)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display)]
#[display("{}", self.opcode())]
pub struct Pc;
impl InstructionMeta for Pc {
fn opcode(&self) -> OpCode {
OpCode::Known(Mnemonic::PC)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display)]
#[display("{}", self.opcode())]
pub struct Gas;
impl InstructionMeta for Gas {
fn opcode(&self) -> OpCode {
OpCode::Known(Mnemonic::GAS)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display)]
#[display("{}", self.opcode())]
pub struct JumpDest;
impl InstructionMeta for JumpDest {
fn opcode(&self) -> OpCode {
OpCode::Known(Mnemonic::JUMPDEST)
}
}