feat(argparse): 添加命令行参数约束和错误处理功能

- 添加了命令行参数约束相关数据结构定义
- 新增错误上下文字段用于更好的错误提示
- 实现了参数验证功能,包括必需参数检查和值选择验证
- 改进错误处理流程,支持添加帮助信息和使用说明
- 优化调试输出格式,增加更多错误场景的处理

fix(parser): 修复语义分析器资源释放问题

- 在scc_sema_drop函数中添加空指针检查,避免空指针释放导致崩溃

refactor(dump): 重构AST节点转储实现

- 将树形转储上下文重构为更简洁的数据结构
- 修改转储回调函数签名以支持更好的缓冲区管理
- 优化内存拷贝操作,提高转储性能

style(amd64): 移除未使用的变量声明

- 删除scc_mcode_amd64_mov_r64_m64_sib函数中未使用的disp8变量
This commit is contained in:
zzy
2026-04-11 11:42:31 +08:00
parent 053c6abf51
commit 630e22b73b
9 changed files with 136 additions and 99 deletions

View File

@@ -198,5 +198,7 @@ void scc_sema_init(scc_sema_callbacks_t *callbacks) {
void scc_sema_drop(scc_sema_callbacks_t *callbacks) {
// FIXME drop obj
scc_sema_symtab_drop(callbacks->context);
if (callbacks->context) {
scc_sema_symtab_drop(callbacks->context);
}
}

View File

@@ -52,28 +52,26 @@ typedef void (*scc_tree_dump_output_t)(void *userdata, const char *fmt, ...);
char expect_buffer[BUFFER_SIZE];
char output_buffer[BUFFER_SIZE];
static void dump2buffer(void *_buffer, const char *fmt, ...) {
char *buffer = _buffer;
va_list args;
va_start(args, fmt);
int res = scc_vsnprintf(buffer + strlen(buffer),
BUFFER_SIZE - strlen(buffer) - 1, fmt, args);
Assert(res > 0);
va_end(args);
static void dump2buffer(const char *str, usize len, void *user) {
char *buff = user;
buff[0] = '\n';
buff[1] = '\0';
memcpy(buff, str, len + 1);
}
static void _scc_check_ast(scc_ast_node_t *expect_node_ptr, const char *str,
scc_parse_node_func parse_func, cbool need_sema) {
scc_ast_node_t *output_node_ptr = process_input(str, parse_func, need_sema);
scc_tree_dump_ctx_t ctx;
expect_buffer[0] = '\n', expect_buffer[1] = '\0';
scc_tree_dump_ctx_init(&ctx, true, dump2buffer, expect_buffer);
scc_tree_dump_t ctx;
scc_tree_dump_init(&ctx, true);
scc_ast_dump_node(&ctx, expect_node_ptr);
scc_tree_dump_ctx_drop(&ctx);
output_buffer[0] = '\n', output_buffer[1] = '\0';
scc_tree_dump_ctx_init(&ctx, true, dump2buffer, output_buffer);
scc_tree_dump_flush(&ctx, dump2buffer, expect_buffer);
scc_tree_dump_drop(&ctx);
scc_tree_dump_init(&ctx, true);
scc_ast_dump_node(&ctx, output_node_ptr);
scc_tree_dump_ctx_drop(&ctx);
scc_tree_dump_flush(&ctx, dump2buffer, output_buffer);
scc_tree_dump_drop(&ctx);
}
#define SCC_CHECK_AST_WITH_SEMA(expect_node_ptr, str, parse_func) \