fix(gen): 分派改回 Handles 委托壳——NoVTable 同链跨类 self 调用仍 mangle 失败

bootstrap 链接报 undefined symbol: StmtGenDeclMixin.translate_return/if/while/for。
实测 Viper NoVTable 静态绑定下,StmtGenMixin 调父链(StmtGenDeclMixin→StmtGenCifMixin)
方法仍 mangle 成 StmtGenDeclMixin 前缀符号(定义却在 StmtGenCifMixin),同继承链
也不可靠。分派统一改经 Handles 委托壳桥回 gen 单例;HandlesReturn 补 translate_return 壳。
This commit is contained in:
TermiNexus committed 2026-08-20 07:02:43 +08:00
1 parent 9f396f4874
commit 281d26915c
2 files changed
+23 -8

No files matched your search

+4 -4
View File
@@ -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:
+19 -4
View File
@@ -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