feat(ast2ir): 添加浮点类型支持和复合初始化功能
- 在ABI类型计算中添加FLOAT和DOUBLE类型的映射 - 修复AST操作符注释中的歧义描述 - 为ast2ir上下文添加类型缓存以解决递归结构体定义问题 - 实现复合初始化表达式的支持,包括数组和结构体初始化 - 添加前置和后置自增/自减操作符的IR转换 - 实现三元条件表达式的IR生成 - 添加类型转换(cast)和sizeof操作符的支持 - 重构数组长度推断逻辑并添加类型大小计算函数 - 实现结构体和联合体的递归类型解析 - 添加函数指针调用相关的IR节点类型定义 fix(ast): 修正间接操作符的注释说明 refactor(ast2ir): 优化代码结构并添加必要的断言验证
This commit is contained in:
@@ -68,6 +68,11 @@ void scc_hir_builder_init(scc_hir_builder_t *builder, scc_hir_cprog_t *cprog);
|
||||
*/
|
||||
void scc_hir_builder_drop(scc_hir_builder_t *builder);
|
||||
|
||||
static inline scc_hir_module_t *
|
||||
scc_hir_builder_get_module(scc_hir_builder_t *builder) {
|
||||
return &builder->cprog->module;
|
||||
}
|
||||
|
||||
scc_hir_func_ref_t scc_hir_builder_func(scc_hir_builder_t *builder,
|
||||
scc_hir_type_ref_t type_ref,
|
||||
const char *name);
|
||||
@@ -92,7 +97,7 @@ scc_hir_value_ref_t scc_hir_builder_alloca(scc_hir_builder_t *builder,
|
||||
const char *name);
|
||||
|
||||
#define SCC_HIR_BUILDER_TYPE_FUNC(scc_type) \
|
||||
[[maybe_unused]] static inline scc_hir_type_ref_t \
|
||||
SCC_MAYBE_UNUSED static inline scc_hir_type_ref_t \
|
||||
scc_hir_builder_type_##scc_type(scc_hir_builder_t *builder) { \
|
||||
scc_hir_type_t type_desc; \
|
||||
scc_hir_type_init(&type_desc, SCC_HIR_TYPE_##scc_type); \
|
||||
|
||||
@@ -89,7 +89,9 @@ typedef enum scc_hir_value_tag {
|
||||
SCC_HIR_VALUE_TAG_OP, ///< 二元运算
|
||||
SCC_HIR_VALUE_TAG_BRANCH, ///< 有条件分支
|
||||
SCC_HIR_VALUE_TAG_JUMP, ///< 无条件跳转
|
||||
SCC_HIR_VALUE_TAG_JUMP_INDIRECT, ///< 无条件跳转(地址)
|
||||
SCC_HIR_VALUE_TAG_CALL, ///< 调用函数
|
||||
SCC_HIR_VALUE_TAG_CALL_INDIRECT, ///< 调用函数(地址)
|
||||
SCC_HIR_VALUE_TAG_RET, ///< 函数返回
|
||||
} scc_hir_value_tag_t;
|
||||
|
||||
@@ -222,11 +224,15 @@ struct scc_hir_value {
|
||||
scc_hir_bblock_ref_t true_bblock;
|
||||
scc_hir_bblock_ref_t false_bblock;
|
||||
} branch;
|
||||
struct {
|
||||
union {
|
||||
scc_hir_value_ref_t target_ptr;
|
||||
scc_hir_bblock_ref_t target_bblock;
|
||||
} jump;
|
||||
struct {
|
||||
scc_hir_func_ref_t callee; // TODO function pointer call
|
||||
union {
|
||||
scc_hir_func_ref_t func_ref;
|
||||
scc_hir_value_ref_t ptr_ref;
|
||||
} callee;
|
||||
scc_hir_value_ref_vec_t args;
|
||||
} call;
|
||||
struct {
|
||||
|
||||
Reference in New Issue
Block a user