- 将依赖项从libcore重命名为scc_core - 更新头文件包含路径从<libcore.h>到<scc_core.h> - 保持原有功能不变 refactor(lexer): 重命名libcore为scc_core并添加词法流式解析功能 - 将依赖项从libcore重命名为scc_core - 移除不再需要的scc_lexer_token结构体定义 - 重命名struct cc_lexer为struct scc_lexer - 添加scc_lexer_stream_t流式解析器相关定义和实现 - 新增lexer_stream.c文件实现流式token缓冲功能 refactor(lexer_log): 重命名logger变量和头文件定义 - 将头文件保护宏从__SMCC_LEXER_LOG_H__改为__SCC_LEXER_LOG_H__ - 将logger变量从__smcc_lexer_log改为__scc_lexer_log - 更新头文件包含从<libcore.h>到<scc_core.h> refactor(lexer_token): 重新组织token头文件结构 - 将头文件保护宏从__SMCC_CC_TOKEN_H__改为__SCC_LEXER_TOKEN_H__ - 更新头文件包含从<libcore.h>到<scc_core.h> - 将scc_lexer_token结构体定义移至该文件 refactor(lexer): 简化token匹配代码格式 - 移除LCC相关的注释内容 - 优化括号符号的token匹配代码格式,使用clang-format控制 refactor(pprocessor): 更新依赖项名称和头文件包含 - 将libcore重命名为scc_core - 将libutils重命名为scc_utils - 更新头文件包含路径 refactor(runtime): 重命名libcore为scc_core并重构目录结构 - 将libcore目录重命名为scc_core - 将libutils目录重命名为scc_utils - 更新所有相关的头文件包含路径 - 修改cbuild.toml中的包名称 - 更新core_vec.h中的宏定义以支持标准库模式
33 lines
1004 B
C
33 lines
1004 B
C
#include <scc_strpool.h>
|
|
|
|
void scc_strpool_init(scc_strpool_t *pool) {
|
|
pool->ht.hash_func = (u32 (*)(const void *))scc_strhash32;
|
|
pool->ht.key_cmp = (int (*)(const void *, const void *))scc_strcmp;
|
|
scc_hashtable_init(&pool->ht);
|
|
}
|
|
|
|
const char *scc_strpool_intern(scc_strpool_t *pool, const char *str) {
|
|
void *existing = scc_hashtable_get(&pool->ht, str);
|
|
if (existing) {
|
|
return existing;
|
|
}
|
|
|
|
usize len = scc_strlen(str) + 1;
|
|
char *new_str = scc_malloc(len);
|
|
if (!new_str) {
|
|
LOG_ERROR("strpool: Failed to allocate memory for string");
|
|
return NULL;
|
|
}
|
|
scc_memcpy(new_str, str, len);
|
|
|
|
scc_hashtable_set(&pool->ht, new_str, new_str);
|
|
return new_str;
|
|
}
|
|
|
|
void scc_strpool_drop(scc_strpool_t *pool) { scc_hashtable_drop(&pool->ht); }
|
|
|
|
void scc_strpool_foreach(scc_strpool_t *pool, scc_strpool_iter_fn iter_func,
|
|
void *context) {
|
|
scc_hashtable_foreach(&pool->ht, (scc_hashtable_iter_fn)iter_func, context);
|
|
}
|