fix: P0审查修复 — CLAUDE.md数据更新 + load_module malloc→arena

This commit is contained in:
2026-06-06 16:54:23 +08:00
parent b3b3d285f9
commit 17c19fd9b9
2 changed files with 6 additions and 7 deletions
+5 -5
View File
@@ -132,14 +132,14 @@ L Language/
├── src/ ├── src/
│ ├── lexer/ │ ├── lexer/
│ │ ├── token.h/c Token {kind, start, length, line, col} │ │ ├── token.h/c Token {kind, start, length, line, col}
│ │ └── lexer.h/c 手写状态机,67 种 Token 类型 │ │ └── lexer.h/c 手写状态机,72 种 Token 类型
│ ├── parser/ │ ├── parser/
│ │ └── parser.h/c Pratt 表达式 (9 级优先级) + 递归下降语句 │ │ └── parser.h/c Pratt 表达式 (9 级优先级) + 递归下降语句
│ ├── ast/ │ ├── ast/
│ │ └── ast.h/c 14 种节点 (PROGRAM..IDENT_EXPR) + 工厂函数 │ │ └── ast.h/c 27 种 AST 节点 + 工厂函数
│ ├── sema/ │ ├── sema/
│ │ ├── symbol.h/c 作用域链 (Scope* parent 链表) │ │ ├── symbol.h/c 作用域链 (Scope* parent 链表)
│ │ └── sema.h/c 类型推断 + 类型检查 + 3 个内建函数注册 │ │ └── sema.h/c 类型推断 + 类型检查 + 5 个内建函数注册
│ ├── codegen/ │ ├── codegen/
│ │ └── codegen.h/c AST → LLVM-C API → LLVMModuleRef │ │ └── codegen.h/c AST → LLVM-C API → LLVMModuleRef
│ ├── driver/ │ ├── driver/
@@ -151,8 +151,8 @@ L Language/
│ ├── test_utils.h 断言宏 (ASSERT / TEST_RUN / test_summary) │ ├── test_utils.h 断言宏 (ASSERT / TEST_RUN / test_summary)
│ ├── test_lexer.c 词法测试 (41 tests) │ ├── test_lexer.c 词法测试 (41 tests)
│ ├── test_parser.c 语法测试 (15 tests) │ ├── test_parser.c 语法测试 (15 tests)
│ ├── test_sema.c 语义测试 (9 tests) │ ├── test_sema.c 语义测试 (74 tests)
│ └── programs/ .l 集成测试 (5 个程序) │ └── programs/ .l 集成测试 (34 个程序)
├── docs/ ├── docs/
│ ├── PRD.md 产品需求文档 │ ├── PRD.md 产品需求文档
│ └── superpowers/plans/ 实现计划 │ └── superpowers/plans/ 实现计划
+1 -2
View File
@@ -1008,14 +1008,13 @@ static AstNode* load_module(Arena* a, const char* parent_file,
} }
fseek(f, 0, SEEK_END); fseek(f, 0, SEEK_END);
size_t sz = ftell(f); fseek(f, 0, SEEK_SET); size_t sz = ftell(f); fseek(f, 0, SEEK_SET);
char* src = malloc(sz + 1); char* src = arena_alloc_impl(a, sz + 1);
if (!src) { fclose(f); return NULL; } if (!src) { fclose(f); return NULL; }
fread(src, 1, sz, f); src[sz] = '\0'; fclose(f); fread(src, 1, sz, f); src[sz] = '\0'; fclose(f);
size_t tc; size_t tc;
ErrorInfo lex_err = {0}; ErrorInfo lex_err = {0};
Token* toks = lex(a, src, mod_path, &tc, &lex_err); Token* toks = lex(a, src, mod_path, &tc, &lex_err);
free(src);
if (!toks) { *error = lex_err; return NULL; } if (!toks) { *error = lex_err; return NULL; }
AstNode* ast = parse(a, toks, tc, mod_path, error); AstNode* ast = parse(a, toks, tc, mod_path, error);