Files
not-python/runtime/src/vm/inst.rs

42 lines
1.4 KiB
Rust
Raw Normal View History

use crate::obj::prelude::*;
#[derive(Debug, PartialEq)]
pub enum Inst {
/// Push a literal symbol object to the stack.
PushSym(Sym),
/// Pop a value from the stack, possibly into a local symbol.
Pop(Option<Sym>),
/// Pops a symbol value and an object reference.
///
/// This will get an attr from the object reference pointed to by the symbol.
///
/// If the object reference is `:__local__`, this instruction will push a local value.
GetAttr,
/// Pops an object reference, a symbol value, and another object reference.
///
/// This will set an attr of the second object ref to the first object ref, with the symbol
/// value name.
///
/// If the given value is `:__local__`, this instruction will set a local value.
SetAttr,
/// Jump to a given address in the current function unconditionally.
Jump(usize),
/// Jump to a given address in the current function if the condition flag is true.
///
/// The condition flag may be set by an internal function.
JumpTrue(usize),
/// Pops the top item off of the stack, followed by the number of arguments supplied, and
/// attempts to run the `__call__` attribute of the object.
Call(usize),
/// Pops the top value from the stack, and returns from the function, using the popped value as
/// a return value.
Return,
}