stage1 初步实现

This commit is contained in:
zzy
2026-08-06 19:26:30 +08:00
parent a56b4cbb70
commit 314100afbc
35 changed files with 556 additions and 2236 deletions

View File

@@ -44,6 +44,7 @@ void spl_ir_drop(spl_ir_t *ir) {
node_drop_vecs(&f->nodes.data[j]);
vec_free(f->nodes);
vec_free(f->labels);
vec_free(f->dbg_vars);
}
vec_free(ir->funcs);
for (usize i = 0; i < ir->gdata.size; i++)
@@ -56,6 +57,7 @@ spl_ir_func_ref_t spl_ir_alloc_fn(spl_ir_t *ir) {
memset(&f, 0, sizeof f);
vec_init(f.nodes);
vec_init(f.labels);
vec_init(f.dbg_vars);
vec_push(ir->funcs, f);
return ir->funcs.size - 1;
}
@@ -504,3 +506,14 @@ void spl_ir_dump(spl_ir_t *ir, const spl_type_t *ty) {
}
}
}
const char *spl_ir_kind_name(spl_ir_kind_t kind) {
static const char *const names[] = {
#define X(a, b, c) #a,
SPL_IR_FN_TABLE
#undef X
};
if ((usize)kind < sizeof(names) / sizeof(names[0]))
return names[kind];
return "?";
}