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