添加了对源指针的空值断言检查,防止在scc_lexer_tok_copy函数中 传入空指针导致崩溃 refactor(pproc): 优化数组到环形缓冲区转换函数的参数命名 修改scc_lexer_array_to_ring函数参数名从array改为move_array, 并在转换后初始化原数组结构,确保资源正确管理 fix(pproc): 修复宏处理中的内存泄漏问题 - 在fill_replacements函数中初始化token结构并正确释放 - 在scc_pproc_parse_function_macro中释放args向量 - 修改token消费逻辑以避免重复消费 - 在指令处理中添加token释放操作 fix(pproc): 改进宏展开过程中的资源管理 - 修复concatenate_tokens函数中的潜在内存泄漏 - 添加对输出向量的断言检查 - 正确释放输入环形缓冲区 - 重构参数拆分逻辑以避免内存泄漏 refactor(pproc): 优化条件解析和宏表设置逻辑 - 修正parse_constant_condition函数中的返回值初始化 - 在宏表设置时处理重复宏名称的情况 - 改进预处理器的整体资源清理流程 fix(pproc): 修复预处理器中的多个内存泄漏 - 在测试代码中添加正确的资源释放 - 修正格式化字符串中的类型匹配 - 优化环形缓冲区初始化逻辑以处理零容量情况
37 lines
1.2 KiB
C
37 lines
1.2 KiB
C
#ifndef __SCC_PPROC_EXPAND_H__
|
|
#define __SCC_PPROC_EXPAND_H__
|
|
|
|
#include <pproc_macro.h>
|
|
#include <scc_core.h>
|
|
#include <scc_core_ring.h>
|
|
#include <scc_lexer.h>
|
|
|
|
typedef struct {
|
|
scc_pproc_macro_table_t *macro_table;
|
|
scc_pproc_macro_table_t *expanded_set;
|
|
scc_lexer_tok_ring_t *input;
|
|
scc_lexer_tok_vec_t output;
|
|
cbool need_rescan;
|
|
cbool need_parse_defined;
|
|
} scc_pproc_expand_t;
|
|
|
|
static inline scc_lexer_tok_ring_t
|
|
scc_lexer_array_to_ring(scc_lexer_tok_vec_t *move_array) {
|
|
scc_lexer_tok_ring_t ret;
|
|
scc_ring_by_buffer(ret, move_array->data, move_array->size);
|
|
scc_vec_init(*move_array);
|
|
return ret;
|
|
}
|
|
|
|
void scc_pproc_expand_macro(scc_pproc_expand_t *expand_ctx);
|
|
void scc_pproc_expand_by_src(scc_pproc_macro_table_t *macro_table,
|
|
scc_lexer_tok_ring_t *input,
|
|
scc_lexer_tok_ring_t *output,
|
|
const scc_pproc_macro_t *macro);
|
|
void scc_pproc_expand_by_vec(scc_pproc_macro_table_t *macro_table,
|
|
scc_lexer_tok_vec_t *input,
|
|
scc_lexer_tok_vec_t *output,
|
|
cbool need_parse_defined);
|
|
|
|
#endif /* __SCC_PPROC_EXPAND_H__ */
|