当参数指定为列表类型时,验证和处理逻辑现在会检查 vec_store 是否为空或大小为0,而不是检查 str_store。 fix(hir): 初始化聚合类型值的数据结构 在 HIR 值初始化过程中,为聚合类型添加适当的初始化逻辑, 确保其字段向量被正确初始化。 refactor(hir_builder): 优化指针类型创建和GEP操作实现 - 简化全局分配器中的指针类型创建代码 - 扩展 GEP 操作以支持结构体和联合体字段访问 - 添加字段偏移计算支持 feat(hir_dump): 增强HIR类型和值的线性转储功能 - 实现类型定义的线性转储输出 - 改进结构体和联合体的转储格式 - 优化聚合值的转储表示 perf(hir_layout): 优化类型布局计算性能 改进结构体、联合体和聚合类型的对齐和大小计算算法, 提高字段偏移计算的准确性。 fix(hir_module): 完善模块资源清理机制 在模块析构时正确释放结构体和联合体类型的字段向量内存。 docs(lir): 更新文档注释中的空值表示 将初始化数据参数的空值描述从 NULL 统一为 nullptr。 refactor(hir2lir): 改进HIR到LIR的类型转换逻辑 - 重构类型到LIR大小扩展的转换函数 - 修复STORE指令的类型推导逻辑 - 增强GEP指令的规模因子和偏移量计算 - 添加对结构体/联合体字段访问的支持 refactor(x86_isel): 优化x86-64地址加载指令生成 改进LOAD_ADDR指令生成,更好地支持结构体字段访问的零比例因子。 docs(ir2mcode): 统一空值表示文档注释 更新初始化数据参数的空值描述为nullptr。 refactor(lexer): 简化词法分析器非空白标记预览逻辑 优化非空白标记预览函数,减少不必要的标记消费和销毁操作。
64 lines
2.0 KiB
C
64 lines
2.0 KiB
C
/**
|
|
* @file scc_lir_module.h
|
|
* @brief LIR 模块:管理函数定义、全局符号和声明
|
|
*/
|
|
|
|
#ifndef __SCC_LIR_MODULE_H__
|
|
#define __SCC_LIR_MODULE_H__
|
|
|
|
#include "scc_lir.h"
|
|
#include <scc_cfg.h>
|
|
#include <scc_core.h>
|
|
#include <scc_hashtable.h>
|
|
|
|
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 *lir_module);
|
|
|
|
/**
|
|
* @brief 销毁 LIR 模块,释放所有函数和符号资源
|
|
*/
|
|
void scc_lir_module_drop(scc_lir_module_t *lir_module);
|
|
|
|
/**
|
|
* @brief 添加一个函数声明(外部或未定义)
|
|
* @param mod 模块
|
|
* @param name 函数名
|
|
* @param defined 是否定义
|
|
* @return 符号指针
|
|
*/
|
|
scc_lir_symbol_id_t scc_lir_module_add_func_decl(scc_lir_module_t *lir_module,
|
|
const char *name, int defined);
|
|
|
|
/**
|
|
* @brief 添加一个全局数据符号(定义或外部)
|
|
* @param mod 模块
|
|
* @param name 符号名
|
|
* @param kind 种类 (DATA 或 EXTERN)
|
|
* @param init_data 初始化数据 (若为 DATA 定义;若为 nullptr 则零初始化)
|
|
* @param size 数据大小 (若为 EXTERN 可为 0)
|
|
* @param align 对齐要求
|
|
* @param attr 属性
|
|
* @return 符号指针
|
|
*/
|
|
scc_lir_symbol_id_t scc_lir_module_add_data(scc_lir_module_t *lir_module,
|
|
const char *name,
|
|
scc_cfg_symbol_kind_t kind,
|
|
const u8 *init_data, usize size,
|
|
u32 align);
|
|
|
|
scc_lir_symbol_t *
|
|
scc_lir_module_unsafe_lookup_symbol(const scc_lir_module_t *lir_module,
|
|
const char *name);
|
|
|
|
#endif /* __SCC_LIR_MODULE_H__ */
|