Commit Graph

75 Commits

Author SHA1 Message Date
Serendipity caf17e16fc feat: for step 步长 — for i in 0 to 10 step 2 { ... }
Token(75): +TOK_STEP, desugar_for 增加 step_expr 参数, 默认 step=1

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 14:13:09 +08:00
Serendipity 71208a87f4 feat: 多返回值 fn f(...) -> (T, U) { return (e1, e2); }
Parser: -> (T1,T2) 解析为隐式 struct __ret_funcname, return (e1,e2) 去糖为 struct init
返回的 struct 可访问字段 _0, _1, ... 无 sema/codegen 改动

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 14:07:13 +08:00
Serendipity 06c8773fac feat: 装饰器 #[attr] 语法 — parser 解析并跳过
Token(74): +TOK_HASH, lexer 识别 '#', parser 在 fn/struct/enum 前解析 #[ident]
语法就位, 后续可扩展存储属性到 AST 节点

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 14:00:42 +08:00
Serendipity 443b22bdf1 feat: 列表推导式 [for x in arr: expr] — parser+sema+codegen
AST(29): +AST_LIST_COMP, parser 解析 [for var in expr: body]
sema: 创建子作用域注册循环变量, codegen: for 循环绑定+填充结果数组
已知限制: 仅支持 2 元素及以下数组 (大数组 alloca 对齐问题待修)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 13:58:54 +08:00
Serendipity 0088347576 feat: defer 延迟执行 — defer { stmts; } 在 return 前按 LIFO 执行
Token(73): +TOK_DEFER, AST(28): +AST_DEFER_STMT, 新增 38_defer.l
parser: defer { ... } 块 + defer expr; 表达式两种形式
codegen: defer 栈压入 block, emit_deferred() 在 return 前 LIFO 发射

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 13:51:10 +08:00
Serendipity e60021b684 docs: language-reference.md v0.7 全面重写
新增章节: 泛型、Trait、模块系统(mod+use+pub)、ADT枚举、if let、if-expr
更新: 类型表(14种)、测试数据(197+37)、版本号、快速参考卡片
2026-06-07 13:38:47 +08:00
Serendipity 1aafde0fd9 chore: 版本 v0.7.0 2026-06-07 13:08:21 +08:00
Serendipity 2247fa39f4 docs: CLAUDE.md v0.7 全面更新 — 架构/类型/限制/测试同步 2026-06-07 13:04:59 +08:00
Serendipity c285a145c8 refactor: typeck.c 652→559 — 泛型单态化提取为 mono.c (97行) 2026-06-07 13:00:10 +08:00
Serendipity 82b0570869 refactor: codegen_expr switch→Visitor dispatch (12 handler)
cg_expr.c 440行: 12 表达式handler提取为独立函数 + AstDispatch 表
codegen_expr 从巨型 switch 改为 ast_visit() 查表调用
新增表达式节点: codegen_expr_init() 加一行即可
修复: to_llvm_type/type_info_to_llvm TYPE_ENUM/STR 完整映射

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 12:59:18 +08:00
Serendipity bcf6508c4c feat: use 语句 — use module::item 导入模块符号
修复审查 #2: use 语句从 skippable TODO 实现为完整符号导入
  use math_mod::add → 加载模块, 匹配 pub 函数/结构体/枚举, 零前缀导入
