evm_interpreter/interpreter/
mod.rs1mod etable;
2mod valids;
3
4use alloc::{boxed::Box, vec::Vec};
5
6pub use self::etable::EtableInterpreter;
7pub use self::valids::Valids;
8
9use crate::{Capture, ExitError, ExitResult};
10
11#[derive(Eq, PartialEq, Debug)]
13pub enum Control<Trap> {
14 NoAction,
16 Continue(usize),
18 Exit(ExitResult),
20 Jump(usize),
22 Trap(Box<Trap>),
24}
25
26pub trait Interpreter<H> {
28 type State;
30 type Trap;
32
33 fn deconstruct(self) -> (Self::State, Vec<u8>);
35 fn state(&self) -> &Self::State;
37 fn state_mut(&mut self) -> &mut Self::State;
39 fn run(&mut self, handle: &mut H) -> Capture<ExitResult, Self::Trap>;
41}
42
43pub trait FeedbackInterpreter<H, Feedback>: Interpreter<H> {
45 fn feedback(&mut self, feedback: Feedback, handler: &mut H) -> Result<(), ExitError>;
47}
48
49pub trait StepInterpreter<H>: Interpreter<H> {
51 fn step(&mut self, handle: &mut H) -> Result<(), Capture<ExitResult, Self::Trap>>;
53}