Files
scc/libs/ir/include/ir_ctx.h
zzy 8c7af571c2 refactor(ast2ir): 更新IR构建器接口并重构类型映射
- 将IR构建器初始化函数修改为接受cprog参数
- 添加scc_ast2ir_ctx_drop函数用于资源清理
- 更新类型标识符命名规范,从大写改为小写形式
- 替换scc_ir_ctx_get_*函数调用为scc_ir_module_get_*函数
- 移除对ir_builtin.h的依赖,改用ir_builder.h中的构建器函数
- 为整数常量创建添加专门的构建器辅助函数

fix(ir): 重构IR上下文和模块管理结构

- 将原有的scc_ir_cprog_ctx_t拆分为scc_ir_module_t和scc_ir_ctx_t
- 添加scc_ir_module_t结构用于统一管理IR对象存储
- 更新IR类型枚举名称格式,从SCC_IR_TYPE_XXX改为SCC_IR_TYPE_xxx
- 添加整数、无符号整数和浮点数常量联合体定义
- 移除ir_base.h和ir_builtin.h头文件,整合到scc_ir.h中

feat(ir_builder): 添加类型构建器函数和常量创建功能

- 为各种基础类型添加scc_ir_builder_type_*内联函数
- 实现scc_ir_builder_const_int函数用于创建整数常量
- 修改构建器初始化函数签名以接受cprog参数
- 更新构建器内部结构,使用指向cprog的指针而非嵌入式结构
2026-03-25 11:59:27 +08:00

33 lines
1.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef __SCC_IR_CTX_H__
#define __SCC_IR_CTX_H__
#include "ir_def.h"
#include "ir_prog.h"
#include <scc_hashtable.h>
typedef struct {
scc_ir_module_t *module; // 关联的模块(用于实际存储)
scc_hashtable_t type_uniquing; // 类型哈希表hash -> type_ref
scc_hashtable_t const_pool; // 常量哈希表hash -> node_ref
scc_hashtable_t func_decl_set; // 函数声明集合name -> func_ref
} scc_ir_ctx_t;
void scc_ir_ctx_init(scc_ir_ctx_t *ctx, scc_ir_module_t *module);
void scc_ir_ctx_drop(scc_ir_ctx_t *ctx);
// 获取唯一类型,若不存在则创建并返回新引用
scc_ir_type_ref_t scc_ir_ctx_get_type(scc_ir_ctx_t *ctx,
const scc_ir_type_t *type_desc);
// 获取唯一常量(例如整数常量)
// scc_ir_node_ref_t scc_ir_ctx_get_const_int(scc_ir_ctx_t *ctx,
// scc_ir_type_ref_t type, i64
// value);
// 注册函数声明,若已存在则返回已有引用
scc_ir_func_ref_t scc_ir_ctx_declare_func(scc_ir_ctx_t *ctx,
scc_ir_type_ref_t type,
const char *name);
#endif /* __SCC_IR_CTX_H__ */