evm_interpreter/machine/
mod.rs1mod memory;
2mod stack;
3
4use alloc::{rc::Rc, vec::Vec};
5
6pub use self::{memory::Memory, stack::Stack};
7
8pub struct Machine<S> {
10 pub(crate) data: Rc<Vec<u8>>,
12 pub(crate) code: Rc<Vec<u8>>,
14 pub retval: Vec<u8>,
18 pub memory: Memory,
20 pub stack: Stack,
22 pub state: S,
24}
25
26impl<S> Machine<S> {
27 pub fn new(
29 code: Rc<Vec<u8>>,
30 data: Rc<Vec<u8>>,
31 stack_limit: usize,
32 memory_limit: usize,
33 state: S,
34 ) -> Self {
35 Self {
36 data,
37 code,
38 retval: Vec::new(),
39 memory: Memory::new(memory_limit),
40 stack: Stack::new(stack_limit),
41 state,
42 }
43 }
44
45 pub fn code(&self) -> &[u8] {
47 &self.code
48 }
49
50 #[must_use]
52 pub fn is_empty(&self) -> bool {
53 self.code.is_empty()
54 }
55}