2.1 KiB
Bytecode Specification
all opcodes are uint8_t, and all operands are uint64_t unless marked with an asterisk (*), where it is marked as uint8_t
OP_LOAD_CONST
loads and initialises a value from the constant buffer into the provided register.
this operation 4 operands.
- the register to write to. (*)
- the type of data from the constant buffer. (*)
- the length of the data in the constant buffer.
- the offset in the constant buffer.
OP_DECLARE
initilises a variable on the current scope with a given value. errors if the variable is already initilises on the current scope.
this operation takes 3 operands.
- the length of the variable name.
- the offset in the constant buffer of the variable name.
- the fixed hash of the variable name.
- the register of the given value (*)
- the index of the source location.
OP_LOAD_NULL
sets a given register to null.
this operation takes 1 operand.
- the register to set to null. (*)
OP_LOAD_FUNCTION
initilises a function to a given register.
- the offset of the name of the function.
- the length of the name of the function.
- the number of arguments.
- the offset of the name of the argument.
- the length of the name of the argument.
- instruction 4 and 5 loop for each argument.
- the offset of the bytecode of the function.
- the length of the bytecode of the function.
OP_IDENTIFIER
initilises a function to a given register.
- the length of the identifer.
- the offset of the identifier.
- the fixed hash of the variable name.
- the index of the source location.
OP_BOOL
converts a value in a given register into true or false depending on the result from __bool__
- the register to read and write to. (*)
OP_JUMP_IF_FALSE
jumps when a the value in the given register is false.
- the register to read. (*)
- the index to jump to.
OP_JUMP_IF_FALSE
jumps unconditionally to an index.
- the index to jump to.
OP_NEW_SCOPE
creates a new stack
OP_POP_SCOPE
pops the top scope off the current