27 lines
899 B
Rust
27 lines
899 B
Rust
use crate::vm_fault::VmFault;
|
|
use prometeu_bytecode::{TRAP_TYPE, Value};
|
|
|
|
pub fn expect_bounded(args: &[Value], idx: usize) -> Result<u32, VmFault> {
|
|
args.get(idx)
|
|
.and_then(|v| match v {
|
|
Value::Bounded(b) => Some(*b),
|
|
_ => None,
|
|
})
|
|
.ok_or_else(|| VmFault::Trap(TRAP_TYPE, format!("Expected bounded at index {}", idx)))
|
|
}
|
|
|
|
pub fn expect_int(args: &[Value], idx: usize) -> Result<i64, VmFault> {
|
|
args.get(idx)
|
|
.and_then(|v| v.as_integer())
|
|
.ok_or_else(|| VmFault::Trap(TRAP_TYPE, format!("Expected integer at index {}", idx)))
|
|
}
|
|
|
|
pub fn expect_bool(args: &[Value], idx: usize) -> Result<bool, VmFault> {
|
|
args.get(idx)
|
|
.and_then(|v| match v {
|
|
Value::Boolean(b) => Some(*b),
|
|
_ => None,
|
|
})
|
|
.ok_or_else(|| VmFault::Trap(TRAP_TYPE, format!("Expected boolean at index {}", idx)))
|
|
}
|