TermiNexus
|
c42ae889d1
|
feat(lsp): Gate 1 文档同步、UTF-16 位置与工作区
- LspPositions:UTF-8 字节列 / UTF-16 code unit 转换,支持 LF/CRLF/emoji
- LspDocuments:didOpen/didChange/didClose/didSave,增量与全量替换,双池复用
- LspWorkspace:file URI 解码、project.vpj 向上查找、source_dir/includes
- LspServer:请求池 mark/reset、textDocumentSync、viper/lspStats 与 viper/lspDocument
- probe --gate1:文档编辑、UTF-16 代理对、10k 次编辑与池稳定性
- 依赖 includes/memhub 的 NewMemBuddy 堆构造工厂(单独提交 fa7591e)
|
2026-10-26 14:23:12 +08:00 |
|
TermiNexus
|
ab562764b4
|
feat(lsp): Gate 0 协议骨架与生命周期
- 新增 lib/lsp:协议常量、stdio framing、JSON-RPC 响应、lifecycle server
- viperc --lsp:独立池、互斥校验、stdout 仅输出协议帧
- 新增 Tools/lsp/probe.py 与 ast_check.py
- Gate 0 行为验证:--build-self 后 lifecycle 探针通过
|
2026-10-26 13:48:07 +08:00 |
|
TermiNexus
|
782b4d63ff
|
feat(build): 增加 --build-self 与 copyself
- 新增 copyself:延迟后删除目标并复制文件/目录
- ViperC 新增 --build-self:自举到 __vpcbuild_2__ 后由 copyself 替换 __vpcbuild__
- 同步当前 ViperC 工作区已有的 Gen/Diag/Stub 改动
- .gitignore 忽略 __vpcbuild_* 与 _sha1_map.txt
|
2026-10-26 02:09:45 +08:00 |
|
TermiNexus
|
0158df6813
|
perf(TypeSpec): 驻留键与规范文本 scratch 改为 arena 常驻,类型解析零分配
SpecArenaInit 一次性分配 KeyBuf 与 (深度+2) 槽 scratch,InternSpec/_spec_to_text 不再逐次申请缓冲,只需在去重命中时归还临时 TypeSpec;main.vp 在 --detection/--detection-deep 下打开 memhub._memdbg_enable 以保留诊断。
|
2026-10-24 13:10:03 +08:00 |
|
TermiNexus
|
e2192db72d
|
feat(viperbuild): 新增 proj.clean.all 总开关
- ViperBuild:clean.all 布尔字段 + CleanAll() 读取口
- main.vp:all 并入 build_dir / includes(个体字段写 False 无法关闭),等价整根清理 + includes 缓存
|
2026-10-24 00:43:08 +08:00 |
|
TermiNexus
|
22e4fc5d50
|
feat(viperbuild): 新增 proj.clean.{output,temp,build_dir,includes}
- ViperBuild:clean 嵌套布尔字段校验与 CleanOutput/CleanTemp/CleanBuildDir/CleanIncludes 读取口
- main.vp:编译前按开关清理 output / temp / 整个 buildroot(__vpcbuild__)/ includes 缓存;--clean 覆盖时跳过
|
2026-10-24 00:22:47 +08:00 |
|
TermiNexus
|
51b959de57
|
feat(viperbuild): 宏 list 解包与 proj.advanced.asan/traceback
- ViperBuild:_EvalList 同时识别 Starred 与 UnaryOp(Deref);新增 advanced 嵌套布尔字段、校验与 AdvancedAsan/AdvancedTraceback 读取口
- Translator:擦除 proj.advanced.* 宏赋值,避免生成无效 IR
- main.vp:Pass 0 后并入 BuildPipeline 模式,切换 includes 缓存后缀并清理,--repl 与 advanced 互斥
|
2026-10-24 00:14:49 +08:00 |
|
TermiNexus
|
3242560d02
|
支持 tls 关键字,全面准备清退 t, c
|
2026-10-17 23:40:06 +08:00 |
|
TermiNexus
|
7e9ed22dff
|
revert(main): POOL_SIZE 回退 1GiB - 2GiB 触发 MemBuddy 内部索引溢出(_fl_push 在 __init__ 崩)
|
2026-10-16 12:13:02 +08:00 |
|
TermiNexus
|
d206abf3e1
|
chore: 全仓同步 w32→win32 模块改名与 range(int(...)) 显式收窄适配
|
2026-10-12 20:59:11 +08:00 |
|
TermiNexus
|
fb3d3787e6
|
refactor(build): linker.cmd 由绝对路径改为裸名,--asan 提示文案去硬编码
- project.vpj / repl.vpj 的 linker.cmd 改为 clang++.exe,交由 PATH 解析
- main.vp 的 --asan 运行库提示改用占位符路径,并说明 clang64 根目录由 PATH 自动探测
|
2026-10-07 11:25:38 +08:00 |
|
TermiNexus
|
36d23d2f42
|
feat(build): 实现 Qt 运行时依赖部署(runtime.qt6_path / qt6_dlls / qt6_plugins)
背景:project.vpj 里的 runtime 块此前只是声明(编译器不读取),Qr 程序运行时报 Could not find the Qt platform plugin "windows"。
实现:链接成功后(Phase2 的 PhaseC 成功点)调用 BuildPipeline.deploy_runtime_deps(exe_path)——把 qt6_dlls 各项从 <qt6_path>/bin 复制到 exe 同目录;把新增的可选字段 qt6_plugins 各项从 <qt6_path>/plugins 复制到 <exe 目录>/<相对路径>(父目录不存在则 mkdir)。Config.vp 新增 Qt6Path/Qt6Dlls/Qt6Plugins 读取(口径同 LinkerStaticLibs)。
fail-fast:声明了但源文件不存在 / 复制失败 / mkdir 失败 => VLogger.error 并中止构建;三字段全未声明则整段跳过。
验证:重编 SUCCESS(210.11s);ViperMNIST 产物含 7 个 Qt6*.dll + platforms/qwindows.dll,实跑 stderr 无插件报错;ViperAIChat / ViperQtHelloWorld 同样 OK 并完成部署。
|
2026-10-07 09:08:35 +08:00 |
|
TermiNexus
|
7a9bc5ae75
|
chore(messages): TransPyV 运行时中文字符串英文化
把 TransPyV/App 下 57 个文件的运行时中文字符串(编译器报错/告警/日志、CLI 帮助与横幅、REPL 提示、Phase1/Phase2 流程日志、Codegen 各 Mixin 的类型与调用报错、Stub/Vpi 诊断等)共 1091 行译为英文。
口径:只改字符串字面量内部文字,行数零变化(+1092/-1092);printf 格式符与转义序列多重集合校验不变(_strcheck 异常 0);译文不引入撇号以免干扰单引号字面量解析。验证:三重重编 SUCCESS(136.20s)+ 全量 77/77 顺序回归通过 + VET 编译 SUCCESS / --search-paths 7 条 exit 0;新产物 help/日志输出已为英文。
|
2026-10-07 00:03:58 +08:00 |
|
TermiNexus
|
cd55a7e214
|
refactor: rawptr[T] -> T*(R14)+ 修 REnum 前向占位未就地填充
R14:rawptr[X] -> X*(56 文件 / 834 行改动);保留 6 处 rawptr[t.CPtr](存纯裸指针的规范例外)。 修复:class X(t.REnum) 的变体字段写成自引用 X* 时,字段解析在变体扫描期经 ensure_forward_class 建了一个 opaque 前向占位;末尾 register_struct 按 Ty 指针去重会再建第二个同名 entry,而 find_struct 取首个(占位,0 字段)→ X.__sizeof__() == 0,报「已注册但大小为 0(字段链表未填充)」。改为注册前若命中同模块前向占位则就地填充(与 ensure_forward_class 文档口径一致)。TPC 无此问题,属 TPV 侧缺口。 验证:自举三重重编 SUCCESS;全量 77/77 顺序回归通过(修复前卡在 LLvmLiteTest)。
|
2026-10-05 17:38:28 +08:00 |
|
TermiNexus
|
0f4aeeceff
|
docs(tpv): R11 注释与 docstring 英文化并压缩到 2 行内
按 wiki/新规范:注释只讲作用、不掺杂历史原因、避免超长、尽可能英文(含三引号 __doc__)。全文 79 个 .vp:# 注释 16269 行(中文 13808)与 docstring(中文 1381 处)全部改英文;超 2 行的注释块(2093)与 docstring(397)全部压到 2 行。运行时可见文本未动(fatal_error/VLogger 的中文报错文案、stdio.printf 的横幅格式串)。校验:屏蔽注释与三引号后逐行比对各文件代码骨架,0 漂移。验证:自举重建 153.48s 通过(跨模块内联完成);TPV 顺序回归 77/77 全通过。
|
2026-10-05 13:38:22 +08:00 |
|
TermiNexus
|
a2874a14e6
|
chore(tpv): 移除 --allow-multiple-definition 兜底并同步缺省链接参数
main.vp 的缺省 linker flags 与 ViperBuild 内置 _c_linker 默认值去掉 -Wl,--allow-multiple-definition,与 project.vpj 同口径;Phase2 三处引用该 flag 的注释改为描述链接器选 main / 链接前按路径去重的实际机制。重建验证:跨模块内联优化完成、链接成功 139.17s。
|
2026-10-05 09:22:58 +08:00 |
|
TermiNexus
|
f2ef1bb240
|
refactor(tpv): 新语法 R10 括号内隐式续行并一行(1140 处 / 67 文件)
|
2026-10-05 07:14:14 +08:00 |
|
TermiNexus
|
4a685d478f
|
refactor(tpv): 新语法 R10 单语句块并一行(7722 处 if/for/while 单语句体)
|
2026-10-05 03:10:55 +08:00 |
|
TermiNexus
|
7b3e814524
|
refactor(backend): 单端 MLIR —— 发射器全树改名 mlirlite 并删除 --backend 开关
- App/Test 的 .vp 中 llvmlite 全部改名为 mlirlite(import、限定名、类型注解、注释)
- 删除后端开关:Config.set_backend/is_mlir_backend/alias_module_name、BackendTarget/BackendIsMlir、CLI --backend、options.backend/options.target 读取,以及 IncludesScanner/StubMergerIR 的模块别名调用
- BuildPipeline 的 mlir-opt -> mlir-translate 降级管线去掉开关门,改为恒执行
- backend_dir_suffix 改名 mlir_dir_suffix 并恒返回 _mlir:TempDir/OutputDir/includes 缓存继续落在 *_mlir,避免复用旧 LLVM 后端的 .ll/obj
- project.vpj 删除已失效的 options.target
|
2026-10-03 19:26:24 +08:00 |
|
TermiNexus
|
0ebe2e0752
|
feat(backend): 新增 MLIR 后端开关/产物隔离/降级管线/模块别名(默认 llvm 逐字不变)
- Config: BackendTarget/BackendIsMlir/set_backend/is_mlir_backend/backend_dir_suffix/alias_module_name;读取 options.backend(回退 options.target)
- main.vp: 新增 --backend llvm|mlir(CLI 优先级最高,默认 llvm),加载工程后、resolve_paths 前生效
- 产物隔离: temp/output 追加 _mlir 后缀;includes 缓存追加后端后缀(.binary[_asan][_mlir])
- BuildPipeline: MLIR 降级 mlir-opt(校验) -> mlir-translate --mlir-to-llvmir,覆盖串行/并行/--phase2command,且置于 ASan opt 之前;LlcTask 增 MlirOptCmd/MlirTranslateCmd 字段
- 别名: ResolveModuleToPath 与 _FindSha1ByModName 经 Config.alias_module_name 把 llvmlite 重定向到 mlirlite(调用点零改动)
|
2026-10-03 07:53:04 +08:00 |
|
TermiNexus
|
8d01c01afd
|
feat(viperbuild): 落地 --src 工程模式配置面,并补齐循环 else 与整型 None 比较
- 新增 lib/core/builtin/ViperBuild.vp:--src Pass 0 依赖闭包扫描 + 宏配置提取 +
默认值填充 + 写回 Config;main.vp 路由改为工程模式并删除单文件分支
- Translator.vp:写入 triple / datalayout,翻译期擦除 viperbuild 宏语句;
ImportsGenMixin.vp:对 viperbuild 豁免 SHA1 校验
- StmtGenCifMixin.vp:for / while 的 else 子句在 11 条循环生成路径全部接通
- ExprGenOps.vp:None 比较按 None 所在侧分派,整型 None 隐式为 == 0 / != 0
|
2026-10-02 22:07:01 +08:00 |
|
TermiNexus
|
e2c4c7645e
|
fix(cast): 补继承上转豁免(Derived*→Base* 放行),与 TPC 同口径
新增 _class_name_of_ptr_pointee(复用 StructGen.get_class_name_by_type)与 _is_inheritance_upcast(复用 StructGen.get_mro_chain:目标类名命中源类 MRO 链自身之后的祖先即放行,含多级)
在 _pointee_convert_reason 落入“非基本类型”分支前插入上转豁免;其余规则(通用指针通配/层数不同即禁/完全相同放行/None 任意/构造物化豁免/标量无损)未动;Base*→Derived* 与无关结构体仍禁
注:本提交顺带带入 App/main.vp 的既有版本号改动(0.0.5-dev.479,非本次会话产出)
|
2026-09-28 15:29:42 +08:00 |
|
TermiNexus
|
d06c4d2c0e
|
refactor(main): 旧写法 a: static int 迁移为前置形式 static a: int
static 修饰符改为语句起始前置(TPC 与 includes 同步改动)后,本文件是 TPV 自身源码,必须一并迁移,否则新编译器编不过自己
|
2026-09-28 13:49:30 +08:00 |
|
TermiNexus
|
d82f24e17a
|
fix(diag): AST 解析失败日志行内联 行/列 + 原因
四处解析失败上报点(Phase2 的 [Phase A-pre-vpi]、Phase1 的 [Phase 1b-pre] 与单文件、main.vp 单文件)此前只打 AST 解析失败,看不到定位与原因;现内联 第 N 行第 M 列: <原因>,与 dump_parse_traceback 的完整 traceback 同源(原因由 includes/ast/parser.vp 的 _record_* 与 parse_tokens 出口兜底补记提供)。另:App/main.vp 同时带上你工作区既有的 define 迁移/版本号改动。
|
2026-09-27 17:32:34 +08:00 |
|
TermiNexus
|
373a20c3e5
|
perf(prof,gen): 编译热点优化 + 内存池 OOM 诊断接线 + REnum 指针载荷修正
CallGenBase: 模块返回类型文本表改单趟登记+查找,find_func_in_module 合并为单趟链表遍历(PROF 热点)
BuildPipeline: ensure_dir 增加快速路径(已存在目录直接返回)
AssignGenMixin/Translator: alloc 失败打印 Pool/PermPool 统计与阶段上下文(SetAllocCtx)
CallGenCtor: REnum 指针载荷补显式 build_ptrtoint 再 coerce/store;新增 DebugInfoGen.vp
其余为历史累积改动一并入库
|
2026-09-26 19:27:23 +08:00 |
|
TermiNexus
|
951b89be36
|
修正了部分代码的表达方式,最后可用版本,正在为 mlirlite 做准备
|
2026-09-23 16:09:32 +08:00 |
|
TermiNexus
|
a5ceb3d4eb
|
增加 JIT REPL
|
2026-09-21 16:17:19 +08:00 |
|
TermiNexus
|
9910e05760
|
修复了一些错误,更改了一点语法
|
2026-09-18 20:00:40 +08:00 |
|
TermiNexus
|
9e2ccbfab7
|
将部分 | t.CPtr 修正为 rawptr[T]
|
2026-09-18 17:56:24 +08:00 |
|
TermiNexus
|
9a191daa8d
|
错拼 rowptr 改为 rawptr
|
2026-09-16 11:42:28 +08:00 |
|
TermiNexus
|
7cba4cbc95
|
chore: 清理超长历史注释,并一并提交并行会话的代码改动
注释清理(65 文件 / 约 -2578 行 / 约 516 处):删除/压缩叙述式历史注释——多行根因叙事、工作代号段(D25/D30/N11/B5/S4/阶段E 等)、改前改后与先例叙述、逐条推导块,压成一行讲清作用信息;契约类注释(用途、参数与返回、关键约束与不变量、IR 结构说明)与被注释掉的代码一律保留
存疑 标记 6 处一字未动:StubMergerStore.vp、VpiReader.vp、VLogger.vp、AssignGenMixin.vp、CallGenLib.vp、CallGenLeafKit.vp
本次一并带入并行会话的代码改动(同批文件,按文件粒度无法拆分):fileio.File -> rowptr[fileio.File] 等
已知副作用/残留:① CallGenDispatch.vp 有 2 行非注释行的行尾被 LF->CRLF 规范化(纯字节变化,无文本改动);② core/Gen 区约 24 处压缩因并行会话整文件覆写被写回原样,尚未生效(StmtGenCifMixin/ClassGenVTable/FuncGenDef/ClassGenEnum/StructGenMixin/TypeSpec 等)
清单与复跑判据见 Debugger/comment_cleanup_summary.md(该目录不受版本控制)
|
2026-09-16 11:27:05 +08:00 |
|
TermiNexus
|
31df298341
|
fix(gen): 修 REnum match case 静默丢弃与 CDefine 负 64 位常量截断,补 void 注解放行、移植类型定义前移
- MatchGenMixin: 2a 路径查变体 tag 改用裸类名(注解书写形态带模块前缀,与变体表裸名注册口径不一致致 tag=-1、case 被静默丢弃、match 全走 default),并在 build_switch 前硬校验 应提交 case 数==sw_count,不再静默丢
- ExprGenCdef: _const_int_for_cdefine 补 value < -2147483648 下限判据,修正 (0xA5A5A5A5<<32)|0xA5A5A5A5 等负 64 位模式被物化为 i32(写入 inttoptr 零扩展 vs 比较 sext 不一致,致 MemBuddy canary 假阳性 rc=6)
- FuncGenDef/ClassGenVTable: 掉尾检查新增注解级 void 判据(t.CVoid/裸名 CVoid/None),不再因 REnum match 退化误判 void 函数缺 return
- StubMergerBuild: 移植 TPC 的 类型定义前移 遍,满足 llc 对 by-value 具名类型需先定义的要求(invalid type for function argument)
- main.vp/Phase1Main.vp/project.vpj: 新增 --detection-deep 深诊断开关与 canary 哨兵、ASan 静态库声明
|
2026-09-15 19:11:54 +08:00 |
|
TermiNexus
|
af2c66e7d7
|
chore(tpv): 永久池扩容至 1 GiB
PERM_POOL_SIZE 由 512MB (536871176) 调整为 1 GiB (1073741824),为 REnum 注册表挂到 PermPool 后留足余量。
|
2026-09-12 23:14:52 +08:00 |
|
TermiNexus
|
cfb92e5da5
|
初步清理 t. 类型异味
|
2026-09-11 18:36:32 +08:00 |
|
TermiNexus
|
a5260f4441
|
fix(tpv): ASan 运行库改由 project.vpj 声明; read_all 容量语义修正与超限源文件 fail-fast
- --asan: 移除 BuildPipeline 中硬编码的 clang64 libclang_rt 注入, 改由工程在 linker.static_libs / dynamic_libs / flags 中自行声明; 新增 Config.asan_runtime_declared(), main.vp 在未声明时 fail-fast 并列出所需运行库, 不再给含混的 undefined reference
- read_all: 容量参数含终止符(最多读 cap-1 字节), 故删除 12 处恒不可达的 else 截断兜底; 并在读取前按 f.size() fail-fast 拒绝超限源文件(main.vp / BuildPipeline / Phase1Main / Phase1Scan / Phase2), 避免静默截断后报出莫名其妙的语法错误
- project.vpj(根 / Test / NegativeTest / Sha1Test): linker.cmd 由裸 clang++ 改为绝对路径并补 -fuse-ld=lld
|
2026-09-10 22:33:18 +08:00 |
|
TermiNexus
|
adfd202218
|
feat(tpv): 支持 --no-llvmpeephole 关闭 llvmlite 本地窥孔(T2/T3)便于 IR 对比; 移除 project.json(改用 project.VPj)
|
2026-09-09 21:10:20 +08:00 |
|
TermiNexus
|
6b368b46a7
|
feat(tpv): App 与 TPVAppBK 新代版本对齐(rowptr 配套实现全套)
把 TransPyV/App 覆盖为 TPVAppBK 内容(39 文件):6 参注册式 _BuildReachableSha1Set 全套(StubMergerBuild/Store/Collect/__init__/IncludesScanner/Phase1Scan 等)、CallGen 与 TypeGenResolve 等新代实现。配套根 includes 为 rowptr 工作区(另有 includes_rowptr_bk 备份)。
|
2026-09-05 14:13:03 +08:00 |
|
TermiNexus
|
8dda9f7c2d
|
feat(linker): TPV 支持 project.vpj linker.dynamic_libs 动态链接 .dll/.so(Config 解析+绝对路径解析+链接命令合并 static/dynamic,Viper str+= 拼接改用 snprintf)
|
2026-09-01 22:01:20 +08:00 |
|
TermiNexus
|
29667672e4
|
feat(linker): TPV 支持 project.vpj 静态链接 .a/.obj
- Config.vp 新增 LinkerStaticLibs(读取 linker.static_libs 数组并基于 project_dir 解析绝对路径)
- BuildPipeline link_obj_to_exe/link_objs_to_exe/run_pipeline 支持 static_libs(位于 .obj 之后、-l 之前)
- main.vp/Phase2.RunMultiFileProject 全链传递 linker_static_libs
|
2026-09-01 20:15:26 +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
|
24ae2dc966
|
refactor(tpv): 删除 Handles 目录,核心逻辑合并进 Gen
- 新建 Gen/Translator.vp:Translator 类 + Mixin + 常量 + _mbuddy 自 HandlesTranslator 迁入(删 7 个委托壳与 _g_gen)
- GenApi 下沉 7 个 global/nonlocal 管理委托(add/is_global_name、add/is_nonlocal_name、get_nonlocal_type/index、clear_scope_names)+ update_global_func_typestr
- CallGenLeafKit 并入 ExprCallHandle 类,NewExprCallHandle 改本地引用
- 删除 Handles/HandlesExpr/ExprCallTable/HandlesBase(60+ 委托零消费者/纯委托壳)与 Handles 目录整体
- 全 App 56 文件 import 改指 lib.core.Gen.*,清理死 import,委托调用改 GenApi,main/BuildPipeline _g_gen 注入删除
|
2026-08-28 14:29:25 +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
|
a603736f64
|
修正:直接操作操作跨模块变量(VLogger),避免间接 global 函数
|
2026-08-27 13:14:39 +08:00 |
|
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 |
|