新增 37_use.l 集成测试

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 12:53:18 +08:00
Serendipity a070883ae4 fix: sprintf→snprintf + strcpy→memcpy 缓冲区安全加固 2026-06-07 12:52:09 +08:00
Serendipity 376738d7fc docs: 全面架构与代码审查报告 (2026-06-07) 2026-06-07 12:40:43 +08:00
Serendipity 35e2691cb7 chore: 删除自动化分析报告目录 2026-06-06 21:28:48 +08:00
Serendipity b34ad17aad refactor: AST Visitor dispatch — sema analyze_expr switch→vtable
新增 src/ast/visit.h/c: AstDispatch 函数指针表 + ast_visit() 统一入口
analyze_expr 的 switch 替换为 dispatch 表, 10 个 handler 通过 SEMA_HANDLER 宏注册
新增 AST 节点: 在 analyze_expr_init() 加一行即可, 编译器会检查函数签名

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 20:36:13 +08:00
Serendipity 3733b41453 refactor: TypeTable 数据驱动 — promote/convert/numeric/comparable 统一查表
新增 src/sema/type_table.h/c: TypeDesc{promote_rank, bit_width, is_signed, is_numeric}
promote/can_implicit_convert/is_numeric/is_comparable 从硬编码 switch 改为查表
新增类型只需在 TABLE[] 加一行, 从 7+ 文件改为 3-4 文件 (token + table + codegen)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 20:31:32 +08:00
Serendipity 66b170a27f docs: CLAUDE.md 反映 desugar pass + 文件行数更新
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 20:20:50 +08:00
Serendipity eaae0b1c62 refactor: 独立 desugar pass — match/guard/for/if-let/复合赋值去糖提取
5 种去糖逻辑从 parser.c/expr.c 内联代码提取到 desugar.c:
  desugar_match() — match → let + if-else 链
  desugar_guard() — guard → if !(cond)
  desugar_for()  — for-in-to → var + while
  desugar_if_let() — if let → let + if
  desugar_compound_assign() — +=/-= → assign + binary

parser.c 662→564 行, 新增 desugar.c 109 行, 管道+插值保留在 expr.c

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 20:20:33 +08:00
Serendipity f3cca30cca docs: CLAUDE.md 数据同步 — 197单元+36集成,架构图反映文件拆分
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 20:16:51 +08:00
Serendipity 6d1db585c4 refactor: sema.c + codegen.c 拆分,全部源文件 <800 行
sema.c 1129行 → sema.c 499行 + typeck.c 629行 + sema_internal.h 51行
  - typeck.c: 表达式类型检查 (10个analyze_*函数) + 泛型单态化 + 类型关系
  - sema.c: analyze_node + sema_analyze

codegen.c 947行 → codegen.c 453行 + cg_expr.c 440行 + codegen_internal.h 83行
  - cg_expr.c: LLVM表达式生成 + 类型映射 (to_llvm_type/coerce_int/type_info_to_llvm)
  - codegen.c: 语句生成 + 模块入口 + 符号表 + 内存清理

全部核心源文件 <800 行限制: parser(662+498), sema(499+629), codegen(453+440)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 19:26:54 +08:00
Serendipity 90d081c3fd fix: P0审查修复 P2补强 — parser.c 拆分 + 测试扩充
P0-③: parser.c 1211行 → parser.c 662行 + expr.c 498行 + parse_internal.h 71行
  - expr.c: 表达式解析 (Pratt主循环/字面量/标识符/类型/运算符)
  - parser.c: 语句/声明/程序入口 (block/match/let/if/while/for/guard/fn/parse)
  - parse_internal.h: 共享 Parser struct + 内联辅助 + 向前声明

