#pragma once #include "compiler/ast-tree.h" typedef enum BBAOperation { BBA_OPERATION_ASSIGN, BBA_OPERATOR_CAST, BBA_OPERATOR_TYPE_OF, BBA_OPERATOR_SIZE_OF, BBA_OPERATOR_IMPORT, BBA_OPERATOR_IS_COMPTIME, BBA_OPERATOR_STACK_ALLOC, BBA_OPERATOR_HEAP_ALLOC, BBA_OPERATOR_NEG, BBA_OPERATOR_ADD, BBA_OPERATOR_SUB, BBA_OPERATOR_MUL, BBA_OPERATOR_DIV, BBA_OPERATOR_MOD, BBA_OPERATOR_EQUAL, BBA_OPERATOR_NOT_EQUAL, BBA_OPERATOR_GREATER, BBA_OPERATOR_SMALLER, BBA_OPERATOR_GREATER_OR_EQUAL, BBA_OPERATOR_SMALLER_OR_EQUAL, BBA_OPERATOR_PUTC, BBA_OPERATOR_C_LIBRARY, BBA_OPERATOR_C_FUNCTION, BBA_OPERATOR_BITWISE_NOT, BBA_OPERATOR_BITWISE_AND, BBA_OPERATOR_BITWISE_XOR, BBA_OPERATOR_BITWISE_OR, BBA_OPERATOR_SHIFT_LEFT, BBA_OPERATOR_SHIFT_RIGHT, BBA_OPERATION_CALL, BBA_OPERATOR_CONST_I8, BBA_OPERATOR_CONST_U8, BBA_OPERATOR_CONST_I16, BBA_OPERATOR_CONST_U16, BBA_OPERATOR_CONST_I32, BBA_OPERATOR_CONST_U32, BBA_OPERATOR_CONST_I64, BBA_OPERATOR_CONST_U64, #ifdef FLOAT_16_SUPPORT BBA_OPERATOR_CONST_F16, #endif BBA_OPERATOR_CONST_F32, BBA_OPERATOR_CONST_F64, BBA_OPERATOR_CONST_F128, } BBAOperation; typedef union BBAInstructionValue { struct BBAInstruction *instruction; u8 u8; i8 i8; u16 u16; i16 i16; u32 u32; i32 i32; u64 u64; i64 i64; #ifdef FLOAT_16_SUPPORT f16 f16; #endif f32 f32; f64 f64; f128 f128; } BBAInstructionValue; typedef struct BBAInstruction { BBAOperation operator; BBAInstructionValue *value; size_t value_size; } BBAInstruction; typedef struct BBABlock { BBAInstructionValue *params; size_t params_size; BBAInstruction **instructions; size_t instructions_size; } BBABlock; typedef struct BBA { } BBA;