feat(ast2ir): 添加数组初始化支持和AST转IR优化
添加了对未知长度数组的自动长度推导功能,支持字符串字面量和复合 初始化的数组长度计算。新增辅助函数resolve_array_length用于计算 数组实际长度,以及emit_array_initialization用于生成数组初始化 代码。 同时将AST转IR过程中的参数改为const引用,提高代码安全性。 新增IR构建器的借用检查机制,防止在借用期间进行重分配操作。 fix(ast): 为AST结构体添加详细注释说明字段用途
This commit is contained in:
@@ -21,6 +21,11 @@ usize sccf_builder_add_symbol(sccf_builder_t *builder, const char *name,
|
||||
sccf_sym_t *sym);
|
||||
usize sccf_builder_get_symbol_idx(sccf_builder_t *builder, const char *name);
|
||||
|
||||
static inline void sccf_builder_set_entry_symbol_name(sccf_builder_t *builder,
|
||||
const char *name) {
|
||||
builder->entry_symbol_name = name ? name : "_scc_entry";
|
||||
}
|
||||
|
||||
static inline sccf_sym_t *
|
||||
sccf_builder_get_symbol_unsafe(sccf_builder_t *builder, const char *name) {
|
||||
usize idx = sccf_builder_get_symbol_idx(builder, name);
|
||||
|
||||
@@ -75,7 +75,9 @@ const sccf_t *sccf_builder_to_sccf(sccf_builder_t *builder) {
|
||||
sccf_sym_t *sym =
|
||||
sccf_builder_get_symbol_unsafe(builder, builder->entry_symbol_name);
|
||||
if (sym == nullptr || sym->sccf_sect_type != SCCF_SECT_CODE) {
|
||||
LOG_ERROR("entry symbol %s not found");
|
||||
LOG_ERROR(
|
||||
"entry symbol %s not found, using 0 for entry point address",
|
||||
builder->entry_symbol_name);
|
||||
builder->sccf.header.entry_point = 0;
|
||||
} else {
|
||||
builder->sccf.header.entry_point = sym->sccf_sect_offset;
|
||||
|
||||
Reference in New Issue
Block a user