use std::time::Duration;
use crate::bytecode::{CapId, Value};
use super::fault::Fault;
#[derive(Debug)]
pub enum VmResult {
Complete(Value),
Yield,
Sleep(Duration),
Spawn {
function: u32,
args: Vec<Value>,
dest_reg: u8,
requested_rights: crate::bytecode::CapRights,
},
SelfPid { dest_reg: u8 },
Send { target_cap: CapId, message: Value },
Receive {
dest_reg: u8,
timeout: Option<Duration>,
match_tag: Option<u16>,
},
Ask {
dest_reg: u8,
target_cap: CapId,
request: Value,
timeout: Option<Duration>,
},
Monitor { dest_reg: u8, target_cap: CapId },
Demonitor { monitor_reg: u8 },
Link { dest_reg: u8, target_cap: CapId },
Unlink { link_reg: u8 },
Delegate {
dest_reg: u8,
src_cap: CapId,
want_rights: crate::bytecode::CapRights,
want_native_cap: Option<CapId>,
},
Trap(Fault),
}