revert(cdef): 撤销跨模块 CDefine 匹配放宽

t.CSizeT 等注解的模块级常量是全局变量而非宏,不应走 CDefine 宏路径
(正确语义:Phase1.PYI_BUF_SIZE 按 extern size_t 跨模块全局引用)。
恢复行匹配仅认 t.CDefine。
This commit is contained in:
TermiNexus committed 2026-08-19 05:41:14 +08:00
1 parent 677373c629
commit aa2a1e593f
1 file changed
+7 -8
+7 -8
View File
@@ -441,17 +441,16 @@ class ExprGenCdef(ExprGenBase.ExprGenBase):
if pyi_buf[line_start + name_len] != ':':
continue
# 检查行是否包含 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<大写> 类型 + 字面量初值即视为编译期常量。
# 检查行是否包含 "t.CDefine"
# 在行中查找 "t.CDefine"
has_cdefine: int = 0
ci: t.CSizeT = line_start + name_len + 1
while ci + 2 <= line_start + line_len:
while ci + 8 <= line_start + line_len:
if (pyi_buf[ci] == 't' and pyi_buf[ci + 1] == '.' and
pyi_buf[ci + 2] == 'C' and ci + 3 < line_start + line_len
and pyi_buf[ci + 3] >= 'A' and pyi_buf[ci + 3] <= 'Z'):
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'):
has_cdefine = 1
break
ci += 1