Commit Graph
34 Commits
Author SHA1 Message Date
TermiNexus ab0f37e1a8 更新,可自举 2026-08-27 09:48:20 +08:00
TermiNexus bd3705d68b feat(tpv): --build-dir 命令行覆盖 project.vpj 的 build_dir
新增 --build-dir 参数:在 Config.resolve_paths 前覆盖 BuildDir,相对路径仍基于 project_dir 解析(_join_path),绝对路径(/ 或 \\ 开头)原样保留。用于隔离构建目录验证(如 --build-dir ./tpv_build2 避免陈旧缓存干扰)。
2026-08-25 18:07:55 +08:00
TermiNexus 347998664e fix(tpv): phase2command 模式 Phase C 不再因 .obj 缺失中止——链接命令正确写入 bat - 根因:phase2command 模式下 llc 未执行(命令写入 bat),Phase C 的'可达模块 .obj 存在性检查'对所有实现模块触发 VLogger.error→sys.exit(1),进程在调用 link_objs_to_exe 之前终止,clang 链接命令永远写不进 bat - 修复:Phase C 可达收集在 _phase2_cmd_path 非空时跳过缺失报错,并把可达 includes .obj 路径照常加入 final_obj_paths(bat 手工执行后即存在),保证链接命令完整 - 附带:--run 在 phase2command 模式下跳过(exe 尚未链接,多文件+单文件两处);BuildPipeline._phase2_write_cmd 补 global _phase2_bat_init,避免每次调用重复写 header 2026-08-23 15:52:15 +08:00
TermiNexus a12dcafed2 fix(tpv): 泛型类型参数 SHA1 规范化 + 自举链接修复
- 类型参数统一 "{定义模块SHA1}.{Class}"(ast.AST/AST → f467978339422f32.AST),
  消除跨模块特化名分裂导致的 undefined symbol(list[AST|t.CPtr].set 根因)
- TypeGenResolve 新增 _norm_type_arg_name/_is_sha1_prefixed/_concat_sha1_class;
  resolve_annotation_type 兼容 "{16hex}.Class" Attribute 形态(跳过
  imported_modules 检查,优先完整名命中定义侧 struct)
- CallGenCtor._extract_type_args_from_slice / extract_class_name_from_annotation
  新增 from_imports 参数,8 处调用方传 trans._from_imports 保持注册/查找一致
- 修复模块级函数链式调用推断(get_perm_pool() 联合返回 → .alloc() 裸名 alloc)
- 跨模块方法 declare self 改为类指针 %"sha1.Class"*,调用侧按形参 coerce bitcast
- 撤销泛型特化双 SHA1 前缀,恢复单前缀(模板 SHA1)
- 新增 --phase2command xxx.bat:不执行 llc/链接,命令写入 bat
2026-08-23 12:00:04 +08:00
TermiNexus a6e28c71f5 将部分 while 简化为 for 2026-08-23 00:21:17 +08:00
TermiNexus 748eda9c69 修正 Stub 的 define 导入 2026-08-22 10:36:05 +08:00
TermiNexus 24dfe6ea3b 修正 main 的 import 2026-08-22 02:36:14 +08:00
TermiNexus d0736b4978 修正了目录 2026-08-22 02:07:49 +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 ca1453c0ec refactor(tpv): set_asan_mode 移除改直接赋 _asan_mode bool;ClassGenEnum 加 Renum 字段 0xb0 崩溃定位临时诊断(定位后移除) 2026-08-21 01:37:51 +08:00
TermiNexus 9f396f4874 refactor(gen): 完成 P6 机械化迁移——Handler 类并入 Gen Mixin,语句实现单层化
- 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)待编译器缺陷修复后删
2026-08-20 06:40:37 +08:00
TermiNexus e07ea491a5 chore(gen): 全量备份——Handles 委托壳瘦身与单例注入统一
- 删除 Handles 各模块已迁移至 Gen 的旧函数体,保留一行委托壳(25 文件 -798 行)
- main.vp / BuildPipeline.vp 全局单例注入改为 _g_gen 直接赋值
- 机械化迁移测试前的基线备份
2026-08-20 05:33:59 +08:00
TermiNexus 9f44abe645 重新完整提交碎片 2026-08-17 11:23:55 +08:00
TermiNexus f5c4be3995 refactor(core): Phase1 拆 3 组(Scan/Topo/Main,1801→46 行)
直接移动+改调用方:7 个函数按功能移至 3 个子模块,主文件仅保留
常量/_mbuddy。
- 子模块函数体内裸调用映射子模块前缀,全局符号经 Phase1._xxx 访问
- 调用方 main.vp 的 Phase1.func( → 子模块前缀并补 import
- 全 App 语法/引用/import 验证通过
2026-08-17 08:14:45 +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 ef979d4435 feat(cli): 修复 --nowarn-register 未生效(argparse dest 破折号 key)
argparse 的 dest 保留短横线(--nowarn-register → nowarn-register),
main.vp 误用下划线 key 读取导致开关永不置位、Phase A 依赖类 WARN
照打。改为破折号 key,并同步更新帮助文案覆盖依赖未就绪重试。
2026-08-17 05:46:54 +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 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 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 1c7e8c2056 fix(build): ASan includes 缓存独立目录隔离
- Config: get_includes_binary_dir 支持可配置后缀(_inc_bin_suffix)
- main: --asan 用 .binary_asan 独立缓存并清理,非 asan 复位 .binary
- 修复 asan 插桩 obj 与非 asan obj 混链 → __asan_init undefined reference
2026-08-12 19:12:52 +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 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 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 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 60493d6ae5 fix(compiler): 支持多 includes 目录,修复 G4 g4node 未注册 SHA1
- Config.vp 解析 includes 数组全部元素为空格分隔 IncludesDirs(首元素仍存 IncludesDir 兼容单目录)

- IncludesScanner 逐目录递归扫描合并,FileEntry.IncDir 记录所属 includes 根目录

- StubMerger 存储新增 IncDir 并行数组(MAX_INC_DIR_LEN=512),容量 256→1024

- Phase2 预注册/3.5 按需编译改用逐条目 IncDir 拼接源路径(空串回退 includes_dir)

- HandlesImports import 未注册错误显示行内内容 + App 兄弟模块文件豁免

- 新增 TransPyV 自身 project.vpj
2026-08-08 10:31:44 +08:00
TermiNexus a6510bbf31 chore(core): 注释掉 main.vp 的 hashlib._mbuddy 注入 2026-08-07 22:36:28 +08:00
TermiNexus a3b9bdc409 修正了逻辑,使 TPV 可以编译 Test,但自举还有一段距离 2026-08-03 02:01:20 +08:00
TermiNexus bfb55d68f4 取消了 i8* == i8* 实际使用 strcmp 的规则,修复了诸多 Bug 2026-07-30 21:56:19 +08:00
TermiNexus d227bee139 将 .py 和 .pyi 后缀名改为了 .vp 和 .vpi 后缀名 2026-07-30 16:34:50 +08:00