Skip to main content

Instr

Enum Instr 

Source
pub enum Instr {
Show 21 variants Send { chan: Reg, val: Reg, }, Receive { chan: Reg, dst: Reg, }, Offer { chan: Reg, label: String, }, Choose { chan: Reg, table: Vec<(String, PC)>, }, Open { roles: Vec<String>, local_types: Vec<(String, LocalTypeR)>, handlers: Vec<((String, String), String)>, dsts: Vec<(String, Reg)>, }, Close { session: Reg, }, Invoke { action: InvokeAction, }, Acquire { layer: String, dst: Reg, }, Release { layer: String, evidence: Reg, }, Fork { ghost: Reg, }, Join, Abort, Transfer { endpoint: Reg, target: Reg, bundle: Reg, }, Tag { fact: Reg, dst: Reg, }, Check { knowledge: Reg, target: Reg, dst: Reg, }, Set { dst: Reg, val: ImmValue, }, Move { dst: Reg, src: Reg, }, Jump { target: PC, }, Spawn { target: PC, args: Vec<Reg>, }, Yield, Halt,
}
Expand description

Bytecode instruction.

The initial instruction set covers communication, session lifecycle, effects, and control flow. Guard/speculation/ownership instructions are deferred.

Variants§

§

Send

Send value in val register to channel in chan register.

Fields

§chan: Reg

Channel register.

§val: Reg

Value register to send.

§

Receive

Receive from channel in chan register, store in dst register.

Fields

§chan: Reg

Channel register.

§dst: Reg

Destination register for the received value.

§

Offer

Offer a label on channel.

Fields

§chan: Reg

Channel register.

§label: String

Label to select.

§

Choose

Choose from a branch table using a received label.

Fields

§chan: Reg

Channel register.

§table: Vec<(String, PC)>

Label-to-PC jump table.

§

Open

Open a new session with the given roles and endpoint destinations.

Fields

§roles: Vec<String>

Role names for the session.

§local_types: Vec<(String, LocalTypeR)>

Role-to-local-type mappings for session initialization.

§handlers: Vec<((String, String), String)>

Edge-to-handler mappings as ((sender, receiver), handler_id).

§dsts: Vec<(String, Reg)>

Role-to-register endpoint mappings.

§

Close

Close the session referenced by the register.

Fields

§session: Reg

Register holding the session reference.

§

Invoke

Invoke an effect handler action.

Fields

§action: InvokeAction

Action descriptor.

§

Acquire

Acquire a guard layer and store evidence in a register.

Fields

§layer: String

Guard layer identifier.

§dst: Reg

Destination register for evidence.

§

Release

Release a guard layer using evidence from a register.

Fields

§layer: String

Guard layer identifier.

§evidence: Reg

Register holding evidence.

§

Fork

Enter speculation using a ghost session id.

Fields

§ghost: Reg

Register holding the ghost session id.

§

Join

Join speculative execution.

§

Abort

Abort speculative execution.

§

Transfer

Transfer an endpoint to another coroutine.

Fields

§endpoint: Reg

Register holding the endpoint.

§target: Reg

Register holding the target coroutine id.

§bundle: Reg

Register holding a bundle descriptor.

§

Tag

Tag a knowledge fact and return success.

Fields

§fact: Reg

Register holding the fact.

§dst: Reg

Destination register for the result.

§

Check

Check a knowledge fact against the flow policy.

Fields

§knowledge: Reg

Register holding the knowledge fact.

§target: Reg

Register holding the target role.

§dst: Reg

Destination register for the result.

§

Set

Set a register to an immediate value.

Fields

§dst: Reg

Destination register.

§val: ImmValue

Immediate value to load.

§

Move

Copy register src to dst.

Fields

§dst: Reg

Destination register.

§src: Reg

Source register.

§

Jump

Unconditional jump.

Fields

§target: PC

Target program counter.

§

Spawn

Spawn a new coroutine at target PC with argument registers.

Fields

§target: PC

Target program counter for the spawned coroutine.

§args: Vec<Reg>

Registers to copy into the spawned coroutine argument area.

§

Yield

Yield execution to the scheduler.

§

Halt

Halt this coroutine (normal termination).

Trait Implementations§

Source§

impl Clone for Instr

Source§

fn clone(&self) -> Instr

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Instr

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Instr

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Instr

Source§

fn eq(&self, other: &Instr) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Instr

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Eq for Instr

Source§

impl StructuralPartialEq for Instr

Auto Trait Implementations§

§

impl Freeze for Instr

§

impl RefUnwindSafe for Instr

§

impl Send for Instr

§

impl Sync for Instr

§

impl Unpin for Instr

§

impl UnsafeUnpin for Instr

§

impl UnwindSafe for Instr

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

Source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
Source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

Source§

fn lossy_into(self) -> Dst

Performs the conversion.
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> StrictAs for T

Source§

fn strict_as<Dst>(self) -> Dst
where T: StrictCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> StrictCastFrom<Src> for Dst
where Src: StrictCast<Dst>,

Source§

fn strict_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,