mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 23:04:08 +10:00
I added reference values in 62ca7a1fb7,
but forgot to mention it. I'm now using references to assign to the
internals of an array, no matter how many levels deep it is.
68 lines
1.6 KiB
C
68 lines
1.6 KiB
C
#pragma once
|
|
|
|
typedef enum Toy_OpcodeType {
|
|
//This offsets the opcode values, so I can see TOY_OPCODE_READ in GDB clearly
|
|
TOY_OPCODE_UNUSED = 0,
|
|
|
|
//variable instructions
|
|
TOY_OPCODE_READ,
|
|
TOY_OPCODE_DECLARE,
|
|
TOY_OPCODE_ASSIGN,
|
|
TOY_OPCODE_ASSIGN_COMPOUND, //assign to a compound's internals
|
|
TOY_OPCODE_ACCESS,
|
|
TOY_OPCODE_DUPLICATE, //duplicate the top of the stack
|
|
|
|
//arithmetic instructions
|
|
TOY_OPCODE_ADD,
|
|
TOY_OPCODE_SUBTRACT,
|
|
TOY_OPCODE_MULTIPLY,
|
|
TOY_OPCODE_DIVIDE,
|
|
TOY_OPCODE_MODULO,
|
|
|
|
//comparison instructions
|
|
TOY_OPCODE_COMPARE_EQUAL,
|
|
// TOY_OPCODE_COMPARE_NOT, //NOTE: optimized into a composite of TOY_OPCODE_COMPARE_EQUAL + TOY_OPCODE_NEGATE
|
|
TOY_OPCODE_COMPARE_LESS,
|
|
TOY_OPCODE_COMPARE_LESS_EQUAL,
|
|
TOY_OPCODE_COMPARE_GREATER,
|
|
TOY_OPCODE_COMPARE_GREATER_EQUAL,
|
|
|
|
//logical instructions
|
|
TOY_OPCODE_AND,
|
|
TOY_OPCODE_OR,
|
|
TOY_OPCODE_TRUTHY,
|
|
TOY_OPCODE_NEGATE,
|
|
|
|
//control instructions
|
|
TOY_OPCODE_RETURN,
|
|
TOY_OPCODE_JUMP,
|
|
|
|
TOY_OPCODE_SCOPE_PUSH,
|
|
TOY_OPCODE_SCOPE_POP,
|
|
|
|
//various action instructions
|
|
TOY_OPCODE_ASSERT,
|
|
TOY_OPCODE_PRINT,
|
|
TOY_OPCODE_CONCAT,
|
|
TOY_OPCODE_INDEX,
|
|
//TODO: clear the program stack - much needed
|
|
|
|
//meta instructions
|
|
TOY_OPCODE_PASS,
|
|
TOY_OPCODE_ERROR,
|
|
TOY_OPCODE_EOF = 255,
|
|
} Toy_OpcodeType;
|
|
|
|
//specific opcode flags
|
|
typedef enum Toy_OpParamJumpType {
|
|
TOY_OP_PARAM_JUMP_ABSOLUTE = 0, //from the start of the routine's code section
|
|
TOY_OP_PARAM_JUMP_RELATIVE = 1,
|
|
} Toy_OpJumpType;
|
|
|
|
typedef enum Toy_OpParamJumpConditional {
|
|
TOY_OP_PARAM_JUMP_ALWAYS = 0,
|
|
TOY_OP_PARAM_JUMP_IF_TRUE = 1,
|
|
TOY_OP_PARAM_JUMP_IF_FALSE = 2,
|
|
} Toy_OpParamJumpConditional;
|
|
|