feat(core): 重构词法分析器流接口并迁移至 core 库

将 lexer_stream 抽象为 core_stream,统一运行时核心组件的输入流模型。
移除了旧的 `lexer_stream.h` 定义,并将其功能完整迁移至 `core_stream.h` 中。
更新了内存流实现以适配新的 core_stream 接口,并修复部分资源释放问题。
同时调整日志模块包含方式,增强模块间解耦能力。

此变更影响词法分析器对输入流的操作方式,所有涉及 stream 的类型与函数均已替换为 core 前缀版本。
测试用例同步更新并验证通过。
This commit is contained in:
zzy
2025-11-20 14:17:03 +08:00
parent 5c24f35c87
commit 47b56d52f6
13 changed files with 161 additions and 99 deletions

View File

@@ -0,0 +1,65 @@
#ifndef __SMCC_CORE_STREAM_H__
#define __SMCC_CORE_STREAM_H__
#include "core_impl.h"
#include "core_mem.h"
#include "core_str.h"
#include "core_macro.h"
typedef struct core_stream core_stream_t;
#define core_stream_eof (-1)
struct core_stream {
cstring_t name;
/// @brief 读取指定数量的字符到缓冲区
usize (*read_buf)(core_stream_t* stream, char* buffer, usize count);
/// @brief 获取下一个字符
int (*peek_char)(core_stream_t* stream);
/// @brief 重置字符流位置
void (*reset_char) (core_stream_t* stream);
/// @brief 读取并消费下一个字符(移动流位置)
int (*next_char)(core_stream_t* stream);
/// @brief 释放资源
void (*free_stream) (core_stream_t* steam);
};
static inline usize core_stream_read_buf(core_stream_t* self, char* buffer, usize count) {
return self->read_buf(self, buffer, count);
}
static inline int core_stream_peek_char(core_stream_t* self) {
return self->peek_char(self);
}
static inline void core_stream_reset_char(core_stream_t* self) {
self->reset_char(self);
}
static inline int core_stream_next_char(core_stream_t* self) {
return self->next_char(self);
}
static inline void core_stream_free_stream(core_stream_t* self) {
self->free_stream(self);
}
#ifndef __SMCC_CORE_NO_MEM_STREAM__
typedef struct core_mem_stream {
core_stream_t stream;
const char* data;
usize data_length;
usize curr_pos;
usize peek_pos;
cbool owned;
} core_mem_stream_t;
core_stream_t* core_mem_stream_init(core_mem_stream_t* stream, const char* data, usize length, cbool need_copy);
#endif
#endif /* __SMCC_CORE_STREAM_H__ */