Commit Graph
100 Commits
Author SHA1 Message Date
TermiNexus 407f047411 chore(phase1): translate 流程加 printf 断点,定位 stdint.vp 访问违规崩溃点
stdint.vp 翻译中崩溃(退出码 -1073741815=0xC0000005 访问违规),
发生在 translate 内部 printf.fmt 创建后。在 translate 声明完成/
main 检查/模块级各步骤(import、容器可见性、CTypedef 扫描、vpi 注入、
变量预注册、前向声明、translate_children)加断点,崩溃前最后打印的
步骤即为崩点。
2026-08-18 08:43:37 +08:00
TermiNexus 0cb0a12810 fix(phase1): 加 translate 后存活块检查 + printf Params 链创建即校验 + dump 函数清单诊断
builtins.vp dump 卡死已定位:printf.fmt Param 的 Next 被越界写破坏成环
(Params.Count=1 但遍历超限)。本次加运行时证据收集:
1. printf declare 创建后立即打印 fmt Param 地址/Next(区分创建即坏 vs
   后续被破坏)
2. dump_ir(OUTPUT_STUB) 打印模块函数清单+param0/next(确认创建上下文)
3. translate 返回后、dump 前 mb.check_alive_blocks(mark1)(抓 translate
   期间写穿破坏的块 header/canary,rc=6 定位越界写穿文件)
2026-08-18 08:17:54 +08:00
TermiNexus e1b05fe1c6 fix(gen): If 分支嵌套控制流全 return 补 unreachable,修复 atan2 误判流程掉出末尾
- 嵌套 If(全分支 return)翻译后 builder 停在嵌套 merge 块(无 terminator),外层 If 分支 terminated 判定误判为未终止 → 补 br merge → 顶层 _ctrl_merge_reachable 误置 1 → 函数末句 If 全 return 被判 merge 可达,fail-fast '流程掉出函数末尾'(vipermath.vp atan2 根因)
- 分支翻译前重置 _ctrl_merge_reachable=1 防残留值污染
- 分支末尾未 terminated 且 _ctrl_merge_reachable==0(嵌套控制流全 return)时补 build_unreachable 而非 br merge,保持结构性不可达语义
2026-08-17 18:43:39 +08:00
TermiNexus 51ae18a160 fix(gen): 编译器生成方法 __before_init__ 跨模块调用放行,修复找不到模块 SHA1
- _tc_h6_method_dispatch 增加 hit_box 命中标记:_translate_method_call 返回 None(void 语义)不再被误判未命中,translate_call 不再把对象名当模块名查 SHA1
- AnnotClassName 回退分支新增编译器特殊方法放行:结构体未注册 + 模块 SHA1 不可查(Phase A 依赖未就绪)时,__before_init__/__init__ 由 _special_method_ret_ty 固定返回类型,走 _translate_method_call 处理并标记 _deps_pending 下遍重试
- ExprCallHandle._tc_h6_method_dispatch 委托透传 hit_box,对齐 c.Asm/c.LLVMIR hit_box 修复(2f3320f)
2026-08-17 18:19:15 +08:00
TermiNexus 2f3320ffde fix(gen): c.Asm/c.LLVMIR void 调用 hit_box 命中标记,修复 StringTest 编译报 Asm 外部函数未登记
拆分后 _tc_h2_c_special 以 None 表示未命中,但 translate_c_asm/
translate_c_llvmir 对 void(无输出)asm 返回 None 表示已处理无返回值,
两者混淆导致 translate_call 继续走外部函数路径 → WARN 外部函数返回
类型未登记 Asm/AsmInp + t.ASM_DESCR 被当 CDefine 常量赋值 FATAL。
新增 hit_box(t.CPtr,[0]=1)区分命中,Asm/LLVMIR 分支置位,
translate_call 命中且返回 None 时视为已处理直接返回。
2026-08-17 12:43:49 +08:00
TermiNexus 0a98890d5b fix(handles): HandlesExprCall 补回 set_global_gen 与 12 个顶层常量
拆分脚本 del 逻辑未过滤分组,误删了保留的 set_global_gen 与
顶层常量(_CEXPORT_MAX/ASM_*/LLVMIR_*/MAX_*/GLOBAL_*)→ 链接报
undefined symbol: {sha1}.set_global_gen。已补回,全 App 语法验证通过。
2026-08-17 08:32:54 +08:00
TermiNexus 285f4c25e2 fix(handles): ExprCallHandle 类方法裸调用补模块前缀(translate_call/printf/print)
拆分后主文件保留的 ExprCallHandle.HandleCall/HandlePrintfCall/
HandlePrintCall 仍裸调 translate_call/translate_printf_call/
translate_print_call → TPC 报 Undefined function: 'translate_call'。
改为 ExprCallCall. 前缀并补 import;ExprGenName.find_func_in_module
裸调用同步补 ExprCallBase. 前缀。全 App 裸调用扫描清零。
2026-08-17 08:27:07 +08:00
TermiNexus c62ce0797d refactor(handles): HandlesFor 拆 ForHandleBase/ForHandleIter(1600→448 行)
类方法拆 Mixin:
- ForHandleBase(HandlesBase.Mixin):__init__ + 公共工具
  (_extract_tuple_names/_seq_kind/_build_seq_loop)
