import t, c from stdint import * import ast import memhub import lib.core.Handles.HandlesTranslator as HT import lib.core.Gen.Generator as Generator # ============================================================ # HandlesWhile - while 循环语句处理(迁移完成,保留跨 Mixin 委托壳) # # P6 机械化迁移:WhileHandle 类 → StmtGenCifMixin.translate_while; # 模块级辅助 _IsConstTrue/_NodeHasBreak/_StmtHasBreak → StmtGenCifMixin # 方法(merge 可达性判定)。 # 分派中枢(StmtGenMixin)经本壳跨链调用(Viper @t.NoVTable 静态绑定下 # 跨 Mixin self. 调用 mangle 失败,须经模块级委托壳桥回 gen 单例)。 # 迁移收尾(编译器缺陷修复)后统一删除。 # ============================================================ # ============================================================ # 全局 gen 单例(模块级镜像,同 HandlesType/HandlesStruct 模式) # # 由 BuildPipeline/main 在 gen 创建后调用 set_global_gen 注入。 # 委托函数用本地 _g_gen(cast 成 Generator 类型)调 # StmtGenCifMixin 方法,避免函数体 import 包模块与类/模块名歧义。 # ============================================================ _g_gen: Generator.Generator | t.CPtr = None # ============================================================ # translate_while - while 循环语句翻译(委托到 gen.translate_while) # ============================================================ def translate_while(trans: HT.Translator | t.CPtr, node: ast.AST | t.CPtr) -> int: """翻译 while 循环语句(委托到 gen.translate_while)""" g: Generator.Generator | t.CPtr = (Generator.Generator | t.CPtr)(t.CVoid(_g_gen, t.CPtr)) if g is not None: return g.translate_while(trans, node) return 0