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
@@ -152,7 +152,7 @@ novirtual class ExprGenOps(ExprGenBase.ExprGenBase):
|
||||
# 之前错误写成 inc2.Next = inc1,导致 build_phi 从 inc1 遍历时
|
||||
# inc1.Next 为 None,只输出一个 phi 条目,引发 LLVM 验证错误:
|
||||
# "PHINode should have one entry for each predecessor"
|
||||
llvmlite.phiincoming_set_next(inc1, inc2)
|
||||
inc1.Next = inc2
|
||||
return llvmlite.build_phi(builder, phi_ty, inc1, 2)
|
||||
# ============================================================
|
||||
# 翻译比较表达式 Compare(left, ops, comparators)
|
||||
@@ -547,8 +547,8 @@ novirtual class ExprGenOps(ExprGenBase.ExprGenBase):
|
||||
cn_self = llvmlite.build_bitcast(builder, rhs, cn_self_ty)
|
||||
if cn_self is not None:
|
||||
# 参数链表: self → key(独立 null 结尾)
|
||||
llvmlite.value_set_next(cn_self, lhs)
|
||||
llvmlite.value_set_next(lhs, None)
|
||||
cn_self.Next = lhs
|
||||
lhs.Next = None
|
||||
cn_res: llvmlite.Value* = llvmlite.build_call(builder, cn_fn_name, cn_self, 2, cn_ret, 0)
|
||||
if cn_res is not None:
|
||||
# 归一化到 i1(__contains__ 返回 int/i32 等)
|
||||
@@ -1022,7 +1022,7 @@ novirtual class ExprGenOps(ExprGenBase.ExprGenBase):
|
||||
phi_head = inc
|
||||
phi_tail = inc
|
||||
else:
|
||||
llvmlite.phiincoming_set_next(phi_tail, inc)
|
||||
phi_tail.Next = inc
|
||||
phi_tail = inc
|
||||
|
||||
# 定位到 next BB,求值下一个值
|
||||
@@ -1051,7 +1051,7 @@ novirtual class ExprGenOps(ExprGenBase.ExprGenBase):
|
||||
if phi_head is None:
|
||||
phi_head = inc
|
||||
else:
|
||||
llvmlite.phiincoming_set_next(phi_tail, inc)
|
||||
phi_tail.Next = inc
|
||||
phi_count += 1
|
||||
|
||||
# 定位到 merge,创建 phi 合并所有入边
|
||||
|
||||
Reference in new issue
Block a user