- ForHandleIter(ForHandleBase):8 个 _handle_* 迭代 helper
- ForHandle(ForHandleBase, ForHandleIter):保留 Handle 主分派 + 常量/
  _g_gen/NewForHandle 委托;self 调用按 1 级父类解析(Handle→Iter、
  Iter→Base 均直接父类)
StmtGenCifMixin 仍以 HandlesFor.ForHandle 实例化/引用,类名不变
2026-08-17 08:14:04 +08:00
TermiNexus 2cb974ae5a refactor(handles): HandlesExprCall 拆 6 组(Base/Deref/Ctor/Call/Table/Handle,2041→241 行)
直接移动+改调用方:~100 个委托函数按功能移至 6 个子模块,主文件
保留 _g_gen/set_global_gen/顶层常量/4 个类(AsmOperand、FuncEntry、
FuncDefaultsEntry、ExprCallHandle——CallGenLeafKit/HandlesTranslator
仍以 HandlesExprCall.类名 引用)。
- 子模块函数体内 _g_gen/常量/类裸引用 → HandlesExprCall.xxx 跨模块访问
- 28 个调用方 HandlesExprCall.func( → 子模块前缀并补 import
- 全 App 语法/引用/import 验证通过
2026-08-17 08:10:55 +08:00
TermiNexus 278893d203 refactor(core): StubMerger 拆 5 组(Collect/Store/Topo/IR/Build,2391→72 行)
直接移动+改调用方模式:35 个函数按功能移至 5 个子模块,主文件
仅保留常量与全局变量(main.vp 仍直接赋值 StubMerger._mbuddy)。
- 子模块函数体内裸调用映射为子模块前缀,全局变量经 StubMerger._xxx 跨模块访问
- 12 个调用方文件 StubMerger.func( → 对应子模块前缀并补 import
- 全 App 语法/引用/import 验证通过
2026-08-17 08:03:40 +08:00
TermiNexus ebfc74063f fix(handles): HandlesExpr._lookup_cross_module_cdefine 委托补 depth/node 参数
ExprGenName 等调用传 6 参(pool, name, from_imports, imported_modules,
depth, node),委托只定义 4 参 → TPC 报 '传入了 6 个参数,但函数只
需要 4 个参数'。补齐 depth=0/node=None 默认参数并透传,与
ExprGenCdef._lookup_cross_module_cdefine 方法签名对齐。
2026-08-17 07:42:49 +08:00
TermiNexus 50db55fd08 fix(handles): HandlesClassDef 6 个 _is_* 委托补 trans 参数
ClassGenDef 调用 _is_enum_class/_is_union_class/_is_renum_class(cd, trans)
传 2 参,但委托定义只有 1 参(cd)→ TPC 报 '传入了 2 个参数,但函数
只需要 1 个参数'。统一补齐 _is_cenum_base/_is_enum_class/_is_cunion_base/
_is_union_class/_is_crenum_base/_is_renum_class 的 trans 默认参数并透传。
2026-08-17 07:38:09 +08:00
TermiNexus 54fa8b46c8 refactor(gen): ExprGenMixin 拆 8 组(Base/Const/Fstr/Ops/Cdef/Name/Attr/Cls,6203→129 行)
- ExprGenMixin 保留 translate_value,其余 74 方法按功能拆至 8 个子 Mixin
- 子 Mixin 均 1 级继承 ExprGenBase(TPV self 调用仅支持 1 级父类)
- 跨 Mixin 调用转 HandlesExpr 模块级委托(_g_gen 单例 cast)
- HandlesExpr 补 15 个委托:f-string 组 7 个、docstring 组 4 个、
  Cdef/Attr 各 1 个、Ops 组 translate_binop/_binop_to_dunder/_unaryop_to_dunder
- Generator 继承链加入 8 个 ExprGen 子 Mixin
- 全部 Gen/ 文件均 ≤1500 行,500~1500 行/文件架构重构完成
2026-08-17 07:32:56 +08:00
TermiNexus 47ac2dd57c refactor(gen): ClassGenMixin 拆 5 组(Base/Enum/Generic/VTable/Def,4768→空壳) 2026-08-17 07:23:40 +08:00
TermiNexus 81d4ff3ac4 refactor(gen): TypeGenMixin 拆 5 组(Base/CDef/CType/Resolve/Err,2643→44 行) 2026-08-17 07:21:00 +08:00
TermiNexus 65cf71ff7e refactor(gen): FuncGenMixin 拆 Base/Def(2683→1178 行),补 5 个跨 Mixin 委托 2026-08-17 07:17:03 +08:00
TermiNexus 9f19bb3666 refactor(gen): CallGenMixin 阶段 C 拆 translate_call 检测段(Dispatch 6 helper)+ 辅助方法(Lib),顶层降至 1119 行 2026-08-17 06:59:14 +08:00
TermiNexus 38e32fdeb1 fix(gen): 修复 HandlesExprCall 委托签名缺参数(_infer_generic_ctor_type_arg/_LookupMethodRetTyFromTextLL) 2026-08-17 06:38:00 +08:00
TermiNexus 1718738a19 refactor(gen): CallGenMixin 阶段 B 拆出 6 组(Ctor/Call/Prop/Fd/Vt/Va),顶层剩 translate_call 中枢 2026-08-17 06:34:33 +08:00
TermiNexus 8d9ff96f61 refactor(gen): 修复 CallGen 拆分后 undefined symbol(顶层改 1 级继承 + 跨 Mixin 走 HandlesExprCall 委托) 2026-08-17 06:17:15 +08:00
TermiNexus 996f08fb46 fix(core): 末句控制流 merge 可达性存 trans 字段(追加90)
控制流翻译器(If/While/For/Match)记录 merge 可达性到 trans._ctrl_merge_reachable;
FuncGenMixin/ClassGenMixin 仅在全分支 return(结构性不可达)时生成 unreachable,
可达则正常收尾(ConstZero/fail-fast)。修复 llc O2 优化 br-to-unreachable 为
fall-through 导致 check 类函数 PASS+FAIL 双分支执行 + int3 崩溃(FuncTest)。
2026-08-17 05:46:47 +08:00
TermiNexus 593332636f 全部整理上传 2026-08-17 04:27:29 +08:00
TermiNexus 0a0e6d3bab perf(diag): OOM 二分定位诊断 + 主池提升 1.5GB
BuildPipeline/Phase2/StmtGenMixin/HandlesAnnAssign 增加 [MEM] 限频打印
(parse/translate 前后、Phase A 前后、stmt 行级、AnnAssign 入口),
定位 NewAstTest 翻译内存暴涨起点;主池 1.5GB(2^30+2^29 二进制分解),
给单文件峰值与 Phase A 高并发翻译留足余量。
2026-08-15 00:15:59 +08:00
TermiNexus f9878e5a63 fix(core): 跨模块 CDefine 查找缓存 perm_pool + list 内置方法识别
1. _lookup_cross_module_cdefine:lookup_from_import 返回非 NUL 结尾内部指针,
   base_mod 未截断导致 rc_full_mod 每层累积整个 from_imports + ".base"
   (dump:ast.base.base.base 无限递归根因)。入口截断模块名 + 缓存查询/写入
   key 统一用 base_mod;结果缓存到 perm_pool(XmodCdef 表)跨文件复用,
   CONST_INT 递归查找只做一次。
2. translate_call:obj.method 检测将 list[AST|CPtr] 特化 struct 误当普通结构体,
   查 append 返回类型(函数/text.ll/vpi 均未命中)fail-fast。新增
   _is_list_builtin_method 识别 list 内置方法,在 Ptr(Struct)/Ptr(Ptr)/
   AnnotClassName 三条路径跳过,落到 list 内置分支。
3. HandlesType 新增 register/lookup_xmod_cdefine 模块级委托(Mixin 隔离)。
2026-08-15 00:15:43 +08:00
TermiNexus 8d5dbeab89 feat: 引入 CompilerFactory 永久内存池,1a 每文件 reset 解 NewAstTest OOM
main 创建 512MB perm_pool(MemBuddy 第二实例,永不 reset)并注册
CompilerFactory 工厂(对齐 TPC Translator 装配模式,memhub 保持通用)。
各 Gen Mixin 跨 mark 持久表(struct/枚举/Renum/spec/vtable/全局函数/
闭包/函数指针/Cexport/Reexport/TraceFrames/Doc)全部迁移到 perm_pool,
替代 stdlib.malloc 深拷贝提升速度。

Phase1 1a 主循环(98 includes 全量 parse AST 驻留主 pool → 1GB 耗尽)
改为:StdlibAlloc=1 注册数据进 perm_pool + 每文件翻译完 reset_to(文件级
mark) 回收 AST;1b-pre vpi 预生成循环同样 reset_to(mark1)。同步修 7 处
reset 后悬空隐患:StructTable 表体、add_field DefaultVal、Renum 变体/
别名表内容、vtable full_names 内容、FuncptrRets 深拷贝。

CompilerFactory 类名与模块名同名(合法场景,TPC 已支持模块别名优先)。
2026-08-14 04:02:36 +08:00
TermiNexus c27a1ba347 fix(gen): lambda 捕获 str 指针偏移 + 表达式接收者等五组回归修复
- lambda 捕获 cap_slot 改 cap_names + ci*64:TPV 将 (str)(整数) 编译为 itoa,define_var 键名变数字串,lambda body lookup 穿透父函数作用域产生跨函数误读
- StructGenMixin 递归解 Ptr 到 Struct / CallGenMixin self coerce + 表达式接收者方法调用:修 sub Vec3**、ld.lld undefined dot/cross
- TranslatorGenMixin/HandlesAnnAssign 跳过 CTypedef 全局符号:修 duplicate float64_t
- ClassGenMixin 枚举/联合/REnum 基类别名经 lookup_from_import_original 解析:修 Color.Green NameError
- 重载路径 1 对 Ptr(Ptr(Struct)) 先 load 对象指针:修 MultiInheritTest self 误读
- TypeGenMixin 泛型 T 先 resolve_generic_type_name:修 NoVTableTest T 未注册
2026-08-13 19:10:50 +08:00
TermiNexus a0edc3d961 fix(gen): 泛型 type_params 生命周期与无注解赋值 annot 推断
- ClassGenMixin: list[str](pool, 8) elem_size 修正(原 4 致 Pair[T1,T2]
  重叠写),新增 GenericClassTpParams stdlib 深拷贝表,特化统一取深拷贝
- Generator: 初始化 GenericClassTpParams 防 0xBEBEBEBEBEBEBEBE
- TypeGenMixin: 泛型上下文栈式管理,支持嵌套特化
- CallGenMixin: sz_builtin 补 double/float/char,修复 T.__sizeof__ NameError
- StubMerger: _CommentOutGlobalInBuf 循环注释同名全局,修复 @_mbuddy 重复定义
- HandlesAssign: 无注解赋值按 RHS 推断 AnnotClassName(类实例化/源变量/
  运算符重载/字段注解/方法返回注解 vpi),修复联合类型 Ptr(i8) 属性访问失败
2026-08-13 17:31:54 +08:00
TermiNexus 07e1efeb82 fix(gen): 移除 vtable 临时诊断代码并扩容 MAX_FUNCS 256→1024
1) 移除 _generate_vtable 中临时诊断块(含 self.find_func_global 调用),
   该调用被当成 ClassGenMixin 类方法 mangling 导致 bootstrap 链接失败
   (undefined symbol: ClassGenMixin.find_func_global)。
2) MAX_FUNCS 256→1024:VpiReader 注入依赖 declare(~102)+ 大模块方法
   (stmts 162 个)累积使函数表恰好溢出,ImportFrom.dump 等第 257 个
   注册静默失败 → vtable 缺实现误杀。同步 7 处(HandlesTranslator/
   TranslatorGenMixin 常量 + ClassGenMixin/FuncGenMixin/VpiReader 硬编码)。
