stage1 初步实现
This commit is contained in:
@@ -91,6 +91,7 @@ typedef usize spl_ir_func_ref_t; /* 0 is error */
|
||||
|
||||
typedef struct {
|
||||
spl_ir_kind_t kind;
|
||||
usize src_ref; /* AST 节点 ref(调试行号用,ast2ir 注解) */
|
||||
union {
|
||||
struct {
|
||||
spl_type_id_t tid;
|
||||
@@ -236,12 +237,25 @@ typedef struct {
|
||||
};
|
||||
} spl_ir_attr_t;
|
||||
typedef VEC(spl_ir_attr_t) spl_ir_attr_vec_t;
|
||||
|
||||
/* 调试:函数内变量(名 → 内存位置)。alloca 节点或参数槽。 */
|
||||
typedef struct {
|
||||
const char *name; /* 指向 AST 字符串,不拥有 */
|
||||
spl_ir_node_ref_t alloca; /* 非参数:alloca 节点 ref */
|
||||
spl_type_id_t tid;
|
||||
int is_param; /* 参数则用 param_idx */
|
||||
usize param_idx;
|
||||
usize offset; /* fp 字节偏移(LADDR imm 语义;ir2vm 填) */
|
||||
} spl_ir_dbg_var_t;
|
||||
typedef VEC(spl_ir_dbg_var_t) spl_ir_dbg_var_vec_t;
|
||||
|
||||
typedef struct {
|
||||
const char *name;
|
||||
spl_ir_attr_t attr;
|
||||
spl_type_id_t fn_tid;
|
||||
spl_ir_node_vec_t nodes;
|
||||
spl_ir_node_ref_vec_t labels;
|
||||
spl_ir_dbg_var_vec_t dbg_vars; /* 调试变量表(fp 偏移在 ir2vm 填) */
|
||||
} spl_ir_func_t;
|
||||
|
||||
typedef VEC(spl_ir_func_t) spl_ir_func_vec_t;
|
||||
@@ -261,5 +275,6 @@ spl_ir_node_t *spl_ir_node(spl_ir_t *ir, spl_ir_func_ref_t fn_id, spl_ir_node_re
|
||||
spl_ir_func_t *spl_ir_func(spl_ir_t *ir, spl_ir_func_ref_t fn_id);
|
||||
|
||||
void spl_ir_dump(spl_ir_t *ir, const spl_type_t *ty);
|
||||
const char *spl_ir_kind_name(spl_ir_kind_t kind);
|
||||
|
||||
#endif /* __SPL_IR_H__ */
|
||||
|
||||
Reference in New Issue
Block a user