Commit Graph
35 Commits
Author SHA1 Message Date
TermiNexus b7eeb504ee fix(tpv): 空类 FieldCount=0 中和重建 + 移除 [ATTR]/[DET] 调试打印
1) WIN32_FIND_DATAA 等空类(FieldCount=0)字段访问:模块限定路径补 FC==0 容忍(返回 None 交 pending,对齐裸名路径);ClassGenDef 空类不再 pending 延迟(多遍死锁),改为中和旧 entry 走完整注册重建。2) 用户要求移除 [ATTR](FuncGenBase/FuncGenDef)与 [DET](CallGenCtor)无条件调试打印。3) 拓宽 [DBG-REG]/[DBG-ADDF] 过滤器到 WIN32_FIND_DATAA 定位空类注册来源。
2026-08-29 10:44:43 +08:00
TermiNexus 8d0241e0c3 fix(tpv): lookup_field_by_class 模块限定路径补 REnum 变体字段别名回退
llvmlite.LLVMType.Pointee 等模块限定 REnum 字段访问:类命中(FieldCount=4)但变体字段名(_p1/_p2 槽位别名)不是普通字段,此前变体别名回退只在裸名路径,模块限定路径 fatal 先触发永远走不到(CallGenDispatch L1005 根因)。在模块限定路径字段未找到时补 _lookup_renum_field_alias 回退,与裸名路径一致。同时移除已定位完成的 REEXPORT-DBG 临时诊断。
2026-08-29 10:03:10 +08:00
TermiNexus 25363120f8 debug(tpv): 临时诊断定位 ast.Attribute 包重导出失败根因(REEXPORT-DBG) 2026-08-29 09:15:33 +08:00
TermiNexus 0a84ca8db3 debug(tpv): 临时诊断定位 SECURITY_ATTRIBUTES 空类注册来源
- register_struct/add_field 打印 [DBG-EMP](SECURITY_ATTRIBUTES 过滤)
- ClassGenDef 空类报错改为 pending + 打印(定位期间不中断编译)
- 定位后移除
2026-08-29 08:42:26 +08:00
TermiNexus 20ba8e0297 fix(tpv): 字段访问依赖未就绪时标记 _deps_pending 而非 fail-fast
- subprocess.vp sa.nLength 报错根因:SECURITY_ATTRIBUTES 定义侧(win32base)
  未编译时只有 vpi stub 空类(FieldCount=0),lookup_field_by_class 裸名
  回退命中空 stub → 字段未找到 → fatal_error 中断多遍收敛
- lookup_field_by_class:期望 sha1 未匹配且命中 FieldCount==0 空 stub →
  返回 None(不 fatal),交给上层 pending
- get_attribute_ptr 写路径:字段未找到 → 标记 trans._deps_pending=1 下遍
  重译(对齐读路径/AssignGenMixin L1793),真实错误由 Phase A 收敛检查暴露
2026-08-29 07:46:15 +08:00
TermiNexus 4748915472 fix(tpv): 外部函数返回类型不可收敛时 fail-fast,豁免 from-import 与多层模块限定调用
- _infer_external_func_ret_ty 白名单未命中改为 fatal_error(Python 风格
  traceback),移除默认 i32 的 WARN 输出
- 裸名调用 fail-fast 前查 from_imports 可解析性:from-import 函数走
  mangled 精确解析收敛(SSAValue 场景),纯外部 C 函数才 fail-fast
- mod_ret_sha1 解析支持多层模块路径(w32.win32file.CreatePipe 场景),
  避免嵌套模块限定调用被误判为裸名外部函数
