refactor(tpc): 退役 t/c 模块并将定宽类型升级为内建
删除 lib/includes/t.py、c.py,类型模型迁入 lib/core/TypeSystem.py;移除 IsTModule/_T_MODULE_NAMES 等名称判据,语法糖与内部标记统一为裸名;builtins 的 sizet/intN/uintN/fast/least/uchar/short/long 等改为编译器内建短名。
This commit is contained in:
1 parent
8d27747c7c
commit
f19d25782f
66 files changed
+2445
-3638
No files matched your search
+12
-12
@@ -17,18 +17,18 @@
|
||||
(如 "%s.__iter__" 之类的字符串与三引号注释块不再命中)。
|
||||
5) 类成员表按族隔离: 基类先在**本族**找, 再找**支撑族**(''), 最后全局唯一名;
|
||||
同一基类名跨族重复时报 AMBIG(宁可 UNRESOLVED 也不猜)。
|
||||
6) `t.REnum`(tagged union)派生类: 变体字段合并进父类成员集
|
||||
6) `REnum`(tagged union)派生类: 变体字段合并进父类成员集
|
||||
(VPC 允许在父类指针上访问变体字段, 不合并会产生大量误报)。
|
||||
|
||||
前端 = **TPC 自研 vast**(`lib/vast`,与 StubGen/Converter.py 用的 `import vast as ast`
|
||||
是同一源文件; 不可用 CPython `ast`, 否则含 `list[X*]` 等 vast 专有写法的文件会整体
|
||||
SyntaxError 被跳过)。vast 与 CPython ast 的差异及本脚本的适配:
|
||||
A) `X*` / `X**` 被 vast 脱糖成 `X | t.CPtr`(`**` 加两层), 其中合成的
|
||||
`t.CPtr` Attribute 节点**连 lineno 属性都没有**(编译器内部脱糖产物, 不是源码里的
|
||||
访问; 全树实测 555 个, 全部是 ('t','CPtr'))=> 计入 Uses 时用
|
||||
A) `X*` / `X**` 被 vast 脱糖成 `X | CPtr`(`**` 加两层), 其中合成的
|
||||
`CPtr` Attribute 节点**连 lineno 属性都没有**(编译器内部脱糖产物, 不是源码里的
|
||||
访问; 全树实测 555 个, 全部是 ('CPtr'))=> 计入 Uses 时用
|
||||
`getattr(Node,'lineno',None) is not None` 排除。
|
||||
B) vast 的 SyntaxError 可能不带 lineno(C 路径)=> 从报文 `at line N` 兜底提取。
|
||||
C) vast 的装饰器 `@t.NoVTable` 的 col_offset 是 `@` 的位置(CPython 是其后 1 列);
|
||||
C) vast 的装饰器 `@NoVTable` 的 col_offset 是 `@` 的位置(CPython 是其后 1 列);
|
||||
该 Attribute 的接收者 `t` 不是族指针, 判据不受影响。
|
||||
D) 其余节点类名/属性名/walk/iter_child_nodes 与 CPython ast 同构(已逐节点对照)。
|
||||
|
||||
@@ -86,7 +86,7 @@ DefaultIncludesDir = os.path.join(RepoRoot, 'includes')
|
||||
DefaultOutFile = os.path.join(RepoRoot, 'Debugger', 'ScanAstFieldMiss.txt')
|
||||
|
||||
# ---- 前端: TPC 自研 vast(非 CPython ast)。需要 TransPyC 包根在 sys.path,
|
||||
# lib._bootstrap 会再补齐 lib/ 与 lib/includes(使 `import vast` 可用)。
|
||||
# lib._bootstrap 会再补齐 lib/(使 `import vast` 可用)。
|
||||
if TpcRoot not in sys.path:
|
||||
sys.path.insert(0, TpcRoot)
|
||||
from lib import vast as ast # noqa: E402
|
||||
@@ -105,8 +105,8 @@ ClassFields = {}
|
||||
ClassMethods = {}
|
||||
ClassBase = {}
|
||||
ClassLoc = {} # 裸类名 -> [族, ...](用于跨族基类解析)
|
||||
EnumClass = {} # (族, 类名) -> 1 表示 t.REnum/t.CEnum 派生(变体字段合并)
|
||||
REnumClass = {} # (族, 类名) -> 1 表示 t.REnum 派生(额外有编译器内建 .kind())
|
||||
EnumClass = {} # (族, 类名) -> 1 表示 REnum/CEnum 派生(变体字段合并)
|
||||
REnumClass = {} # (族, 类名) -> 1 表示 REnum 派生(额外有编译器内建 .kind())
|
||||
|
||||
MemberCache = {}
|
||||
FamilyFields = {} # 族 -> 该族所有字段并集(OTHER/NOWHERE 判定用)
|
||||
@@ -190,7 +190,7 @@ def ParseSrc(Src, Path):
|
||||
"""vast 前端解析入口(全脚本单一前端; 失败抛异常, 由调用方记账)。
|
||||
|
||||
`.vp` 源码须先过 Viper 软关键字层(`lib/core/SymbolUtils.ExpandSoftKeywords`:
|
||||
`fn/fun/func/function` → `def`、`enum X:` → `class X(t.CEnum):`),与
|
||||
`fn/fun/func/function` → `def`、`enum X:` → `class X(CEnum):`),与
|
||||
`StubGen/Converter.py` / `Shell/TransPyC.py` 等既有前端入口同口径。
|
||||
否则含 `enum` 的 `.vp`(如 `includes/ast/base.vp:168`)会在此整体 SyntaxError,
|
||||
被 `LoadInclude` 的正则兜底或 `RunScan` 的 `parsefail` 记成"解析失败"——两者
|
||||
@@ -336,7 +336,7 @@ def Member(Fam, Name):
|
||||
# 2. 类型推导: 从注解 / cast 调用里取 (族, 类名)
|
||||
# ============================================================
|
||||
def AnnClass(Ann):
|
||||
"""注解里若为 rawptr[<族>.<X>](可被 `| t.CPtr` 包裹)返回 (族, X), 否则 None。"""
|
||||
"""注解里若为 rawptr[<族>.<X>](可被 `| CPtr` 包裹)返回 (族, X), 否则 None。"""
|
||||
if Ann is None:
|
||||
return None
|
||||
if isinstance(Ann, ast.BinOp) and isinstance(Ann.op, ast.BitOr):
|
||||
@@ -464,8 +464,8 @@ def Walk(Node, Sc):
|
||||
Walk(S, CS)
|
||||
return
|
||||
if isinstance(Node, ast.Attribute):
|
||||
# 只收源码里真实存在的属性访问: vast 脱糖 `X*` 会合成 `t.CPtr` Attribute,
|
||||
# 该节点**连 lineno 属性都没有**(全树 555 个, 全为 ('t','CPtr')), 不是源码
|
||||
# 只收源码里真实存在的属性访问: vast 脱糖 `X*` 会合成 `CPtr` Attribute,
|
||||
# 该节点**连 lineno 属性都没有**(全树 555 个, 全为 CPtr 下标), 不是源码
|
||||
# 访问、也不能参与位置比较 => 用 getattr 显式排除。
|
||||
if isinstance(Node.value, ast.Name) and getattr(Node, 'lineno', None) is not None:
|
||||
Uses.append((Node, Sc))
|
||||
|
||||
Reference in new issue
Block a user