feat(cbuild): 更新项目配置以支持HIR中间表示

- 统一包名格式化,添加空格对齐
- 将依赖项从ir和lir重命名为hir,移除lir注释
- 为ast2ir模块添加正确的包名称"scc_ast2ir"
- 更新依赖引用路径指向新的HIR库结构
- 移除注释掉的ir2mcode和sccf2target依赖项

refactor(ast2ir): 迁移到HIR中间表示替换IR表示

- 更新头文件包含,使用hir_builder.h替代ir_builder.h
- 修改上下文结构体,将scc_ir_builder_t替换为scc_hir_builder_t
- 更新函数签名,将参数类型从scc_ir_*转换为scc_hir_*
- 调整返回值类型,将scc_ir_value_ref_t和scc_ir_type_ref_t
  分别替换为scc_hir_value_ref_t和scc_hir_type_ref_t
- 重新排列头文件包含顺序以满足依赖关系
This commit is contained in:
zzy
2026-04-21 14:05:21 +08:00
parent e5bbffe170
commit 0fbfb36262
49 changed files with 2555 additions and 3989 deletions

View File

@@ -14,7 +14,7 @@ typedef struct {
cbool emit_lex;
cbool emit_pp;
cbool emit_ast;
cbool emit_ir;
cbool emit_hir;
cbool emit_lir;
} scc_config_t;
@@ -35,8 +35,9 @@ static void setup_argparse(scc_argparse_t *argparse, scc_config_t *config,
SCC_HINT_EMIT_LEX,
SCC_HINT_EMIT_PP,
SCC_HINT_EMIT_AST,
SCC_HINT_EMIT_IR,
SCC_HINT_EMIT_HIR,
SCC_HINT_EMIT_LIR,
SCC_HINT_EMIT_MIR,
};
static const char *scc_hints_en[] = {
[SCC_HINT_PROG_NAME] = "scc",
@@ -55,8 +56,9 @@ static void setup_argparse(scc_argparse_t *argparse, scc_config_t *config,
[SCC_HINT_EMIT_LEX] = "Generate lexer sources tokens and exit",
[SCC_HINT_EMIT_PP] = "Generate preprocessed tokens and exit",
[SCC_HINT_EMIT_AST] = "Generate AST and exit",
[SCC_HINT_EMIT_IR] = "Generate IR and exit",
[SCC_HINT_EMIT_LIR] = "Generate LIR and exit",
[SCC_HINT_EMIT_HIR] = "Generate High-level IR and exit",
[SCC_HINT_EMIT_LIR] = "Generate Low-level IR and exit",
[SCC_HINT_EMIT_MIR] = "Generate Machine IR and exit",
};
static const char *scc_hints_zh[] = {
@@ -74,8 +76,9 @@ static void setup_argparse(scc_argparse_t *argparse, scc_config_t *config,
[SCC_HINT_EMIT_LEX] = "生成`源代码的词法单元`并退出",
[SCC_HINT_EMIT_PP] = "生成`预处理后的词法单元`并退出",
[SCC_HINT_EMIT_AST] = "生成`抽象语法树`并退出",
[SCC_HINT_EMIT_IR] = "生成`中间代码`并退出",
[SCC_HINT_EMIT_HIR] = "生成`高级中间代码`并退出",
[SCC_HINT_EMIT_LIR] = "生成`低级中间代码`并退出",
[SCC_HINT_EMIT_MIR] = "生成`机器中间代码`并退出",
};
const char **scc_hints;
@@ -167,11 +170,12 @@ static void setup_argparse(scc_argparse_t *argparse, scc_config_t *config,
scc_argparse_spec_setup_bool(&opt_ast.spec, &(config->emit_ast));
scc_argparse_cmd_add_opt(root, &opt_ast);
// -R, --emit-ir
scc_argparse_opt_t opt_ir;
scc_argparse_opt_init(&opt_ir, 'R', "emit-ir", scc_hints[SCC_HINT_EMIT_IR]);
scc_argparse_spec_setup_bool(&opt_ir.spec, &(config->emit_ir));
scc_argparse_cmd_add_opt(root, &opt_ir);
// -H, --emit-hir
scc_argparse_opt_t opt_hir;
scc_argparse_opt_init(&opt_hir, 'H', "emit-hir",
scc_hints[SCC_HINT_EMIT_HIR]);
scc_argparse_spec_setup_bool(&opt_hir.spec, &(config->emit_hir));
scc_argparse_cmd_add_opt(root, &opt_hir);
// -L, --emit-lir
scc_argparse_opt_t opt_lir;

View File

@@ -4,11 +4,11 @@
#include <scc_pproc.h>
#include <ast_dump.h>
#include <ir_dump.h>
#include <hir_dump.h>
#include <scc_ast2ir.h>
#include <scc_ir2lir.h>
#include <scc_lir_dump.h>
// #include <scc_ir2lir.h>
// #include <scc_lir_dump.h>
// #include <scc_ir2mcode.h>
// #include <sccf2pe.h>
@@ -85,7 +85,7 @@ int main(int argc, const char **argv, const char **envp) {
.output_file = nullptr,
.entry_point_symbol = nullptr,
.emit_ast = false,
.emit_ir = false,
.emit_hir = false,
.target_description = "x86_64-pc-windows-msvc",
};
scc_vec_init(config.include_paths);
@@ -217,23 +217,23 @@ sstream_drop:
scc_ast2ir_ctx_t ast2ir_ctx;
#include <target/scc_abi_win_x64_pc.h>
scc_ir_cprog_t cprog;
scc_ir_cprog_init(&cprog);
scc_hir_cprog_t cprog;
scc_hir_cprog_init(&cprog);
scc_ast2ir_ctx_init(&ast2ir_ctx, &scc_ast_abi_impl, &cprog);
scc_ast2ir_translation_unit(&ast2ir_ctx, translation_unit);
scc_ast2ir_ctx_drop(&ast2ir_ctx);
if (config.emit_ir) {
scc_ir_dump_ctx_t ir_dump_ctx;
if (config.emit_hir) {
scc_hir_dump_t ir_dump_ctx;
scc_tree_dump_t tree_dump;
if (fp == nullptr) {
scc_tree_dump_init(&tree_dump, true);
} else {
scc_tree_dump_init(&tree_dump, false);
}
scc_ir_dump_ctx_init(&ir_dump_ctx, &tree_dump, &cprog);
scc_hir_dump_ctx_init(&ir_dump_ctx, &tree_dump, &cprog);
// scc_ir_dump_cprog(&ir_dump_ctx);
scc_ir_dump_cprog_linear(&ir_dump_ctx);
scc_hir_dump_cprog_linear(&ir_dump_ctx);
scc_tree_dump_flush(&tree_dump, tree_dump_output,
fp == nullptr ? scc_stdout : fp);
@@ -241,28 +241,28 @@ sstream_drop:
return 0;
}
scc_lir_builder_t lir_builder;
scc_lir_module_t lir_module;
scc_lir_module_init(&lir_module);
scc_lir_builder_init(&lir_builder, &lir_module);
scc_ir2lir(&lir_builder, &cprog);
if (config.emit_lir) {
scc_lir_dump_ctx_t lir_dump_ctx;
scc_tree_dump_t tree_dump;
if (fp == nullptr) {
scc_tree_dump_init(&tree_dump, true);
} else {
scc_tree_dump_init(&tree_dump, false);
}
scc_lir_dump_init(&lir_dump_ctx, &tree_dump);
// scc_ir_dump_cprog(&ir_dump_ctx);
scc_lir_dump_module(&lir_dump_ctx, &lir_module);
// scc_lir_builder_t lir_builder;
// scc_lir_module_t lir_module;
// scc_lir_module_init(&lir_module);
// scc_lir_builder_init(&lir_builder, &lir_module);
// scc_ir2lir(&lir_builder, &cprog);
// if (config.emit_lir) {
// scc_lir_dump_ctx_t lir_dump_ctx;
// scc_tree_dump_t tree_dump;
// if (fp == nullptr) {
// scc_tree_dump_init(&tree_dump, true);
// } else {
// scc_tree_dump_init(&tree_dump, false);
// }
// scc_lir_dump_init(&lir_dump_ctx, &tree_dump);
// // scc_ir_dump_cprog(&ir_dump_ctx);
// scc_lir_dump_module(&lir_dump_ctx, &lir_module);
scc_tree_dump_flush(&tree_dump, tree_dump_output,
fp == nullptr ? scc_stdout : fp);
scc_tree_dump_drop(&tree_dump);
return 0;
}
// scc_tree_dump_flush(&tree_dump, tree_dump_output,
// fp == nullptr ? scc_stdout : fp);
// scc_tree_dump_drop(&tree_dump);
// return 0;
// }
// scc_ir2mcode_ctx_t ir2mcode_ctx;
// sccf_builder_t sccf_builder;