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
@@ -2694,7 +2694,7 @@ def _inject_class_struct_declare(pool: memhub.MemBuddy*,
|
||||
if first_node_c is None:
|
||||
first_node_c = pnode_c
|
||||
if prev_node_c is not None:
|
||||
llvmlite.paramnode_set_next(prev_node_c, pnode_c)
|
||||
prev_node_c.Next = pnode_c
|
||||
prev_node_c = pnode_c
|
||||
# 4. 命名结构体类型名 "sha1.ClassName"(与定义侧 ClassGenDef 一致)
|
||||
type_name_c: str = cls_name
|
||||
@@ -2868,7 +2868,7 @@ def _inject_global_variable_declare(pool: memhub.MemBuddy*,
|
||||
while cur_v is not None:
|
||||
if cur_v.Name is not None and string.strcmp(cur_v.Name, gv_name_m) == 0:
|
||||
return
|
||||
cur_v = llvmlite.globalvariable_get_next(cur_v)
|
||||
cur_v = cur_v.Next
|
||||
# 解析注解类型(裸类 → Ptr(struct),CArray → 元素指针)
|
||||
resolved_v: llvmlite.LLVMType* = None
|
||||
if aa.annotation is not None:
|
||||
@@ -4065,7 +4065,7 @@ def _repl_stub_try(e: rawptr[ReplStubClass], mod: llvmlite.LLVMModule*) -> int:
|
||||
if first_node is None:
|
||||
first_node = nd
|
||||
if prev_node is not None:
|
||||
llvmlite.paramnode_set_next(prev_node, nd)
|
||||
prev_node.Next = nd
|
||||
prev_node = nd
|
||||
struct_ty: llvmlite.LLVMType* = llvmlite.Struct(pool, first_node, total, e.Key)
|
||||
if struct_ty is None:
|
||||
|
||||
Reference in new issue
Block a user