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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) \
|
||||
|
||||
Reference in New Issue
Block a user