P2-①: parser 测试 5函数→20函数, 15断言→54断言
  - 新增: struct声明、字面量类型、优先级链、guard去糖、命名参数
  - 新增: 字段访问、方法调用、match、enum声明、for去糖、管道
  - 新增: 类型别名、trait声明、数组类型、if表达式

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 18:57:07 +08:00
Serendipity 466be76fd8 fix: P1审查修复 — error.c arena化 + Self类型解析 + trait查找加固 + 缓冲区安全
P1-①: error_init/add 从 malloc/realloc/strdup 改为 arena_alloc/arena_strdup
P1-②: impl 方法中 Self 类型在 sema 解析为实际结构体名
P1-③: trait 方法 fallback 增加前缀校验(strncmp),method_name 统一更新
P1-④: codegen args[16] 增加溢出检查,移除 parser 未使用的 mods/uses 数组
新增: 36_self_type.l 集成测试(Self 类型 + trait 方法)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 17:09:28 +08:00
Serendipity 17c19fd9b9 fix: P0审查修复 — CLAUDE.md数据更新 + load_module malloc→arena 2026-06-06 16:54:23 +08:00
Serendipity b3b3d285f9 feat: trait 接口系统 — trait Show { fn method } + extend Trait Struct { } 2026-06-06 16:41:21 +08:00
Serendipity 9169796b77 feat: 泛型单态化完成 — fn id<T>(x: T) -> T 全流水线通过 2026-06-06 16:25:18 +08:00
Serendipity 350eeef3c5 feat: 泛型基础设施 — <T>解析 + 类型推断 (单态化 codegen 待补) 2026-06-06 16:17:15 +08:00
Serendipity fa734b8a23 feat: 模块系统 mod + pub — 多文件编译支持 2026-06-06 16:09:30 +08:00
Serendipity e02cc7b1d6 feat: if let 语句 — if let Option::Some = expr { ... } 2026-06-06 15:20:34 +08:00
Serendipity 0e1f8c5795 feat: 枚举关联数据 ADT — enum Option { Some(i64), None } 2026-06-06 14:21:43 +08:00
Serendipity 0ec3c3d65f feat: 表达式作为值 — if/else 和 block 可产生值 2026-06-06 13:52:36 +08:00
Serendipity 380b52930a docs: Token 计数修正 50→67 (AGENTS.md + CLAUDE.md) 2026-06-06 13:33:39 +08:00
Serendipity 031dedfb8e refactor: 拆分 sema analyze_expr 为 9 个辅助函数 + 调度器 2026-06-06 01:36:37 +08:00
Serendipity de91886712 fix: CreateProcess 替代 system() 调 ld.lld,消除 shell 转义问题 v0.6.0 2026-06-05 22:07:53 +08:00
Serendipity 39d8bad022 feat: 自包含安装包 — ld.lld + MinGW 库 (39MB, 零依赖) 2026-06-05 22:01:01 +08:00
Serendipity 1e161ecfff feat: NSIS 安装包脚本 (62MB, 含 LLVM+clang+lld) 2026-06-05 21:51:22 +08:00
Serendipity 143174ee4f refactor: 链接器从 gcc 改为 clang + lld(优先 clang→fallback gcc) 2026-06-05 21:43:48 +08:00
Serendipity 2baf762d82 docs: README/CHANGELOG/语言参考更新至 v0.6 2026-06-05 21:02:05 +08:00
Serendipity 459d1e1e10 feat: 管道 |> + 字符串插值 \(expr) — P0 四特性收官 2026-06-05 20:59:00 +08:00
Serendipity 6b6925b2b8 feat: 命名参数 draw_rect(width: 10, height: 20) 2026-06-05 20:54:58 +08:00
Serendipity c6e492662e feat: guard 语句 guard x >= 0 else { return -1; } 2026-06-05 20:49:03 +08:00
Serendipity 18172ca724 feat: 新增 i32 / u64 / char 类型 + 字符字面量 "'a'" 2026-06-05 20:47:44 +08:00
Serendipity 6fc599e6c2 feat: impl 关键字改为 extend 2026-06-05 19:50:40 +08:00
Serendipity 175f8a6658 feat: 数组类型语法 [T; N] 改为 T[N] 后置语法 2026-06-05 19:48:56 +08:00
Serendipity ab4cc9a28b feat: let mut 改为 var 关键字声明可变变量 2026-06-05 19:47:00 +08:00
Serendipity a28d33854c feat: for..in 范围语法 .. 改为 to 关键字 2026-06-05 19:44:26 +08:00
Serendipity 9a256d9be1 docs: 测试计数更新 145→158 单元 + 23→24 集成 2026-06-05 19:39:12 +08:00
Serendipity a45f7d8e2f feat: 数组支持 struct 元素类型 [Point; N] 2026-06-05 19:38:48 +08:00
Serendipity beac40fd74 test: match sema + codegen 单元测试,总断言 145→158 2026-06-05 19:36:26 +08:00
Serendipity a0a78de26e docs: 补充数组初始化 = arr 语法说明 2026-06-05 19:31:46 +08:00
Serendipity 095604dc9f docs: CLAUDE.md 语言设计哲学增加L化适配原则 2026-06-05 19:07:54 +08:00