Change-Id: I0bc2333c0b4dd3e2e584a90d0d15b28c48130f03 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3740 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
56 lines
1,022 B
Rust
56 lines
1,022 B
Rust
#[derive(Clone, Copy, Debug)]
|
|
pub struct ConstantIdx(pub usize);
|
|
|
|
#[derive(Clone, Copy, Debug)]
|
|
pub struct StackIdx(pub usize);
|
|
|
|
#[derive(Clone, Copy, Debug)]
|
|
pub struct CodeIdx(pub usize);
|
|
|
|
#[derive(Clone, Copy, Debug)]
|
|
pub struct CodeOffset(pub usize);
|
|
|
|
#[derive(Debug)]
|
|
pub enum OpCode {
|
|
/// Push a constant onto the stack.
|
|
OpConstant(ConstantIdx),
|
|
|
|
// Literal pushes
|
|
OpNil,
|
|
OpTrue,
|
|
OpFalse,
|
|
|
|
/// Return from the current function.
|
|
OpReturn,
|
|
|
|
// Boolean & comparison operators
|
|
OpNot,
|
|
OpEqual,
|
|
OpGreater,
|
|
OpLess,
|
|
|
|
/// Unary negation
|
|
OpNegate,
|
|
|
|
// Arithmetic operators
|
|
OpAdd,
|
|
OpSubtract,
|
|
OpMultiply,
|
|
OpDivide,
|
|
|
|
// Built in operations
|
|
OpPrint,
|
|
OpPop,
|
|
|
|
// Variable management
|
|
OpDefineGlobal(ConstantIdx),
|
|
OpGetGlobal(ConstantIdx),
|
|
OpSetGlobal(ConstantIdx),
|
|
OpGetLocal(StackIdx),
|
|
OpSetLocal(StackIdx),
|
|
|
|
// Control flow
|
|
OpJumpPlaceholder(bool),
|
|
OpJump(CodeOffset),
|
|
OpJumpIfFalse(CodeOffset),
|
|
}
|