/* * Copyright (C) 2025 Johnny Richard * * SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of obe. * * obe is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) * any later version. * * obe is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with obe. If not, see . */ #ifndef OBE_IR_H #define OBE_IR_H #include #include typedef enum obe_ir_inst_kind { OBE_IR_INST_CONST, OBE_IR_INST_PRINT, OBE_IR_INST_RETURN, OBE_IR_INST_BR, OBE_IR_INST_JMP, OBE_IR_INST_LABEL, } obe_ir_inst_kind_t; typedef enum obe_ir_type { OBE_IR_TYPE_INT } obe_ir_type_t; typedef enum obe_ir_operand_kind { OBE_IR_OPERAND_LITERAL, OBE_IR_OPERAND_IDENT } obe_ir_operand_kind_t; typedef struct obe_ir_operand { obe_ir_operand_kind_t kind; char *value; } obe_ir_operand_t; typedef struct obe_ir_inst { obe_ir_inst_kind_t kind; obe_ir_type_t type; char* dest; obe_ir_operand_t operand1; obe_ir_operand_t operand2; } obe_ir_inst_t; typedef struct obe_ir_function { obe_string_t name; obe_ir_inst_t* instrs; } obe_ir_function_t; typedef struct obe_ir_translation_unit { obe_ir_function_t* funcs; } obe_ir_translation_unit_t; obe_ir_translation_unit_t* obe_ir_translation_unit_new(obe_arena_t* arena); obe_ir_function_t* obe_ir_function_new(obe_arena_t* arena, obe_string_t name); #endif /* OBE_IR_H */