refactor(ast2ir): 重构ABI类型系统并修复union结构问题
- 将scc_ast_def.h中的attr_of从union改为struct以修复结构定义问题 - 添加type_abi依赖到ast2ir模块的cbuild.toml配置文件中 - 重命名scc_ast2ir.h中的abi字段为type_abi,并更新相关初始化函数签名 - 移除废弃的scc_abi_type.h和相关平台ABI头文件 - 添加辅助函数is_variadic_marker和fixed_param_count用于处理可变参数 - 添加数组和聚合类型初始化的辅助函数
This commit is contained in:
@@ -35,6 +35,42 @@ static inline void scc_mcode_drop(scc_mcode_t *mcode) {
|
||||
mcode->is_littel_endian = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 接管一个现有缓冲区的所有权作为 mcode 的代码数据
|
||||
*
|
||||
* 释放 mcode 原有的 code 缓冲区, 然后将 buf 的内部指针/容量/大小
|
||||
* 转移到 mcode->code。调用后 buf 被重新初始化(空向量)。
|
||||
* 避免拷贝大块代码数据。
|
||||
*/
|
||||
static inline void scc_mcode_adopt_buf(scc_mcode_t *mcode,
|
||||
scc_mcode_buff_t *buf) {
|
||||
scc_vec_free(mcode->code);
|
||||
mcode->code.size = buf->size;
|
||||
mcode->code.cap = buf->cap;
|
||||
mcode->code.data = buf->data;
|
||||
buf->size = 0;
|
||||
buf->cap = 0;
|
||||
buf->data = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 释放 mcode 内部 code 缓冲区的所有权到目标向量
|
||||
*
|
||||
* 将 mcode->code 的数据指针/容量/大小转移到 out 向量,
|
||||
* 然后 mcode->code 被重新初始化(空向量)。
|
||||
* 避免拷贝大块代码数据。
|
||||
*/
|
||||
static inline void scc_mcode_disown_buf(scc_mcode_t *mcode,
|
||||
scc_mcode_buff_t *out) {
|
||||
scc_vec_free(*out);
|
||||
out->size = mcode->code.size;
|
||||
out->cap = mcode->code.cap;
|
||||
out->data = mcode->code.data;
|
||||
mcode->code.size = 0;
|
||||
mcode->code.cap = 0;
|
||||
mcode->code.data = NULL;
|
||||
}
|
||||
|
||||
static inline void scc_mcode_add_u8(scc_mcode_t *mcode, u8 data) {
|
||||
scc_vec_push(mcode->code, data);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user