pub enum VerifyError {
UnknownOpcode {
at: usize,
byte: u8,
},
ConstOutOfRange {
at: usize,
index: u32,
len: usize,
},
FunctionOutOfRange {
at: usize,
index: u32,
len: usize,
},
JumpOutOfRange {
at: usize,
target: i64,
len: usize,
},
EmptyFunctionTable,
EntryOutOfRange {
function: usize,
entry: u32,
len: usize,
},
ArityExceedsRegisters {
function: usize,
arity: u8,
num_registers: u8,
},
}Expand description
Why a Chunk failed verification.
The verifier’s job is to make every fact the interpreter’s hot loop
relies on (jump targets in range, constant/function indices in range)
true before a single instruction runs, so byteflow-vm never has to
re-check them per-step. Skipping this on trusted, compiler-generated
bytecode is fine; it is mandatory before loading anything that crossed a
trust boundary (a plugin, a network-fetched module, see design notes
§24 capability/sandboxing).
Variants§
UnknownOpcode
ConstOutOfRange
FunctionOutOfRange
JumpOutOfRange
EmptyFunctionTable
EntryOutOfRange
ArityExceedsRegisters
A function declares more parameters than it has registers to hold
them. The VM loads r0..arity on entry, so this makes the very first
thing a call does — copying arguments in — reach past the register
file. Cheap to settle here: it is a static property of the function
table, one comparison per function, and no amount of runtime checking
makes such a function callable.
Trait Implementations§
Source§impl Clone for VerifyError
impl Clone for VerifyError
Source§fn clone(&self) -> VerifyError
fn clone(&self) -> VerifyError
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for VerifyError
impl Debug for VerifyError
Source§impl Display for VerifyError
impl Display for VerifyError
impl Eq for VerifyError
Source§impl Error for VerifyError
impl Error for VerifyError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()