feat(ast): 更新AST字面量表示方式
更新AST定义以使用词素字符串代替常量值, 并修改AST转储功能以正确显示字面量内容。 BREAKING CHANGE: AST表达式结构体中literal成员从value改为lexme字段。 refactor(pproc): 重构宏展开和文件包含逻辑 将宏展开函数重构为独立接口,实现文件包含处理逻辑, 改进预处理器的状态管理机制。 fix(sstream): 修复文件流初始化错误码返回 修正文件打开失败时的错误码返回值,确保调用方能正确处理异常情况。
This commit is contained in:
@@ -21,16 +21,16 @@ typedef struct {
|
||||
} scc_pproc_if_state_t;
|
||||
typedef SCC_VEC(scc_pproc_if_state_t) scc_pproc_if_stack_t;
|
||||
|
||||
// 文件包含栈
|
||||
typedef struct {
|
||||
scc_lexer_t *lexer; // 当前文件的 lexer
|
||||
scc_lexer_tok_ring_t *tok_ring; // 当前文件的 token 环(由 lexer 提供)
|
||||
// 可能还需要保存当前位置等
|
||||
scc_sstream_t sstream;
|
||||
scc_lexer_t lexer;
|
||||
scc_lexer_tok_ring_t *ring;
|
||||
} scc_pproc_file_state_t;
|
||||
typedef SCC_VEC(scc_pproc_file_state_t) scc_pproc_file_stack_t;
|
||||
typedef SCC_VEC(scc_pproc_file_state_t *) scc_pproc_file_stack_t;
|
||||
typedef SCC_VEC(scc_lexer_tok_ring_t *) scc_pproc_ring_vec_t;
|
||||
|
||||
typedef struct scc_pproc {
|
||||
scc_lexer_tok_ring_t *org_ring;
|
||||
scc_lexer_tok_ring_t *cur_ring;
|
||||
scc_lexer_tok_ring_t expanded_ring;
|
||||
scc_strpool_t strpool;
|
||||
@@ -49,7 +49,7 @@ scc_lexer_tok_ring_t *scc_pproc_to_ring(scc_pproc_t *pp, int ring_size);
|
||||
void scc_pproc_drop(scc_pproc_t *pp);
|
||||
|
||||
void scc_pproc_handle_directive(scc_pproc_t *pp);
|
||||
void scc_pproc_expand_by_src(scc_pproc_t *pp, const scc_pproc_macro_t *macro);
|
||||
void scc_pproc_parse_include(scc_pproc_t *pp);
|
||||
void scc_pproc_parse_macro_arguments(scc_lexer_tok_ring_t *ring,
|
||||
scc_lexer_tok_vec_t *args, int need_full);
|
||||
void scc_pproc_parse_function_macro(scc_pproc_t *pp,
|
||||
|
||||
Reference in New Issue
Block a user