TermiNexus
9c3ebc8a2c
fix(ffilib): 为 runtime CDLL thunk 创建 entry block 并移除失败静默返回
...
- new_builder 的 CurBlock 初值为 None,_emit 会静默丢弃指令,导致 thunk 生成空函数体(mlir-opt: empty block)
- 补 create_block + position_at_end,随后再把全部静默 return None 改为 fatal_error
- 移除两处 [ffiprobe] 调试探针
2026-10-24 23:57:09 +08:00
TermiNexus
2caf6f0795
fix(ffilib): runtime=True 时把 _ffilib 登记为导入模块,进入可达性扫描
...
Pass 0 的 _AddPending 只影响 viperbuild 的闭包 BFS,不影响 Phase1/Phase2 的 includes 可达性扫描(后者由 tr._imported_modules 驱动),所以 _ffilib 仍然没被收录、拿不到 SHA1。改为在 translate_import 里判断:若存在 runtime=True 的句柄(ViperBuild.HasRuntimeFfiHandle),则随 import ffilib 一并 NotePlainImport("_ffilib")。
2026-10-24 23:20:14 +08:00
TermiNexus
796a2f5921
fix(ffilib): 仅在 runtime=True 时引入 _ffilib 运行时依赖
...
runtime CDLL 的 thunk 需要 _ffilib.Load/Sym,但 includes 是按需可达性扫描:没有 import _ffilib 就不会收录、拿不到 SHA1。改为在 _RegisterFfiHandle 里按 runtime 判定——runtime=True 才 _AddPending("_ffilib"),纯链接期(runtime=False)的工程不会多编译这个运行时库。_check_import_sha1 也放行 _ffilib(它由生成代码引用,不是用户手写 import)。
2026-10-24 23:16:06 +08:00
TermiNexus
2411ceff8c
fix(ffilib): 把 _ffilib 拉进依赖闭包(Pass 0 pending + import 白名单)
...
thunk 生成时报 module _ffilib 未在 includes 扫描中:includes 是按需可达性扫描,没有任何文件 import _ffilib 就不会收录它。Pass 0 的 import 处理里对 ffilib 追加 pending(_ffilib);_check_import_sha1 也放行 _ffilib(防止显式 import 时报无 SHA1)。若可达性仍不生效,改用方案 B:thunk 直接调 LoadLibraryA/GetProcAddress(裸名、无需模块 SHA1),去掉对 _ffilib 的依赖。
2026-10-24 23:15:31 +08:00
TermiNexus
1508563f1c
chore(ffilib): 临时探针(CDLL 抽取 + extern 分支的 ffi_lib/runtime)
...
现象与"exe 已含最新提交"矛盾:add_c2 仍生成全局、@add 无 thunk、无 _ffilib 引用。加两处 printf 定位断点:_HandleCDLL 入口打印句柄名;translate_function_def 的 extern 分支打印 fd.ffi_lib 与 FfiHandleRuntime 结果。定位后立即移除。
2026-10-24 22:51:31 +08:00
TermiNexus
c765cfa9d4
fix(ffilib): 模块级 ffilib.CDLL(...) 赋值不再生成全局变量
...
现场 main.vp 的 text.ll 里出现 @"<sha1>.add_c2"() : i32 全局,说明纯编译期配置的 CDLL 声明被当成普通模块级变量翻译了。ViperBuild 增加 IsCdlLDeclCall(复用 _IsCDLLCall,认别名与全名);TranslatorGenMixin 的模块级 Assign 分支先判它,命中则整条跳过 Pass 0 已抽取的声明。
2026-10-24 22:34:54 +08:00
TermiNexus
36bfa4e061
fix(ffilib): runtime=True 不再把库路径写进 dynamic_libs
...
runtime=True 的库由 thunk 在运行期按绝对路径 LoadLibraryA,若同时进 dynamic_libs 会成为链接输入、生成 PE 导入表依赖,既与 thunk 重复又会重新带回 exe 同目录/PATH 的限制。改为只登记句柄与路径。
2026-10-24 22:31:10 +08:00
TermiNexus
5e038eae5e
feat(ffilib): 句柄表补记库路径,供 runtime thunk 使用
...
CDLL 句柄登记从 (名字, runtime) 扩为 (名字, runtime, 路径):_ffi_handles_path 与另外两张表平行,_RegisterFfiHandle 增加 path 参数(四条登记路径全部更新),新增 FfiHandlePath(name) 查询。runtime=True 的 thunk 将用该绝对路径调用 _ffilib.Load,从而绕开 PE 导入表的文件名查找规则。
2026-10-24 22:01:07 +08:00
TermiNexus
74a9d96d3c
feat(ffilib): extern <lib> name(...) 校验库句柄并按 runtime 决定行为
...
Pass 0 新增 CDLL 句柄表(变量名 -> runtime):_HandleCDLL 接收赋值目标名,_RegisterFfiHandle 登记,FfiHandleRuntime 提供查询(1=运行时/0=链接期/-1=未登记)。FuncGenDef 在前置声明阶段校验 ffi_lib:未绑定 ffilib.CDLL 报 NameError;runtime=True 报 NotImplementedError(需要 _ffilib 运行时符号绑定,绝不静默退化为静态链接);runtime=False 照常生成裸名 declare。
2026-10-24 21:12:55 +08:00
TermiNexus
51b30d3413
feat(ffilib): Pass 0 抽取 CDLL 构建配置
...
import ffilib 只记别名、不进 BFS;_ScanFile 的 Assign/Expr 分发先判 _IsCDLLCall,是则交给 _HandleCDLL。四分支:Project.StaticLib -> static_libs、Project.DynamicLib -> dynamic_libs、字符串 + runtime(True=dynamic/False=static,位置参数或关键字)、list 回退形式编译期 fail-fast。路径追加沿用 static_libs/dynamic_libs 的空格拼接格式,_ResetAll 同步清零 _ffi_alias。
2026-10-24 19:15:59 +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
024e61ce45
feat(viperbuild): build(run=, args=) 支持编译后直接运行
...
- ViperBuild:解析 run(bool) / args(list[str]);非空 args 隐含 run,含空格元素自动加引号,内嵌双引号 fatal
- Phase2:链接成功后按配置运行产物(命令行形式 "exe" args...),CLI --run 仍生效,phase2command 模式跳过
2026-10-24 00:25:47 +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
d206abf3e1
chore: 全仓同步 w32→win32 模块改名与 range(int(...)) 显式收窄适配
2026-10-12 20:59:11 +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
aeb4e8e54c
refactor(gen): R12 收尾同步——12 处计数 while 循环改 for range
...
与 includes 同步:<= 条件转 range(expr + 1),并放宽初始化行的紧贴要求(同块内最近一次写即为初始化即可)。其余保守守卫不变。
验证:bootstrap 三重重编 SUCCESS;全量 77/77 顺序回归通过。
2026-10-05 16:36:36 +08:00
TermiNexus
fb53f88893
refactor(gen): R12/R13 同步——下标 while 循环改 for range、去 c.Set
...
与 includes 同步执行两批源改写:R12 把「i: int = 0 与 while i < N: … i += 1」形式的计数循环改写为「for i in range(N):」;R13 把 c.Set(*p, v) 迁移为 *p = v、c.Set(a, b) 迁移为 a = b(c.Set 是正在退化的路径)。
验证:bootstrap 三重重编 SUCCESS(无 vast_c 解析回退);全量 77/77 顺序回归通过(WebTest 首轮网络超时,单独重跑通过)。
2026-10-05 15:33:58 +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
30a3da4cd4
refactor(tpv): 新语法 R10(反斜杠续行合并)+ 回退 R5(语义不等价)
...
- 反斜杠续行合并为单行(304 处),呼应"尽可能不换行"。
- 回退 c.DerefAs(p, v) → *p = v 两处(StructGenMixin):原写法是 bitcast 后
store 指针位,新写法按 pointee 值类型赋值,类型不符(i8* → List 值),
语义不等价,保留 c.DerefAs。
种子自举通过。
2026-10-04 22:56:27 +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