TermiNexus
|
cfb92e5da5
|
初步清理 t. 类型异味
|
2026-09-11 18:36:32 +08:00 |
|
TermiNexus
|
d3690f9143
|
fix(tpv): 依赖注入期默认参数按定义模块 SHA1 登记,消除跨模块同名函数串味
N17:VpiReader 注入函数/方法 declare 时显式传入 src_sha1(被依赖模块自身
sha1),add_func_to_table 透传至 _register_global_defaults;调用点默认值查找
改用 find_func_entry_in_table_owned 按 "{owner_sha1}." 前缀限定。修复
usb.uhci.init 误命中 mm.init 的 5 形参/2 默认值而凭空补 2 个 i32 0 的 ABI
错位(IR 实证:call @...init(i16 %4, i32 0, i32 0) → (i16 %4))。
同轮并入的其他编译器侧改动:
- N11 Converter.vp:无 -> 但带 @c.CReturn 时合成 tuple 返回注解,与 define 对齐
- N12 VpiReader.vp:union 指针(T | t.CPtr)stub 解析与定义侧收敛到 i8*
- N14 ExprGenFstr.vp:f-string 32 位整型不再写 l 修饰符
- N2 撤回 ExprGenOps.vp:删除在 _node_type_unsigned 热点查/填 vpi 缓存的
_call_ret_annot_unsigned(有副作用,触发 fat32_diskio.vp match 路径崩溃)
|
2026-09-11 17:39:21 +08:00 |
|
TermiNexus
|
e20a6f3d11
|
fix(tpv): 修 VKernel 暴露的 codegen 缺陷(浮点 CDefine/__sizeof__ packed/CONST_STR/alloca/无符号/ABI)
- 浮点 t.CDefine 初值序列化与源恢复(gfx PI 编成 0.0)
- __sizeof__ 按 packed 计算(cpu _tss memset 越界写 4B)
- 数组初始化器支持 CONST_STR 单字符;模块级别名不再产出 global i32 0 假全局
- 临时缓冲/构造临时量 alloca 提升至入口块(B6 未覆盖路径)
- 无符号判定补 CSizeT/小写别名/结构体字段 + udiv/urem + range 位宽与符号 + zext 扩展
- 跨模块 declare 形参按 vpi 定义侧收敛(修 _vpi_method_param_annot 拒绝 cls_name=None 导致 coerce 恒失效)
|
2026-09-11 14:26:54 +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
|
7611d10072
|
fix(stubgen): CONST_STR 引号改用字符串字面量,修复 char 隐式转指针
|
2026-09-09 08:57:29 +08:00 |
|
TermiNexus
|
a260b9316d
|
style(stubgen): Converter.vp 去除 .vpi 类/函数定义后多余空行
|
2026-09-07 22:35:21 +08:00 |
|
TermiNexus
|
4496738a24
|
fix(asm,irbuf): c.Asm 输出类型收集时缓存 + 大模块 IR 缓冲 1MB→8MB
1) c.Asm 输出操作数类型改为收集时直接从 alloca 缓存(单输出 scalar、多输出按序数组 out_ptys),不再依赖从 pool AsmOperand 槽二次读回 Value.Ty.Pointee。修 atom/__atomic_test_and_set 与 vrandom rdrand*_step:此前槽读回不稳定 → ret 静默 Void → 发射带名 void asm(llc 'instructions returning void cannot have a name')或报输出操作数类型缺失。2) 超大模块 IR 截断:ast/parser.vp 的 text.ll >1MB,Phase1(PHASE1_IR_SIZE)/Phase2(PHASE_A_IR_SIZE、PBP_IR_SIZE) 写缓冲与 StubMergerBuild 读缓冲(STUB_READ_BUF_SIZE) 均 1MB 单次截断 → 合并 IR 尾部丢字(opt 'end of file in global variable name');统一提到 8MB。
|
2026-09-07 22:06:26 +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
|
c2b9a26c62
|
fix(tpv): vpi 注入完整类型定义 + list elem_size + 路径修复,清理临时诊断
- VpiReader: 值 struct 全局/数组元素/函数返回类型注册完整定义,修复 llc use of undefined type;vpi 注入类后补 add_field 字段表(LARGE_INTEGER.QuadPart 恒 0 根因)
- TypeGenResolve: list[str](pool, elem_size) 语义修复(参数个数误当 elem_size,Mat4 崩溃根因);t/c 内置命名空间 Subscript 特判
- Config: _join_path 防双份路径
- GenApi: 新增 add_field 代理
- 移除 DBG-VK/PHASEADBG/GAP-DIAG/DBG-EMP 临时诊断
|
2026-08-29 17:27:29 +08:00 |
|
TermiNexus
|
2b2c242d14
|
fix(tpv): extern declare 返回类型含真实类型时不再误归 Void + 白名单兜底
vpi 注入 extern declare 时 has_state→Void 无条件触发:注解 HANDLE | t.State(FindFirstFileA/GetStdHandle)被归为 void → declare 返回 void,运行期 FindFirstFileA 句柄丢失 → 文件存在性判断失效(文件实际存在但报不存在)。修复:仅纯标记注解归 Void;含真实类型但解析 miss 时回退外部函数返回类型白名单(FindFirstFileA/GetStdHandle→i8*),GenApi 新增 infer_external_func_ret_ty 委托。
|
2026-08-29 12:03:12 +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
|
d3bdfd5205
|
fix(tpv): 修复包重导出两个前置判定 bug(level 判定 + __init__ 后缀偏移)
1) 相对导入判定改 sifr.level>0:parser 把前导点存 level,module 字段不含点,原 sifr_mod[0]=='.' 恒假,走绝对分支查不到 ast.exprs,sub_sha1=None 重导出被跳过。2) __init__ 判定改 strstr:原 strcmp(rel_path+len-9) 对 ast/__init__.vp 指向 init__.vp 恒不匹配,is_pkg=0。两 bug 叠加致包重导出从未触发,ast.Attribute 未注册(AssignGenMixin L46 fail-fast 根因)。
|
2026-08-29 09:32:12 +08:00 |
|
TermiNexus
|
25363120f8
|
debug(tpv): 临时诊断定位 ast.Attribute 包重导出失败根因(REEXPORT-DBG)
|
2026-08-29 09:15:33 +08:00 |
|
TermiNexus
|
7b81e3c7cf
|
fix(tpv): vpi 注入不再注册空类(FieldCount=0)——避免阻塞源模块真实定义
- vpi 存根不含类字段(只序列化 class 名 + def 签名),_inject_class_struct_declare
的 field_count 恒为 0 → 注册空类
- 空类在源模块编译时被 find_struct_by_module 命中 → "结构体已注册但字段数为0"
InternalCompilerError(win32base.SECURITY_ATTRIBUTES 根因)
- field_count==0 时不注册:依赖已编译命中真实类(L1604-1608),未编译走
_deps_pending 多遍收敛
|
2026-08-29 08:20:26 +08:00 |
|
TermiNexus
|
fa90586a83
|
refactor(tpv): 类型系统收敛——正常库分析优先,t/c 库内部特判兜底
- 阶段1a:Name 分支 from-import 别名反查(from t import CInt as XXX 可解析,
支撑 YYY: t.CTypedef = XXX 复杂别名链)
- 阶段1b:Attribute 路径 CTypedef 动态表优先(stdint.INT 走库定义)
- 阶段2:map_t_type 删除与 stdint.vp 重复的 ~70 个硬编码别名(保留 t/c 核心
原语 + float/double + HANDLE/LPCSTR/LPCWSTR),新增 resolve_typedef_or_map/
get_type_size_bytes 统一口径 + GenApi 委托,改造 VpiReader/ClassGenEnum/
TypeGenErr 旁路调用点
- 阶段3:__sizeof__/REnum 尺寸/无符号名单三张派生表加 CTypedef 动态兜底
|
2026-08-29 06:15:00 +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
|
e82664fa67
|
fix(gen): @t.Object 类模块级变量转 Ptr(struct),t.CStruct 值类保持值,修复 devfs 虚表调用跳栈 #PF
|
2026-08-26 22:33:11 +08:00 |
|
TermiNexus
|
66fe13f407
|
fix(vpireader): stub 全局变量声明保持 t.CStruct 值类型,修复跨模块字段访问当指针解引用
|
2026-08-26 22:18:10 +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
|
4d14eeff67
|
fix(vpireader): declare 参数注解改字符串解析优先,修复 t.CSizeT→i32
SlotsBugTest 根因:跨模块 declare 参数类型经 AST resolve_annotation_type 解析,vpi tree 深层节点 kind() 损坏时得垃圾类型(t.CSizeT→i32),而定义侧是 i64——调用侧 trunc i64→i32 传参、callee 按 i64 读栈残留垃圾高位 → can=巨值读未写槽位(0xCDCD)崩溃(ASAN node=0xCDCD,rcx 垃圾高 32 位实锤)。
修复:_inject_function_declare/_inject_method_declare 参数解析与返回类型同源——优先用 vpi 文本注解缓存(_resolve_vpi_param_annot_seg 按段索引解析),AST 仅兜底。map_t_type('CSizeT')=i64 字符串路径正确,can declare 恢复 i64,调用侧不再 trunc。
|
2026-08-25 16:43:43 +08:00 |
|
TermiNexus
|
27f2a53c15
|
diagnose(tpv): Phase A pending 置位点全量 [DEPDBG] 诊断 + 别名解析修复 - 9 处 _deps_pending 置位点加 [DEPDBG] printf(CallGenCall×4/CallGenMixin/CallGenDispatch×2/CallGenProp/ExprGenName),一次构建即可定位 ClassGenVTable 永久 pending 的具体调用点 - StubMergerStore 新增 LookupSha1ByAlias:经 from_imports 别名映射(import X as Y → Y:X)解析模块 SHA1 - LoadDepVpiIntoModule 与 Phase A 依赖探针接入别名解析,HT 等改名别名不再误报未解析
|
2026-08-23 14:21:44 +08:00 |
|
TermiNexus
|
6cd8adc54c
|
refactor(tpv): 简化 BuildTopoSortedIndices 队列循环为 for range - StubMergerTopo.vp 中 while q_head < q_tail + 手动 q_head += 1 改为 for q_head in range(q_tail),逻辑等价、消除冗余变量
|
2026-08-23 14:03:27 +08:00 |
|
TermiNexus
|
2e6c37294d
|
fix(tpv): 修复 vpi CDefine 名缓存 list.get 被误分派为 HashTable.get 的 ASan 崩溃
Converter.vp _g_pyi_cdef_names 由 list[str]|t.CPtr 改为 str|t.CPtr(i8** 字符串
指针数组),读写改用 argparse 同款可靠模式 t.CPtr(base+i*8)+e[0]:list 联合
接收者的 .get 会被分派为 HashTable.get(self, key, default),索引 inttoptr 成
key 指针传给 _fnv1a_hash 解引用零页崩溃(1.LOG)。
TranslatorGenMixin handle_module_level_var 对模块级 str|bytes 联合全局设置
IsPtrElement(8 字节指针步长),对齐 TPC global_var_ptr_element。
|
2026-08-23 12:38:25 +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
|
f8bca62eb0
|
修正了 import 路径,除 Gen
|
2026-08-22 02:18:15 +08:00 |
|