- 移除 FuncGenBase/StructGenMixin 遗留调试输出
2026-08-29 05:46:25 +08:00
TermiNexus d99b6268de refactor(tpv): Gen 目录按前缀分组迁移子目录 + REnum.kind() 编译期转 __tag
- Gen/*.vp 按前缀分组迁入 Call/Class/Expr/Func/Stmt/Type 子目录,import 同步更新(BuildPipeline/Generator/StructGenMixin 等)

- CallGenDispatch: REnum.kind() 前置拦截 → bitcast i32* + load(读 __tag),杜绝方法查找兜底误绑 AST.kind(this 偏移语义错误)

- 留根:Assign/Async/Base/Imports/Match/Struct/Translator/Var 单文件前缀 + GenApi/GenTypes/Generator/__init__
2026-08-28 14:16:03 +08:00
TermiNexus b3a4be21d3 feat(tpv): VLogger 迁移 f-string + 模块限定构造 SHA1 解析 + 包重导出别名注册
- VLogger 全面改用栈 f-string 传参,移除 fmtbuffer 静态缓冲(Phase1Scan/Config/Converter/StubMergerStore/StubMergerTopo/ClassGenDef/StmtGenDeclMixin/CallGenCtor 等)

- CallGenMixin: Module.Class(...) 按模块名解析 SHA1 精确命中类(Scene3D 跨模块同名根因);import X as Y 别名三级还原(精确→后缀→LookupModNameByAlias)

- CallGenCtor: lookup_field_by_class 传 kw 节点与 from_imports;REnum 错误 f-string 化;新增 [DET] ctor 入口 can 核对

- StructGenMixin/GenApi/VpiReader: 包重导出类以包 sha1 注册别名 entry(ast.Attribute 归属错位)

- main: 版本号更新、VLogger API(get_logger→init_logger/logger)、新增 --show-args/--build-dir

- TypeGenCType: 移除 CDEF-MISS 调试日志;.gitignore 忽略 output_dbg/
2026-08-28 13:29:26 +08:00
TermiNexus d971bae7cd 移除了 VLogger fmt buffer 缓冲区,使用栈 f-string 2026-08-28 06:01:17 +08:00
TermiNexus 54462320d2 简化了一些表达,最后仍使用 fb 缓冲区的版本(新版本使用 栈f-string) 2026-08-28 04:50:09 +08:00
TermiNexus c542442987 fix(structgen): 裸名回退字段未找到时返回 None 而非 fatal_error,让 REnum 变体别名回退生效
- ce62546 新增的裸名回退分支在类命中但字段未找到时 fatal_error,
  截断了 ExprGenAttr L853-864 的 REnum 变体别名回退(LLVMType.Pointee
  → _p2 槽位是变体别名非普通字段)→ AssignGenMixin.vp:1002
  "类 llvmlite.LLVMType 裸名回退但字段 Pointee 未找到"
- 改为字段未找到 return None,对齐主 SHA1 匹配分支语义,让调用方
  有机会走 REnum 别名/继承链回退
2026-08-27 16:16:03 +08:00
TermiNexus ce62546e90 fix(structgen): lookup_field_by_class 模块归属未命中回退裸名同名类(唯一时),修复 ast.Attribute 归属错位误报
- 场景:ast.Attribute(ast/exprs.vp 定义,ModuleSha1=c0def010dcebadb1)经
  lookup_field_by_class 模块归属解析,模块段 "ast" 走包名回退 → ast/__init__.vp
  的 sha1 (35245c385b0ddd7b)→ find_struct_by_module 不匹配 → 误报
  "类 ast.Attribute 未找到"(AssignGenMixin.is_cdefine_annotation 的 at.attr 触发)
- 修复:模块可解析但类未注册时,统计裸名同名类数量,唯一时回退查找字段
  (Attribute 短名无跨模块同名,安全);多同名仍 fail-fast(防 sched.Thread 顶掉)
2026-08-27 16:10:48 +08:00
TermiNexus a603736f64 修正:直接操作操作跨模块变量(VLogger),避免间接 global 函数 2026-08-27 13:14:39 +08:00
TermiNexus ee6d78bbb1 fix(structgen): lookup_field SHA1 隔离改用 strncmp 前 16 字符比较,消除 stdlib.free 对 pool 子块的 bad-free(ASAN) 2026-08-26 23:58:07 +08:00
TermiNexus cc9112b54a fix(structgen): lookup_field SHA1 隔离临时缓冲改用 stdlib.malloc(lookup_field 无 pool 参数)并补 free 2026-08-26 23:54:22 +08:00
TermiNexus ad1089d9af fix(structgen): lookup_field 名称回退按类型 SHA1 精确隔离,禁止 strstr 裸名跨模块抓同名类(sched.Thread 被 vthreading.Thread 顶掉 → th.arg 索引错成 func(3) → 线程 call 0 #UD) 2026-08-26 23:52:37 +08:00
TermiNexus ec48b315d3 debug(structgen): add_field 打印每字段名+索引,确认 Thread.arg 是否漏注册或字段名悬空 2026-08-26 23:45:13 +08:00
TermiNexus c656cba393 fix(gen): App 短模块名键保留 + find_struct sha1 字面量精确匹配,修复同名类归属错乱
ViperOS 目录含两份同内容 gfx.vp:App 的 Apps/Scene3D/gfx.vp(9aab) 与
VKernel 的 VKernel/.../vesafb/gfx.vp(0ae),都定义 class Scene3D。includes
扫描("../.."=ViperOS)先以全路径模块名注册 9aab,AppendToSha1MapStore 按
sha1 去重吞掉 App 短模块名 "gfx" 键 → LookupSha1ByModName("gfx") 失败 →
后缀匹配劫持到 VKernel gfx(0ae) → Scene3D 类归属 0ae → 返回类型解析查
temp/0a/0ae*.text.ll(不存在)→ Phase A _deps_pending 永不收敛。

- AppendToSha1MapStore:去重改为 sha1 与模块名都相同才跳过,App 短模块名
  键("gfx")保留,import gfx 精确查找可命中
- find_struct:限定名模块段为 16 位 hex(sha1 字面量,如 "9aab.Scene3D")
  时直接按 name+sha1 精确匹配(find_struct_by_module),不再落到裸名回退
- find_struct 第二遍裸名回退加同名唯一性检查:跨模块同名类(VKernel 与
  App 的 Scene3D)存在时返回 None 而非先注册的错误 entry
2026-08-26 17:19:23 +08:00
TermiNexus 00606057c4 fix(gen): 模块别名解析优先别名还原,修复 process 后缀误命中内核模块
import vpsdk.process as process 时,_imported_modules 含别名 "process",
store 同时存在 "vpsdk.process" 与 "VKernel.Kernel.sched.process"(ViperOS
includes 目录扫描含 VKernel)。裸名 "process" 后缀匹配命中先扫描的内核
模块 → 跨模块调用解析到未编译的内核 → 返回类型解析落空 → Phase A
_deps_pending 永不收敛(Scene3D "Phase A 无法完成翻译" 根因)。

- StructGenMixin._resolve_module_sha1:别名还原(LookupModNameByAlias →
  vpsdk.process → 精确 SHA1)提升到裸名后缀匹配之前;裸名后缀仅作兜底
- Phase2 依赖探测:同构修复,别名还原先于后缀匹配,避免依赖缺失诊断
  误报内核 process 缺 text.ll
2026-08-26 16:25:37 +08:00
TermiNexus a6e28c71f5 将部分 while 简化为 for 2026-08-23 00:21:17 +08:00
TermiNexus 89995dffde refactor(gen): 去除 Handles 委托层——链式化 + GenTypes/GenApi 迁移
- Gen 内部 1742 处 HandlesX.func() 改 self.Gen.Y.method() 链式调用
- 数据类/常量迁移 GenTypes.vp(10 类 + CLASS_META_*/META_*/SEQ_KIND_*/FIELD_MAX 等)
- 管线/保留文件经 GenApi.vp 模块级入口(48 函数带类型注解,从 Gen 方法签名自动生成)
- 删除 26 个纯委托 Handles 文件,仅留 5 个实体文件(Base/Translator/Expr/ExprCall/ExprCallTable)
- 修复字段分裂:TypeGenErr CurrentFile/TraceCount 链式化;CallGenBase TempDir/Cexport 真源化
2026-08-21 06:32:40 +08:00
TermiNexus f7f3bbac02 fix(TVP): get_class_name_by_type strstr 回退改后缀匹配,修复链式方法调用类名解析
特化类型名 SHA1.GSList[Param] 被 strstr 子串回退错误命中基础名 GSList → GSList.append 查找失败 → 兄弟 Mixin 兜底误匹配 LinkedNode.append(this 前移 sizeof(LinkedNode)=-48)→ 写穿 GSList 容器前 48 字节 → LLvmLiteTest Test 3 崩溃(function_add_param/function_add_block/block_append_line 链式调用根因)。

