Per-call execution frame.
A frame is everything that gets a fresh value when a CALL/CREATE-like opcode spawns a child, and that gets restored when the child halts:
pc,stack,memory,gas,refund— execution registerscode— the currently-executing bytecodereturn_data— buffer holding the most recent child frame's outputcontract— the per-call message context (msg.sender,msg.value,address,calldata,balances)depth— the EVM call depth (max 1024)is_static— STATICCALL flag; state-mutating opcodes revert under itreturn_offset/return_size— where in the parent's memory the child should write its return data
The active frame lives at MachineState.frame; suspended parent frames
live in MachineState.call_stack as the same struct. push_frame and
pop_frame move frames between the two.
Summary
Types
@type t() :: %EEVM.Interpreter.MachineState.Frame{ code: binary(), contract: EEVM.Context.Contract.t(), depth: non_neg_integer(), gas: non_neg_integer(), is_static: boolean(), memory: EEVM.Interpreter.Memory.t(), pc: non_neg_integer(), refund: non_neg_integer(), return_data: binary(), return_offset: non_neg_integer(), return_size: non_neg_integer(), stack: EEVM.Interpreter.Stack.t() }