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:
24
src/config.h
24
src/config.h
@@ -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;
|
||||
|
||||
62
src/main.c
62
src/main.c
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user