后缀匹配(SHA1.ClassName 尾部)比 strstr 子串匹配安全,保留精确匹配路径。
2026-08-20 16:45:27 +08:00
TermiNexus cf6c917e83 fix(gen): 泛型特化类记录触发文件,作废重译正确重置 MethodsEmitted
ld.lld undefined symbol list[ast.ClassDef|t.CPtr].* 根因:Phase A _deps_pending
作废重译时 reset_module_methods_emitted 按当前文件 sha1 精确匹配,特化类
ModuleSha1=模板 sha1(方法名带模板前缀)匹配不到,MethodsEmitted 残留 1
→ 下遍 _specialize_generic_class 补译分支(==0 才补译)跳过 → text.ll 只有
call 无 define → 链接失败。

修复:StructEntry 新增 SpecTriggerSha1(特化类触发文件 sha1),
_specialize_generic_class 全部返回路径经 _record_spec_trigger 记录,
reset_module_methods_emitted 按 ModuleSha1 或 SpecTriggerSha1 匹配重置。
2026-08-20 04:04:40 +08:00
TermiNexus cf9207f171 fix(struct): PARENT_MAX 16→64 修复 Generator 43 父类字段截断
拆分重构使 Generator 父类增至 43 个,PARENT_MAX=16 使 _collect_parents/
set_parent_names 只收前 16 个父类 → StmtGenMixin(#40) 等字段丢失 → 结构体
缺 DiagStmtCount → __init__ 写 self.DiagStmtCount "属性写入失败"。FIELD_MAX
128→256 防字段静默截断;MRO_MAX 16→64 保证父类方法解析可达。两处常量
(HandlesStruct/StructGenMixin)同步提升。
2026-08-19 05:11:51 +08:00
TermiNexus 593332636f 全部整理上传 2026-08-17 04:27:29 +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 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 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 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 b5657b3790 fix(TPV): 属性链按需过滤 + 字段查找回退顺序 + t.CArray 跨模块 CDefine
- ExprGenMixin: 属性链写入/读取按需过滤支持 base 为 Attribute(_resolve_attr_field_class 沿属性链递归字段注解类名回溯,联合类型 X|t.CPtr 简化 i8* 时 bitcast 回真实 struct)

- StructGenMixin: lookup_field_by_class 回退分支先查找字段再报错(原 error 在查找前无条件退出导致跨模块 SHA1 不匹配时永远失败)

- TypeGenMixin: _eval_const_int_expr 增加跨模块 CDefine 查找(t.CArray count 引用依赖模块 CDefine 如 SHA512_BLOCK_LEN)
2026-08-10 23:01:50 +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 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 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