ethrex_levm/opcode_handlers/
mod.rs1use crate::{
2 errors::{ExceptionalHalt, OpcodeResult, VMError},
3 vm::VM,
4};
5
6pub mod arithmetic;
7pub mod bitwise_comparison;
8pub mod block;
9pub mod dup;
10pub mod environment;
11pub mod exchange;
12pub mod keccak;
13pub mod logging;
14pub mod push;
15pub mod stack_memory_storage_flow;
16pub mod system;
17
18pub trait OpcodeHandler {
19 fn eval(vm: &mut VM<'_>) -> Result<OpcodeResult, VMError>;
20}
21
22pub struct OpStopHandler;
23impl OpcodeHandler for OpStopHandler {
24 fn eval(_vm: &mut VM<'_>) -> Result<OpcodeResult, VMError> {
25 Ok(OpcodeResult::Halt)
26 }
27}
28
29pub struct OpInvalidHandler;
30impl OpcodeHandler for OpInvalidHandler {
31 fn eval(_vm: &mut VM<'_>) -> Result<OpcodeResult, VMError> {
32 Err(ExceptionalHalt::InvalidOpcode.into())
33 }
34}