2026-08-13 06:54:40 +08:00
TermiNexus ad2b97a140 perf(reachable): 移除 _list/_dict/json 无条件预加入,按需编译
_BuildReachableSha1Set 原本无条件把 _list/_dict/json 塞进可达集,
导致未使用的 App 也整链编译(json/__init__ → __parser/__writer)。
_list/_dict 已由 Phase A _inject_auto_container_visibility 按需注入,
现补充 []/{} 字面量检测防漏;json 由 _dict 真实 import 链带入。
builtins 保留始终纳入(设计意图)。
2026-08-13 03:27:31 +08:00
TermiNexus 64195f183e feat(type): 支持字符串 CDefine(如 ZLIB_VERSION = "1.3.2")
- TypeGenMixin 新增 CDefineStrFlags/CDefineIsStr 字段与
  register_cdefine_string/lookup_cdefine_string/is_cdefine_str 方法
- AssignGenMixin._register_cdefine_from_value 新增 CONST_STR 分支
- ExprGenMixin.translate_name_value CDefine 本地/跨模块均支持字符串
- Generator.InitGen / HandlesType 委托同步初始化新字段
2026-08-13 02:58:15 +08:00
TermiNexus 9d3483e97e refactor: 全面 fail-fast 化(去兜底)+ 泛型补译/解引用宽度修复
- 全量降级点改 fail-fast:23 文件约 140+ 处静默 i32/i8*/void/continue 兜底改为 HandlesType.fatal_error(python traceback 风格)或 VLogger.error 终止,暴露上游根因;保留语言语义默认(无注解 i32/infer 链/CIf/star 回退)
- 泛型特化 Phase B 补译 reemit 强制发射方法体(修复 list[...] define 缺失)
- c.Deref 读取宽度仅按赋值直接 RHS 推断(修复 CurAssignAnnot 残留误判 i32)
- 类型别名清理:t.CChar|t.CPtr→str、t.CInt→int 等
2026-08-13 02:11:49 +08:00
TermiNexus 98ddf7977e refactor(handles): BuildPipeline/HandlesAnnAssign 深层短路合并
- BuildPipeline _CollectObjFilesImpl: .obj 判断与容量检查合并短路
- HandlesAnnAssign: 泛型特化 spec_name 提取降层(9→7)
- 行为语义保持不变
2026-08-12 21:15:16 +08:00
TermiNexus ea5b17f5fd refactor: 深度 if 守卫化重构(guard continue + 短路合并)
- HandlesAssign/Return/Match、StubMerger、Phase2、Gen/*Mixin、StubGen/* 手写 None 检查链改守卫/短路,全局最深 14→12、>=10 层 26→19
- StubMerger define→declare 剥 linkonce_odr 等 linkage(修复 VectorGenericTest invalid linkage)
- CallGenMixin len() 数组常量长度分支(对齐 TPC _HandleLenLlvm)
- print 参数翻译失败 (null) 兜底改 fail-fast
- 临时诊断日志与死代码(sub_vk)清理
2026-08-12 21:13:25 +08:00
TermiNexus b232c9266c fix(gen): 裸名 CArray 类字段解析 + 跨模块函数返回类型 vpi 解析
- TypeGenMixin/HandlesAnnAssign: 支持 from t import * 后裸名 CArray[...]
  (单参→Ptr(elem),双参→Array),修复 T4K3 类字段 CArray[str]=[...]
  退化为 list[str] 动态构造 → list[str] 特化/append/_mbuddy 链接 undefined
- CallGenMixin: 跨模块函数调用返回类型按 vpi stub 注解解析
  (tuple[T1,T2]→{T1,T2}),修复 b2a_hqx tuple 解包失效
2026-08-12 19:12:45 +08:00
TermiNexus 304bece6fa feat(TPV): CArray 形参衰减/tuple 多返回/dict 迭代/ASan 模式等
- CArray 形参按 C 语义衰减为元素指针(FuncGenMixin/ClassGenMixin/VpiReader 多处)
- 跨模块调用 found_func=None 时数组实参衰减,修复 md5.final 实参 [16 x i8]* 与
  定义 i8* 类型不匹配
- VpiReader 返回注解支持 tuple[T1,T2] -> 匿名结构体(b2a_hqx -> {i8*,i16})
- 变参 i8/i16 提升按无符号性 zext/sext(print_hex %02x 不再 ffffff 前缀)
- dict 容器可见性/迭代、c.Deref 赋值注解宽度推断、错误定位日志
- HandlesExprCall._check_and_promote_variadic_call 委托同步 9 参
- BuildPipeline/main 支持 --asan 模式(opt -passes=asan + -fsanitize=address)
2026-08-12 18:17:52 +08:00
TermiNexus 4fd331dc08 fix(gen): 类字段单参CArray静态数组推断+列表默认值深拷贝;G3泛型循环防护与before_init去重;f-string/ctraits支持 2026-08-12 01:27:13 +08:00
TermiNexus a649e4807d fix: 泛型返回类型短路/数组迭代/非工作区崩溃
- CallGenMixin: 本模块 mangled 调用从当前 IR 取返回类型, 不查自己的 text.ll(未生成误告警)
- HandlesFor: Ptr([N x T]) 数组退化指针 load 后走数组迭代
- Config: 配置字段默认 None/0, 避免垃圾指针通过 is not None 检查
- main: 无 project 配置且无 --src 时 fail-fast 退出(非工作区崩溃)
2026-08-11 23:14:27 +08:00
TermiNexus 244c8efc96 feat(for): list 容器迭代与 enumerate/zip 多变量迭代
- HandlesFor: for v in lst 按 __count__+__data__ 动态长度迭代; 统一序列循环(RANGE/STR/LIST); cast 链属性访问改中间变量(避免字段偏移推断错误)
- ExprGenMixin: 跨模块 CDefine 完整修复——vpi 仅声明无值回退源文件、includes 双前缀路径、浮点值 atof 解析+double 缓存+ConstFloat 返回
2026-08-11 22:10:01 +08:00
TermiNexus 48d9fbab4c fix(gen): nonlocal 跨层共享与链堆预建修复(ClosureTest2 12/12 通过)
- 嵌套函数独立 nonlocal 缓冲,防共享缓冲 [0] 槽覆盖(Test 7 根因),
  translate_nested_function_def 三处退出点补齐缓冲恢复
- _prepare_chain_nonlocals 去掉模块全局 found_g 跳过:建堆+store 每次
  照发,映射变量仅首次 add(去重),修复跨测试函数残留堆地址致 env 读错堆
- 新增 trans._nl_chain_done 每函数标志(translate_function_def 入口重置),
  多嵌套函数定义共享同一堆,防重复 malloc + 二次重定向 VarEntry
- nonlocal 属性/下标优先走 env 读堆值(对象即指针,Struct/Array 不 load),
  新增 _nonlocal_subscript_ptr 经 env 读堆地址后 GEP
- _type_byte_size 按类型字节数分配 nonlocal 共享堆(数组 16 字节防越界)
2026-08-11 17:30:01 +08:00
TermiNexus c472ea9798 feat(gen): 支持 lambda 与 nonlocal 运行时 env 链式共享
- translate_lambda 提升 __lambda_{id}(i8* env, args...) + 捕获变量堆存储
- _lambda_scan_body 递归收集捕获变量;HandlesAssign 注册 lambda 闭包名
- translate_closure_call 支持带参(实参链表 + 函数类型 i32(i8*, args...)*)
- 嵌套函数参数支持(提升函数签名 + 参数 alloca)
- nonlocal 改为运行时 env 链式共享:父函数局部新建堆+重定向 VarEntry;
  父函数中为 nonlocal 时从父函数 env 读堆地址(_load_raw_var_ptr)
- 全局数组 initializer 按声明长度补齐补零
- LambdaCount 计数器迁移到 trans._lambda_count(修复 TPC 编译崩溃)
2026-08-11 16:10:05 +08:00
TermiNexus 120a2d7ad7 fix(Phase2): Phase A 多遍重试修复同项目依赖翻译顺序
main.vp 先于其 import 的 mbuddytest.vp 翻译(文件系统顺序),跨模块函数返回类型精确解析因依赖 text.ll 未生成而 fail-fast。新增 Translator._deps_pending + text.ll 存在性探测区分依赖未翻译/真错误,Phase A 循环改多遍,依赖就绪后下遍重译命中。
2026-08-11 01:33:52 +08:00
TermiNexus 45ba3a4b5a fix(gen): TPV isinstance 运行链路修复(构造 vtable 槽/this_adjust/虚分派/NoVTable)
- 构造展开跳过 __vtable__ 字段,修复 Dog("dog") 覆盖 vtable 导致 isinstance 全失败
- this_adjust 改字节偏移法(delta=子类偏移-父类偏移),覆盖 vtable 父类
- _do_virtual_call 新增 vtable_base:读 vtable 用对象头,调用用调整后 self
- NoVTable 类无参构造分配内存而非返回 ConstZero
- ClassGenMixin:类体 CDefine 兜底注册 + vtable linkage 默认 external
2026-08-10 21:15:43 +08:00
TermiNexus 6677da99f7 refactor(gen): P6 方法化 - StmtGen/AssignGen/VarGen/ImportsGen/TranslatorGen Mixin
5 个新 Mixin(92 方法)承接 HandlesBody/If/While/For/Return/Nonlocal/Match/Enum/AnnAssign/AugAssign/Var/Imports/Translator/Main 的无状态函数与 _g_ 全局;15 个 Handles 模块改为一行委托(调用方零改动);Generator 组合扩展至 12 Mixin,__init__ 初始化 8 个新字段;BuildPipeline/main 注入 14 个模块 set_global_gen;修复 ImportsGenMixin 与 TypeGenMixin 的 CurrentFile 重复字段冲突(改 HandlesType 委托,延迟 import 规避循环依赖)。
2026-08-10 18:42:07 +08:00
TermiNexus 451be82b32 fix(gen): 清理 ASan 二分调试检查 + StdlibAlloc 跨 Mixin 委托 + 调试链修复
1. 移除 ClassGenMixin 泛型判断前/模板注册后与 Phase1 五处 gen 完整性二分检查(GlobalFuncs 调试残留,Mixin 方法体访问非自身字段违反块内索引约束)。2. ClassGenMixin._register_struct 读 self.StdlibAlloc(StructGenMixin 字段)改经 HandlesStruct.get_stdlib_alloc 委托,新增 StructGenMixin.get_stdlib_alloc。3. 含 P5 后累积修复(VpiReader ParamCount/越界封堵等)。
2026-08-10 18:09:23 +08:00
TermiNexus ba3f22702e refactor(gen): P5 对象化迁移完成 - FuncGenMixin/ClassGenMixin 全量迁移+委托层; 泛型模板表迁入 gen 字段; stub 方法 ParamCount 不含 self(修复跨模块方法调用默认参数填充错位); 默认参数快照失败 fail-fast(防悬空 AST UAF); HandlesMatch 改委托 gen._lookup_renum_variant 2026-08-10 06:24:50 +08:00
TermiNexus 0e4f00baf4 refactor(gen): P4 CallGenMixin - HandlesExprCall 86 函数迁移 + 委托层
HandlesExprCall(7043 行, 本仓库最大文件)全部模块级函数迁移为
CallGenMixin 方法(含 translate_call 1408 行整体迁移),全局表
(cexport/LLVMIR 序号/temp_dir/闭包/funcptr/全局函数表/默认参数表)
迁入 gen 字段;旧函数保留为 _g_gen 单例委托,4 类保留。Generator
多继承追加 CallGenMixin(现为 5 Mixin 组合)。

修复 P4 迁移引入的两处缺陷:
1. HandlesTranslator 引用已删除的 HandlesExprCall._g_temp_dir → None
   导致跨模块 .vpi 注入全局失效(json 翻译崩溃),改用
   HandlesType.get_temp_dir()
2. Generator 50 字段突破 FIELD_MAX=48 硬上限导致字段截断丢失,
   字段槽位上限提升至 64(HandlesStruct/StructGenMixin/HandlesClassDef)
2026-08-10 03:31:10 +08:00
TermiNexus 24c1aada30 refactor(gen): P3 ExprGenMixin - HandlesExpr/ExprOps 51 函数迁移 + 委托层
HandlesExpr 45 个表达式函数(translate_value/subscript/attribute 等)
与 HandlesExprOps 6 个运算符函数(try_operator_overload/translate_binop
等)迁移为 ExprGenMixin 方法;本模块调用 self 化、外部模块调用保留
前缀,_lookup_cross_module_cdefine(490 行)完整迁移。旧函数保留为
_g_gen 单例委托。Generator 多继承追加 ExprGenMixin(4 Mixin 组合)。
2026-08-10 02:11:26 +08:00
TermiNexus 34a37358c9 refactor(gen): P2-2 StructGenMixin - HandlesStruct 53 函数迁移 + 委托层
HandlesStruct 全局注册表/可见性状态迁入 StructGenMixin 字段,
53 个结构体注册/查找/字段函数迁移为方法(register_struct/find_struct/
lookup_field/get_mro_chain 等);旧函数保留为本地 _g_gen 单例委托。
Generator 多继承追加 StructGenMixin(现为 3 Mixin 组合)。
2026-08-10 01:55:15 +08:00
TermiNexus e1ef67d013 refactor(gen): P2 TypeGenMixin 迁移 + 全局单例委托机制
Generator 改 @t.NoVTable 多继承(BaseGenMixin + TypeGenMixin)组合;
HandlesType 54 个类型函数迁移为 TypeGenMixin 方法(全局状态迁入
gen 字段),旧函数保留为委托层。单例经 HandlesType 模块级 _g_gen
注入(BuildPipeline/main),避免 TPC 包短名未注册与 Generator
类/模块名歧义导致的编译链接问题。bootstrap 38/38 通过。
2026-08-10 01:46:28 +08:00
TermiNexus b3170ba823 feat(handles): Viper 多继承支持 M1-M4 - 父类数组+MRO/字段展平/vtable合并/this调整
HandlesStruct: StructEntry 增加 ParentNames/ParentCount + get_mro_chain
(深度优先+声明顺序+去重, 含自身, mro[0]=自身)
HandlesClassDef: 多父字段展平去重 + vtable 合并(方法短名去重+探测实际定义类)
+ 继承链统一 vtable 判定 + 无字段类(接口/标记类)支持 + 空 struct 跳过 zeroinitializer
HandlesExprCall: 方法调用沿 MRO 回退 + 继承方法 this 调整(GEP 定位+bitcast 成父类指针)
HandlesExprOps: 运算符重载 MRO 链查找
2026-08-10 00:28:58 +08:00