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:
1 parent
9f396f4874
commit
281d26915c
2 files changed
+23
-8
No files matched your search
@@ -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:
|
||||
|
||||
@@ -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
|
||||
Reference in new issue
Block a user