Skip to main content

Opcode

Enum Opcode 

Source
pub enum Opcode {
Show 29 variants Push(u64), PushBool(bool), PushStr(String), PushNil, Pop, Dup, Swap, Add, Sub, Mul, Div, Mod, Eq, Lt, Le, Not, And, Or, Jump(i32), JumpIf(i32), JumpIfNot(i32), Call(u32), Return, Load(u32), Store(u32), LoadGlobal(String), MakeClosure(u32), Apply, Halt,
}
Expand description

A single bytecode instruction.

Variants§

§

Push(u64)

Push a natural number onto the stack.

§

PushBool(bool)

Push a boolean onto the stack.

§

PushStr(String)

Push a string onto the stack.

§

PushNil

Push nil (unit) onto the stack.

§

Pop

Discard the top of the stack.

§

Dup

Duplicate the top of the stack.

§

Swap

Swap the top two stack elements.

§

Add

Add the top two naturals.

§

Sub

Subtract (second - top).

§

Mul

Multiply the top two naturals.

§

Div

Divide (second / top). Errors on division by zero.

§

Mod

Modulo (second % top). Errors on division by zero.

§

Eq

Equality comparison; pushes Bool.

§

Lt

Less-than comparison; pushes Bool.

§

Le

Less-than-or-equal comparison; pushes Bool.

§

Not

Boolean NOT.

§

And

Boolean AND.

§

Or

Boolean OR.

§

Jump(i32)

Unconditional jump by a signed offset from the next instruction.

§

JumpIf(i32)

Jump if the top of the stack is Bool(true) (pops the condition).

§

JumpIfNot(i32)

Jump if the top of the stack is Bool(false) (pops the condition).

§

Call(u32)

Call a function at position u32 in the chunk (simplified model).

§

Return

Return from the current function.

§

Load(u32)

Load local variable at index.

§

Store(u32)

Store top-of-stack into local variable at index (does not pop).

§

LoadGlobal(String)

Load a named global value.

§

MakeClosure(u32)

Create a closure over u32 captured values from the stack.

§

Apply

Apply a closure on the stack to the argument below it.

§

Halt

Stop execution.

Trait Implementations§

Source§

impl Clone for Opcode

Source§

fn clone(&self) -> Opcode

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 Opcode

Source§

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

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

impl PartialEq for Opcode

Source§

fn eq(&self, other: &Opcode) -> 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 StructuralPartialEq for Opcode

Auto Trait Implementations§

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> 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<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<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.