- 添加了命令行参数约束相关数据结构定义 - 新增错误上下文字段用于更好的错误提示 - 实现了参数验证功能,包括必需参数检查和值选择验证 - 改进错误处理流程,支持添加帮助信息和使用说明 - 优化调试输出格式,增加更多错误场景的处理 fix(parser): 修复语义分析器资源释放问题 - 在scc_sema_drop函数中添加空指针检查,避免空指针释放导致崩溃 refactor(dump): 重构AST节点转储实现 - 将树形转储上下文重构为更简洁的数据结构 - 修改转储回调函数签名以支持更好的缓冲区管理 - 优化内存拷贝操作,提高转储性能 style(amd64): 移除未使用的变量声明 - 删除scc_mcode_amd64_mov_r64_m64_sib函数中未使用的disp8变量
60 lines
1.6 KiB
C
60 lines
1.6 KiB
C
#ifndef __SCC_OPTPARSER_H__
|
|
#define __SCC_OPTPARSER_H__
|
|
|
|
#ifndef nullptr
|
|
#define nullptr ((void *)0)
|
|
#endif
|
|
|
|
typedef struct scc_optparse_opt {
|
|
char prefix;
|
|
char short_name;
|
|
const char *long_name;
|
|
void (*handle)(void *user_data);
|
|
void *user_data;
|
|
int min_args;
|
|
int max_args;
|
|
} scc_optparse_opt_t;
|
|
|
|
#define SCC_OPTPARSE_OPT(prefix, short_name, long_name, min_args, max_args) \
|
|
{prefix, short_name, long_name, 0, 0, min_args, max_args}
|
|
#define SCC_OPTPARSE_OPT_END() {0}
|
|
|
|
typedef enum scc_optparse_error {
|
|
SCC_OPT_ERROR_NONE,
|
|
SCC_OPT_ERROR_NOT_FOUND_LONG_ARG,
|
|
SCC_OPT_ERROR_NOT_FOUND_SHORT_ARG,
|
|
SCC_OPT_ERROR_NOT_ENOUGH_ARGS,
|
|
SCC_OPT_ERROR_TOO_MANY_ARGS,
|
|
} scc_optparse_error_t;
|
|
|
|
typedef struct {
|
|
const scc_optparse_opt_t *opt;
|
|
int count; // check for min_args <= count <= max_args
|
|
int arg_pos; // for argv pos
|
|
int opt_pos; // for short pos
|
|
} scc_optparse_state_t;
|
|
|
|
typedef struct scc_optparse_result {
|
|
const scc_optparse_opt_t *opt;
|
|
const char *value;
|
|
int error;
|
|
const char *raw_arg;
|
|
} scc_optparse_result_t;
|
|
|
|
typedef struct {
|
|
int argc;
|
|
const char **argv;
|
|
const scc_optparse_opt_t *opts;
|
|
int handle_positional;
|
|
int greedy_mode;
|
|
scc_optparse_state_t current;
|
|
} scc_optparse_t;
|
|
|
|
void scc_optparse_init(scc_optparse_t *parser, int argc, const char **argv);
|
|
void scc_optparse_drop(scc_optparse_t *parser);
|
|
void scc_optparse_set(scc_optparse_t *parser, const scc_optparse_opt_t *opts);
|
|
void scc_optparse_reset(scc_optparse_t *parser);
|
|
int scc_optparse_parse(scc_optparse_t *parser, scc_optparse_result_t *res);
|
|
|
|
#endif /* __SCC_OPTPARSER_H__ */
|