#include "types.h" typedef enum noomC_InstrType : unsigned char { NOOMC_INSTR_NOP = 0, NOOMC_INSTR_LOADC, NOOMC_INSTR_LOAD_NIL, NOOMC_INSTR_LOAD_TRUE, NOOMC_INSTR_LOAD_FALSE, NOOMC_INSTR_COPY, NOOMC_INSTR_JMP, NOOMC_INSTR_JC, NOOMC_INSTR_ADD, NOOMC_INSTR_SUB, NOOMC_INSTR_NEG, NOOMC_INSTR_MUL, NOOMC_INSTR_DIV, NOOMC_INSTR_MOD, NOOMC_INSTR_FLOOR_DIV, NOOMC_INSTR_POW, NOOMC_INSTR_EQ, NOOMC_INSTR_NEQ, NOOMC_INSTR_LT, NOOMC_INSTR_LTE, NOOMC_INSTR_GT, NOOMC_INSTR_GTE, NOOMC_INSTR_NOT, NOOMC_INSTR_BAND, NOOMC_INSTR_BOR, NOOMC_INSTR_BXOR, NOOMC_INSTR_BNOT, NOOMC_INSTR_LSHIFT, NOOMC_INSTR_RSHIFT, NOOMC_INSTR_CONCAT, NOOMC_INSTR_LEN, NOOMC_INSTR_GET, NOOMC_INSTR_GETI, NOOMC_INSTR_SET, NOOMC_INSTR_SETI, NOOMC_INSTR_LOAD_NFT, NOOMC_INSTR_NOP2 = 0xff, } noomC_InstrType; typedef struct noomC_Instr { noomC_InstrType type; unsigned char a; union { struct { unsigned char b; unsigned char c; }; unsigned short u; short s; }; } noomC_Instr; typedef enum noomC_ImmType { NOOMC_IMM_INT, NOOMC_IMM_FLOAT, NOOMC_IMM_STRING, NOOMC_IMM_TABLE, } noomC_ImmType; typedef struct noomC_Imm { noomC_ImmType type; union { // we love math noom_int_t Z; noom_float_t Q; // NOT A MATH THING noom_string_t string; noom_table_t table; // ░░░░░░░░░ ░ ▒░░▒ ▒░ ░░ ░ // ░░░░░░░░░ █░█░▓▓ ░█▒████▒░ █░░████▓ // ░░░░░░░░░ ▓████████░█░▒████▓░████ ░█░ // ░░░░░░░░░ ░░░ ░█▓░█▒█░█░▒▒█▓████▒ ░█▒█ ░█░░ // ░░░░░░░░░ ░░░░░ ░█▓▓███▒█ ▓▓▒▒▒▓▓▒ ▒█▒█▓██▓▓ // ░░░░░░░░░ ░░ ░▓▓███▓█▒░░█▒▓█▓██▓ ▒▓█▓▓▓█▒▒ // ░░░░░░░░░░ ░░ ▒▓█░█▒█░ ░▓▓██████░░██░░▒█ // ░░░░░░░░░░ ░░░░ ░░ ▓▓█▒█▓█▒░ ▒▒▒█▒░█░ ███░░█ // ░░░░░░░░░░ ░░ ▓▒▓███░█▒ ▒░░░▓▓█░░██░▓▒██ // ░░░░░░░░░░ ░░ ░ ░░ ░░ ░░ ░░ ▒░ ░░░ ░░ // ░░░░░░░░░░ ░ ░░░ ░ ░ ░ ░ // ░░░░░░░░░░ ░░░░ ░░ ░ // ░ ░░░░░░░░░ ░░░░ ░ ░ ░ ░░ ░░░ ░░░ ░ ░░ // ░░░░░░░░░ ░ █████ ▒████ ░▓███▓░ ░████░ ░████▓ ░████░ ░▓███▓ ░████░ //░░ ░░░░░░░░░ █▓▒██░░██▓██▒░░██▒██░░██▒▓██░▒██▒██ ██▓▓██ ░██▒██░ ██▒▓██ //░░ ░░░░░░░░░░ ██░▒█▓ ░██░██▒ ▒█▒░██ ░██ ██░ ▓█▒░██ ░██░██░ ▓█▒░██ ██░ // ░░░░░░░░░░░ ░▓███░▒█▓ ██░██░ ▒██▒██ ░██░██ ▒█▒░██ ░██░██░ ▒█▓▒█▓ ░██░ // ░░░░░░░░░░ ░ ░▒███░ ▓████░▓█▒ ░██░██░ ▒██▒█▓ ░██░██ ░▒█▒░██ ░██░██░ ░██▒█▓ ░██░░ // ░░░░░░░░░ ░░ ░ ░░██▓▓█▓░░██ ██░ ▒█▓▒█▓ ██░██░ ▒█▒░██ ░██░██░ ░██▒█▓ ░██░░ // ░░░░░░░░░░ ░░░░ ░ ░███▒██ ░██ ██▒ ▓█▒▒██ ░██░██░ ██░░██░░██ ██▒ ▓█░░██ ░██ // ░░░░░░░░░ ░░░ ░█████▒░█████▒▒▓█████ ░█████▒ ▒█████▓██████▓ ▒██▓██░ █████▒ // ░░░░░░░░░ ░░ ░████▒ ░░███▒░█▒▒███░ ░███▓ ▓███░▓█░███▓░ ▒███░ ░███▒ // ░░░░░░░░░░ ░█░ ░ ░ ▒▒ ░ // ░░░░░░░░░ ░ ░ // ░░░░░░░░░ ░░░░ // ░░░░░░░░░ ░░░░░ ░░ ░ ░ ░ ░ // ░░░░░░░░░ ░░ ░░▒░░ ░▓▒ ░█▓ ░ ░ ░ // ░░░░░░░░░ ░░ ▒█████░ ░██ ░██ ░ ░ // ░░░░░░░░░░░░░ ██▒▒███ ░░ ░ ░ ░░ ░░ ░██ // ░ ░░░░░░░░░░░░░░░ ██░ ░▓▓ ░████ ░████░░█▓ ▒███▓░░██ // ░░░░░░░░░░░░░░░░░░░░░▓███░░ ░██████░██▓██▓▒██░██▓██▒▒██░ // ░░░░░░░░░░░░░░░░░░░░ ░████░░█▓ ██░██ ▓▓░██ ░░▒██▓▒██░ ░ // ░░░░░░░░░░░░░░░░░░░ ░░░░███▒█▓ ██▒██ ░░██░█████▓▒██░ ░░ ░ // ░░░░░░░░░░░░░░░░░░ ░██▒ ░██▒██░░██░██ ░█▓░██░██░▓█▓░██░ ░ ██▓████████▓▒██▒ // ░░░░░░░░░░░░░░░░░ ░██████▓ █████▓ █████▓▒██░█████▓░██░ ░ ░░░███████████▓█▓ // ░░░░░░░░░░░░░░░░░░ ░▓███▒ ░███▒ ░▓██▓ ░█▓ ▒██▓█▓░██░ ░████████████▓█░ // ░░░░░░░░░░░░░░░░░ ░ ░ ░█████████▓██ // ░░░░░░░░░░░░░░ ░░ ▒███████▓█▓ // ░ ░░░░░░░░░░░░░░ ░░░░ ██▓██▓▓▓███ ░ // ░░░░░░░░░░░░░░░ ░░ ░ ░███████████ // ░░░░░░░░░░░░ ░░ ░ ████████████ ▒ // ░░░░░░░░░░░░ ░░▒▒░░ ░ ░██░▓█░ ░ ░░████ ▒██████ █ // ░░░░░░░░░░░ ▓█████░ ░██ ██░░█▓░ ▓████ ▓█████ ░█ ▒▒ // ░░░░░░░░░░░ ▒██░░██▒░░░░░ ░░░░░ ░░░░██ ░░░██░ █████ ▒█████ ▒█ ▒█░ // ░░░░░░░░░░░░░ ██▒ ░█▓░████░████░ ░█████ ██▒████ █████ ▓████▒ ████░ // ░░░░░░░░░░░░ ██░ ▒███▓██▓▓██ ██▒▒██ ██░▒██░ ████▒ █████ ▒████████ // ░░░░░░░░░░ ██░ ░ ▒██░ ██▒▒██░██ ░██ ██ ░██░ ░████ ░█████ ▓██▓▒░░ // ░░░░░░░░░░ ██▒ ░▒░▒██ ░██████▒██ ░██░██░░██ ▒███▒ █████▒ // ░ ░░░░░░░░░ ▓█▓░ ▓█▓▒██ ░██░ ░░░██ ░██ ██░░██░ ░███░░░█████ // ░░░░░░░░░ ██████ ▒█▓ ▓█████ ██████ ██░░███░ ░██▒ █████▒ // ░░░░░░░░░ ░▓███░░░█▓ ░░▒███░░░██▓█▓ ▓█░ ▒█▓░ ▓▓ ░█████ // ░░░░░░░░░ ░░░░ ░░ ░░ ░ ░ ▓▒ ▓████░ // ░░░░░░░░ ░░ ░░ ░ ▒▓ ████▒ // ░ ░░░░░ ░ ░ ▒░▓███▒ // ░░░░ ░ ░▓▓██ // ░░░ // ░░░ // ░░ }; } noomC_Imm; typedef struct noomC_Function { noomC_Imm *immediates; noomC_Instr *instructions; } noomC_Function; typedef struct noomC_Module { noomC_Function *functions; } noomC_Module;