From 281d26915ce821347584a0b65f7e349406d1c8f3 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 20 Aug 2026 07:02:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(gen):=20=E5=88=86=E6=B4=BE=E6=94=B9?= =?UTF-8?q?=E5=9B=9E=20Handles=20=E5=A7=94=E6=89=98=E5=A3=B3=E2=80=94?= =?UTF-8?q?=E2=80=94NoVTable=20=E5=90=8C=E9=93=BE=E8=B7=A8=E7=B1=BB=20self?= =?UTF-8?q?=20=E8=B0=83=E7=94=A8=E4=BB=8D=20mangle=20=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bootstrap 链接报 undefined symbol: StmtGenDeclMixin.translate_return/if/while/for。 实测 Viper NoVTable 静态绑定下,StmtGenMixin 调父链(StmtGenDeclMixin→StmtGenCifMixin) 方法仍 mangle 成 StmtGenDeclMixin 前缀符号(定义却在 StmtGenCifMixin),同继承链 也不可靠。分派统一改经 Handles 委托壳桥回 gen 单例;HandlesReturn 补 translate_return 壳。 --- App/lib/core/Gen/StmtGenMixin.vp | 8 ++++---- App/lib/core/Handles/HandlesReturn.vp | 23 +++++++++++++++++++---- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/App/lib/core/Gen/StmtGenMixin.vp b/App/lib/core/Gen/StmtGenMixin.vp index cd04f4a..c180d40 100644 --- a/App/lib/core/Gen/StmtGenMixin.vp +++ b/App/lib/core/Gen/StmtGenMixin.vp @@ -71,15 +71,15 @@ class StmtGenMixin(StmtGenDeclMixin.StmtGenDeclMixin): # 嵌套函数定义:提升为顶层函数 + 创建闭包 return HandlesFunctions.translate_nested_function_def(trans, node) elif k == ast.ASTKind.Return: - return self.translate_return(trans, node) + return HandlesReturn.translate_return(trans, node) elif k == ast.ASTKind.If: - return self.translate_if(trans, node) + return HandlesIf.translate_if(trans, node) elif k == ast.ASTKind.While: - return self.translate_while(trans, node) + return HandlesWhile.translate_while(trans, node) elif k == ast.ASTKind.AugAssign: return HandlesAugAssign.translate_augassign(trans, node) elif k == ast.ASTKind.For: - return self.translate_for(trans, node) + return HandlesFor.translate_for(trans, node) elif k == ast.ASTKind.ClassDef: return HandlesClassDef.translate_class_def(trans, node) elif k == ast.ASTKind.Import: diff --git a/App/lib/core/Handles/HandlesReturn.vp b/App/lib/core/Handles/HandlesReturn.vp index fbd56dd..58951b2 100644 --- a/App/lib/core/Handles/HandlesReturn.vp +++ b/App/lib/core/Handles/HandlesReturn.vp @@ -1,14 +1,17 @@ import t, c from stdint import * +import ast +import lib.core.Handles.HandlesTranslator as HT import lib.core.Gen.Generator as Generator # ============================================================ -# HandlesReturn - Return 语句处理(迁移完成) +# HandlesReturn - Return 语句处理(迁移完成,保留跨 Mixin 委托壳) # -# P6 机械化迁移:ReturnHandle 类 → StmtGenCifMixin.translate_return -# (lib.core.Gen.StmtGenCifMixin)。本文件保留模块级 _g_gen 单例 -# (main.vp / BuildPipeline.vp 注入),迁移收尾后统一删除。 +# P6 机械化迁移:ReturnHandle 类 → StmtGenCifMixin.translate_return。 +# 分派中枢(StmtGenMixin)经本壳跨类调用(Viper @t.NoVTable 静态绑定下 +# 跨 Mixin self. 调用 mangle 失败,须经模块级委托壳桥回 gen 单例)。 +# 迁移收尾(编译器缺陷修复)后统一删除。 # ============================================================ @@ -16,3 +19,15 @@ import lib.core.Gen.Generator as Generator # 全局 gen 单例(模块级镜像,同 HandlesType/HandlesStruct 模式) # ============================================================ _g_gen: Generator.Generator | t.CPtr = None + + +# ============================================================ +# translate_return - Return 语句翻译(委托到 gen.translate_return) +# ============================================================ +def translate_return(trans: HT.Translator | t.CPtr, + node: ast.AST | t.CPtr) -> int: + """翻译 Return 语句,返回 0(委托到 gen.translate_return)""" + g: Generator.Generator | t.CPtr = (Generator.Generator | t.CPtr)(t.CVoid(_g_gen, t.CPtr)) + if g is not None: + return g.translate_return(trans, node) + return 0