feat(parser): 添加声明列表支持并重构解析逻辑
- 添加 SCC_AST_DECL_LIST 节点类型用于表示声明列表 - 实现 scc_ast_decl_list_init 函数来初始化声明列表节点 - 重构 scc_parse_declaration 函数以支持逗号分隔的多个变量声明 - 分离类型说明符解析到独立的 scc_parse_declaration_specifiers 函数 - 支持 typedef 和多变量声明如 'int a, b;' 和 'int a = 1, b = 2;' - 在 ast_dump 中添加对声明列表节点的打印支持 refactor(ast): 统一使用 scc_vec_foreach 宏替换手动循环 - 将 ast_dump.c 中的多个手动索引循环改为使用 scc_vec_foreach - 提高代码可读性和安全性 - 避免索引越界错误 fix(parser): 修复语义分析中结构体符号表冲突 - 为结构体、联合体和枚举符号名添加前缀避免命名冲突 - 使用 '$S_'、'$U_'、'$E_' 前缀分别标识结构体、联合体和枚举 refactor(log): 统一终止处理方式 - 将 log_exit 替换为 log_abort 以更准确反映行为 - 更新相关依赖模块的实现 style(parser): 移除未使用的参数和清理代码 - 在 argparse.c 中添加 (void) 参数注释处理未使用的参数 - 清理 parse_expr.c 中未使用的函数声明 - 优化 parse_type.c 中的错误处理流程
This commit is contained in:
@@ -74,12 +74,15 @@ size_t scc_pal_fseek(scc_pal_file_t f, size_t offset,
|
||||
|
||||
void scc_pal_exit(int code) { exit(code); }
|
||||
|
||||
void scc_pal_abort() { abort(); }
|
||||
|
||||
void scc_pal_putchar(char c) { putchar(c); }
|
||||
|
||||
void scc_pal_eputchar(char c) { fputc(c, stderr); }
|
||||
|
||||
void scc_pal_write(const char *data, size_t len) {
|
||||
int res = fputs(data, stdout);
|
||||
(void)len; // FIXME maybe using len to check return value
|
||||
if (res != 0) {
|
||||
fprintf(stderr, "\nError writing to stdout [%d]\n", res);
|
||||
scc_pal_exit(1);
|
||||
@@ -88,6 +91,7 @@ void scc_pal_write(const char *data, size_t len) {
|
||||
|
||||
void scc_pal_ewrite(const char *data, size_t len) {
|
||||
int res = fputs(data, stderr);
|
||||
(void)len; // FIXME maybe using len to check return value
|
||||
if (res != 0) {
|
||||
fprintf(stderr, "\nError writing to stderr [%d]\n", res);
|
||||
scc_pal_exit(1);
|
||||
|
||||
@@ -5,13 +5,22 @@
|
||||
#define __SCC_LOG_IMPL_IMPORT_SRC__
|
||||
#include <scc_core_log.h>
|
||||
|
||||
void putchar_(char ch) { LOG_FATAL("you can't use printf.c directly"); }
|
||||
void putchar_(char ch) {
|
||||
(void)ch;
|
||||
LOG_FATAL("you can't use printf.c directly");
|
||||
}
|
||||
|
||||
scc_file_t scc_fopen(const char *path, scc_fmode_t mode) {
|
||||
return scc_pal_fopen(path, (scc_pal_fmode_t)mode); // FIXME
|
||||
}
|
||||
|
||||
void scc_fclose(scc_file_t file) { scc_pal_fclose(file); }
|
||||
void scc_fclose(scc_file_t file) {
|
||||
if (file == scc_stdout || file == scc_stderr) {
|
||||
return;
|
||||
} else {
|
||||
scc_pal_fclose(file);
|
||||
}
|
||||
}
|
||||
|
||||
usize scc_fsize(scc_file_t file) {
|
||||
if (scc_pal_fseek(file, 0, SCC_SEEK_PAL_END) != 0) {
|
||||
|
||||
Reference in New Issue
Block a user