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> {
27 type State;
28 type Trap;
29
30 fn deconstruct(self) -> (Self::State, Vec<u8>);
31 fn state(&self) -> &Self::State;
32 fn state_mut(&mut self) -> &mut Self::State;
33 fn run(&mut self, handle: &mut H) -> Capture<ExitResult, Self::Trap>;
34}
35
36pub trait FeedbackInterpreter<H, Feedback>: Interpreter<H> {
37 fn feedback(&mut self, feedback: Feedback, handler: &mut H) -> Result<(), ExitError>;
38}
39
40pub trait StepInterpreter<H>: Interpreter<H> {
41 fn step(&mut self, handle: &mut H) -> Result<(), Capture<ExitResult, Self::Trap>>;
42}