From 858aba46d0c381c21803d2b77d5cdface858264e Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Tue, 18 Aug 2026 14:04:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(HandlesImports):=20=5Fseen=5Fflat=5Fcls=20?= =?UTF-8?q?=E7=A7=BB=E5=88=B0=E7=88=B6=E7=B1=BB=E5=BE=AA=E7=8E=AF=E5=A4=96?= =?UTF-8?q?=EF=BC=8C=E8=8F=B1=E5=BD=A2=E5=8E=BB=E9=87=8D=E7=9C=9F=E6=AD=A3?= =?UTF-8?q?=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit b021c5b 的递归展平把 _seen_flat_cls 定义在 for _ParentClass 循环内,每个父类新建 seen → 菱形祖先(ClassGenBase)被每个继承它的 ClassGen* 父类各展平一次 → Generator class_members 707 字段(与 struct 114 不一致) → this_adjust sub_off 索引越界 → 继承方法不调整 → register_reexport 写 0x3f 崩溃。运行时诊断确认(707→114),register_reexport 调用生成正确 this_adjust(GEP +776)。已移除全部临时诊断。 --- lib/core/Handles/HandlesImports.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/core/Handles/HandlesImports.py b/lib/core/Handles/HandlesImports.py index c187f63..d9e7688 100644 --- a/lib/core/Handles/HandlesImports.py +++ b/lib/core/Handles/HandlesImports.py @@ -1920,6 +1920,10 @@ class ImportHandle(BaseHandle): # 同时处理父类 class_members 全为占位符的情况(清除后重新加载)。 _any_parent_loaded: bool = False _all_inherited: list[tuple] = [] + # 按继承源去重的跨父类共享 seen 集合(必须在 for 循环外,跨所有父类 + # 共享——否则每个父类新建 seen,菱形祖先(如 ClassGenBase)被每个 + # 继承它的 ClassGen* 父类各展平一次 → 重复(Generator 曾 707 字段) + _seen_flat_cls: set[str] = set() for _ParentClass in _ParentClasses: if not _ParentClass: continue @@ -1954,7 +1958,6 @@ class ImportHandle(BaseHandle): # stub struct 布局不一致 → 并行 worker 里 this_adjust 算不出偏移 → 继承 # 方法 self 不调整 → 运行时错位崩溃(register_reexport 写 0x3f)。 # 递归每类只处理一次,每类只贡献非祖先字段。 - _seen_flat_cls: set[str] = set() def _FlattenExt(cls_name: str) -> None: if cls_name in _seen_flat_cls: return