/** * @file scc_lir_module.h * @brief LIR 模块:管理函数定义、全局符号和声明 */ #ifndef __SCC_LIR_MODULE_H__ #define __SCC_LIR_MODULE_H__ #include "scc_lir.h" #include #include #include typedef SCC_VEC(scc_lir_func_meta_t *) scc_lir_func_meta_vec_t; typedef SCC_VEC(scc_lir_symbol_meta_t *) scc_lir_symbol_meta_vec_t; typedef struct scc_lir_module { scc_cfg_module_t cfg_module; scc_lir_func_meta_vec_t func_metas; scc_lir_symbol_meta_vec_t symbol_metas; } scc_lir_module_t; /** * @brief 初始化 LIR 模块 */ void scc_lir_module_init(scc_lir_module_t *module); /** * @brief 销毁 LIR 模块,释放所有函数和符号资源 */ void scc_lir_module_drop(scc_lir_module_t *module); /** * @brief 添加一个函数声明(外部或未定义) * @param mod 模块 * @param name 函数名 * @param attr 属性 * @return 符号指针 */ scc_lir_symbol_id_t scc_lir_module_add_func_decl(scc_lir_module_t *module, const char *name); /** * @brief 添加一个全局数据符号(定义或外部) * @param mod 模块 * @param name 符号名 * @param kind 种类 (DATA 或 EXTERN) * @param init_data 初始化数据 (若为 DATA 定义;若为 NULL 则零初始化) * @param size 数据大小 (若为 EXTERN 可为 0) * @param align 对齐要求 * @param attr 属性 * @return 符号指针 */ scc_lir_symbol_id_t scc_lir_module_add_data(scc_lir_module_t *module, const char *name, scc_cfg_symbol_kind_t kind, const u8 *init_data, usize size, u32 align); #endif /* __SCC_LIR_MODULE_H__ */