diff --git a/App/lib/core/Gen/ExprGenCdef.vp b/App/lib/core/Gen/ExprGenCdef.vp index 84b4fdc..0dbd85e 100644 --- a/App/lib/core/Gen/ExprGenCdef.vp +++ b/App/lib/core/Gen/ExprGenCdef.vp @@ -441,16 +441,17 @@ class ExprGenCdef(ExprGenBase.ExprGenBase): if pyi_buf[line_start + name_len] != ':': continue - # 检查行是否包含 "t.CDefine" - # 在行中查找 "t.CDefine" + # 检查行是否包含 t.C 类型注解(CDefine 或 t.CSizeT/t.CInt 等常量类型) + # 原实现只认 "t.CDefine"(9 字符精确匹配),漏掉 t.CSizeT 等注解的 + # 模块级常量全局(如 Phase1.PYI_BUF_SIZE: t.CSizeT = 262144,是 i64 + # 全局常量而非 CDefine)→ "跨模块 CDefine 未找到" 误报。本函数仅被 + # ALL_CAPS 名触发,t.C<大写> 类型 + 字面量初值即视为编译期常量。 has_cdefine: int = 0 ci: t.CSizeT = line_start + name_len + 1 - while ci + 8 <= line_start + line_len: + while ci + 2 <= line_start + line_len: if (pyi_buf[ci] == 't' and pyi_buf[ci + 1] == '.' and - pyi_buf[ci + 2] == 'C' and pyi_buf[ci + 3] == 'D' and - pyi_buf[ci + 4] == 'e' and pyi_buf[ci + 5] == 'f' and - pyi_buf[ci + 6] == 'i' and pyi_buf[ci + 7] == 'n' and - pyi_buf[ci + 8] == 'e'): + pyi_buf[ci + 2] == 'C' and ci + 3 < line_start + line_len + and pyi_buf[ci + 3] >= 'A' and pyi_buf[ci + 3] <= 'Z'): has_cdefine = 1 break ci += 1