revert(transpyv): 回滚跨模块链表 Next 改访问器(改由编译器沿继承链解析字段名)
回滚 13080f6 的 110 处访问器调用,恢复裸字段访问 `x.Next`。
理由:该批访问器是把访问移到定义模块内执行,**绕开**了"继承字段名解析",
属于规避而非修复;缺陷本体在 TPC 侧(导入侧继承展平把泛型基类的继承字段
记成 __inherited_N 占位名,名字丢失)。TPC 已按语义修正:
· e6451a07 继承展平沿继承链取真实字段名(泛型特化回退模板名),
展平表直接落 `[("Next", <槽位类型>), ...]`,属性访问是普通表命中;
· 3ca46c01 顺带修掉 _get_or_create_struct 里"同名枚举成员遮蔽类定义"的 i32 出口。
因此源码侧恢复为唯一写法(裸字段访问),由编译器负责解析。
注:本 commit 只回滚访问器;13080f6 里夹带的 CallGenProp.vp 续行合并(非访问器改动)
已在工作区保留(未提交)。
This commit is contained in:
1 parent
13080f646f
commit
aa52cf157d
24 files changed
+114
-118
No files matched your search
@@ -477,7 +477,7 @@ novirtual class ClassGenDef(ClassGenBase.ClassGenBase):
|
||||
if first_node is None:
|
||||
first_node = pnode
|
||||
if prev_node is not None:
|
||||
llvmlite.paramnode_set_next(prev_node, pnode)
|
||||
prev_node.Next = pnode
|
||||
prev_node = pnode
|
||||
|
||||
# 构造命名结构体类型名: "sha1.ClassName" 或 "ClassName"
|
||||
|
||||
@@ -547,7 +547,7 @@ novirtual class ClassGenEnum(ClassGenBase.ClassGenBase):
|
||||
total += fsize
|
||||
if is_packed == 0 and falign > max_align:
|
||||
max_align = falign
|
||||
cur = llvmlite.paramnode_get_next(cur)
|
||||
cur = cur.Next
|
||||
i += 1
|
||||
# packed 无尾部对齐;非 packed 总大小对齐到最大字段对齐的倍数
|
||||
if is_packed != 0:
|
||||
@@ -595,7 +595,7 @@ novirtual class ClassGenEnum(ClassGenBase.ClassGenBase):
|
||||
fa: int = self._get_type_align(fty)
|
||||
if fa > max_align:
|
||||
max_align = fa
|
||||
cur = llvmlite.paramnode_get_next(cur)
|
||||
cur = cur.Next
|
||||
i += 1
|
||||
return max_align
|
||||
case _:
|
||||
|
||||
Reference in new issue
Block a user