- 10 个 Handler 类主方法迁入 Gen:Assign/AnnAssign/AugAssign→AssignGenMixin, If/While/For/Return→StmtGenCifMixin,Match→新建 MatchGenMixin(注册 Generator MRO), Imports→ImportsGenMixin;方法体 self.Trans→trans,签名加 trans 首参 - 分派改:StmtGenMixin.translate_stmt 同链 self.translate_xxx + 跨链经 Handles 委托壳 (NoVTable 静态绑定约束);ExprCall 分派改走 ExprCallCall 壳 - 清理:HandlesTranslator 删 11 个 Handler 字段与 _init_state 创建段; StmtGenCifMixin 删 5 个 NewXxxHandle 工厂;main/BuildPipeline 补 HandlesAssign._g_gen 注入 - 委托壳保留:跨 Mixin 桥(Assign/AnnAssign/AugAssign/Match/Imports)待编译器缺陷修复后删
35 lines
1.5 KiB
Plaintext
35 lines
1.5 KiB
Plaintext
import t, c
|
||
from stdint import *
|
||
import ast
|
||
import memhub
|
||
import lib.core.Handles.HandlesTranslator as HT
|
||
import lib.core.Gen.Generator as Generator
|
||
|
||
|
||
# ============================================================
|
||
# HandlesAugAssign - 增强赋值语句处理(迁移完成,保留跨 Mixin 委托壳)
|
||
#
|
||
# P6 机械化迁移:AugAssignHandle 类 → AssignGenMixin.translate_augassign。
|
||
# 分派中枢(StmtGenMixin)经本壳跨链调用(Viper @t.NoVTable 静态绑定下
|
||
# 跨 Mixin self. 调用 mangle 失败,须经模块级委托壳桥回 gen 单例)。
|
||
# 迁移收尾(编译器缺陷修复)后统一删除。
|
||
# ============================================================
|
||
|
||
|
||
# ============================================================
|
||
# 全局 gen 单例(模块级镜像,同 HandlesType/HandlesStruct 模式)
|
||
# ============================================================
|
||
_g_gen: Generator.Generator | t.CPtr = None
|
||
|
||
|
||
# ============================================================
|
||
# translate_augassign - 增强赋值翻译(委托到 gen.translate_augassign)
|
||
# ============================================================
|
||
def translate_augassign(trans: HT.Translator | t.CPtr,
|
||
node: ast.AST | t.CPtr) -> int:
|
||
"""翻译增强赋值语句,返回新增变量数(委托到 gen.translate_augassign)"""
|
||
g: Generator.Generator | t.CPtr = (Generator.Generator | t.CPtr)(t.CVoid(_g_gen, t.CPtr))
|
||
if g is not None:
|
||
return g.translate_augassign(trans, node)
|
||
return 0
|