TermiNexus
|
cfb92e5da5
|
初步清理 t. 类型异味
|
2026-09-11 18:36:32 +08:00 |
|
TermiNexus
|
4ce55e3ea3
|
fix(tpv): 泛型注解预特化下沉到 AnnAssign Handle 路径,修 .get() 误分派崩溃
translate_annassign 解析注解前未先注册泛型特化,`list[ast.AST | t.CPtr]
| t.CPtr` 会退化为裸 list*,随后 body_list.get(i) 被分派到默认
list[int].get(返回 i32)→ inttoptr 截断指针 → 读垃圾 AST 节点,
StmtGenMixin._translate_stmt_impl 崩溃(寄存器指纹与既有潜伏崩溃一致,
IR 实证见 Debugger/ViperOS3.md 第十九节)。
抽出 _prespecialize_generic_annotation 供 pre_scan_allocas 与
translate_annassign 共用(该补救原先只存在于预扫描路径),使两处解析一致。
同批(P1-A):赋值/返回路径把目标类型作为 target_ty 传入 translate_value,
使 `x: uint64 = 12345` 与 `u64(12345)` 物化出同一条 i64 常量、省去 coerce
的 zext。站点:translate_annassign(global/nonlocal/模块级/局部四处)、
translate_assign(单 Name 目标)、translate_return。target_ty 仅被
Constant 节点消费,不影响调用/二元/属性路径。
|
2026-09-11 18:10:19 +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
|
e66d9e3adb
|
fix(tpv): 修 N 系列 codegen 缺陷(常量位宽/无符号判定/实参扩宽/结构体取址)
- N1 ExprGenConst/CallGenDispatch: CONST_INT 按 target_ty 位宽物化, 修 uint64(0xFFFFFFFFFFFFFFFF) 被降 i32 再 zext
- N2 ExprGenOps: 新增 _call_ret_annot_unsigned 查被调方 vpi 返回注解, 修 uint32 返回值 >> 生成 ashr
- N3 TypeGenResolve: 联合注解提取跳过存储类限定宏, 修模块级全局 uint32 比较生成 sge/slt
- N5 CallGenLib: 常量实参按形参扩宽 + _coerce_args_to_def_params 支持 3 段方法调用
- N17 CallGenLeafKit/CallGenMixin: 默认值表按定义模块 sha1 限定 + 收紧交叉校验守卫
- N18 ExprGenBase/CallGenLib: rvalue 结构体实参落栈取址
|
2026-09-11 15:50:09 +08:00 |
|
TermiNexus
|
751fbccb29
|
feat(tpv): vtable 对象全局 storage 也按字段默认值折叠
补 f5ee178 未覆盖的 vtable 分支:抽出 _build_stg_struct_body_text,_build_stg_struct_init_text 改为其包装;vtable 分支以 start_idx=1 复用默认值折叠,字段默认值全零时回退原零值循环(元素个数语义不变)。
|
2026-09-11 15:29:43 +08:00 |
|
TermiNexus
|
f5ee178407
|
feat(tpv): 模块级对象全局按字段默认值生成 storage 初始化器
- 新增 _default_val_const_text:字段默认值 AST -> 常量文本(仅整型/字符/负号字面量可折叠,其余零值兜底)
- 新增 _build_stg_struct_init_text:按 StructEntry 字段默认值生成完整 struct 常量初始化器(LLVM 要求列全字段);无非零默认值返回 None
- storage 分支新增 elif:无 vtable 对象全局走默认值初始化器(vtable 路径不变)
- 效果:fat32.default_fs 的 .stg 由 zeroinitializer 变为含 sector_size=512/root_cluster=2/free_clusters=0xFFFFFFFF/backup_sector=6/winsect=-1 的完整常量;drive_lock 等零值等价场景保持 zeroinitializer
|
2026-09-11 14:52:29 +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
|
bd46b47b22
|
docs(readme): 按事实重写 README, 反映自举已完成与真实源码结构
- 自举状态: 重写中 -> 已完成自主编译, TransPyC 明确为自举种子
- 目录结构: 全文 .py 名称纠正为真实 .vp 布局 (Phase/ Stub/ core/Gen/ 树, Gen 52 文件)
- 工程配置: project.json -> project.vpj; 产物路径 output/ -> .tpv_build/output/
- CLI 表补齐 --asan/--phase2command/--nowarn-register/--no-llvmpeephole/--detection/--show-args/--build-dir/--version
- 内存模型: 补常驻池 512 MiB 与 CompilerFactory 单例, 说明自举后 _mbuddy 需逐模块注入
- 规模数据改为实测值 (App 76 文件 64656 行 / Gen 52 文件 / Test 39 用例)
- 修复失效链接 wiki/01-overview.md
|
2026-09-10 22:33:23 +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
|
76f03b5987
|
fix(tpv): 修模块级浮点全局零初始化、跨模块 CDefine 重导出、默认参数快照、typedef 诊断悬垂指针
- TranslatorGenMixin/AssignGenMixin: 模块级全局补 CONST_FLOAT 初始化分支。
此前无此分支 → init_kind 保持 0 → t.CDouble 全局一律退化成 zeroinitializer
(torch 的 LCG_A/LCG_M/_rng_state 全变 0 → _next_rand() 得 0.0/0.0 = NaN
→ Kaiming 初始化写入全 NaN 权重 → 推理 softmax 分母 NaN → 十个概率全为 0)。
浮点值不走 AST 的 float_val(会被 pool 操作覆写),改为按变量名从当前源文件
重读恢复;_recover_cdefine_float 泛化为 _recover_float_literal。
- ExprGenCdef: 跨模块 CDefine 重导出链支持绝对导入(from pkg.sub import *),
此前只认相对 from .X → vqt6 包(__init__.vp 用 from vqt6._types import *)
里的 CDefine 全查不到,报 "跨模块 CDefine 未找到: 'vqt6.QT_ALIGN_CENTER'";
相对导入基准改用"当前模块所属包"而非模块名本身,修正子模块 from .X 拼接
(对齐 CallGenBase._lookup_reexport_from_vpi 的包名口径)。
- CallGenLeafKit: 默认参数常量快照支持一元字面量(USub/UAdd/Invert 且操作数为
整型 Constant)。此前只认 Constant/Name → ex3: t.CInt = -1 这类默认值快照为空,
跨模块重建时报 "跨模块默认参数无法重建(快照缺失)"。其余形态仍保持 kinds=0,
重建时 fail-fast,不静默兜底。
- TypeGenCType/TypeGenResolve/TypeGenBase: builtins typedef 诊断串改为自有缓冲
副本(stdlib.malloc,clear_ctypedefs 释放)。调用方常传临时段缓冲,直接存指针
会悬垂,_build_ann_fail_msg 的 snprintf 读已释放内存(ASan heap-use-after-free)。
|
2026-09-10 14:22:02 +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
|
1d76280d0e
|
perf(tpv): find_func_in_table 两遍扫描合并为单遍
|
2026-09-09 10:38:34 +08:00 |
|
TermiNexus
|
bb9bb76653
|
fix(tpv-asm): c.Asm clobber 独立上限 ASM_MAX_CLOBBERS=32,修复 >16 项 clobber 截断致寄存器冲突崩溃
|
2026-09-09 10:38:34 +08:00 |
|
TermiNexus
|
7611d10072
|
fix(stubgen): CONST_STR 引号改用字符串字面量,修复 char 隐式转指针
|
2026-09-09 08:57:29 +08:00 |
|
TermiNexus
|
3e4f3b88b0
|
fix(tpv-class): lookup_field_by_class 识别 16hex 类键前缀为 sha1,修复 GSList[Param] 模块解析误报
|
2026-09-09 08:57:29 +08:00 |
|
TermiNexus
|
82558bd86b
|
fix(tpv-expr): list 内置内联按元素原型类 load,支持链式 get(0).method() 分派
|
2026-09-08 21:30:56 +08:00 |
|
TermiNexus
|
709c3570fb
|
fix(tpv-class): REnum 自引用字段注册后回填别名类型,修复 match 绑定变量退化为整数
|
2026-09-08 21:30:56 +08:00 |
|
TermiNexus
|
ab814f55e6
|
fix(tpv-call): 裸名调用同模块函数优先(owner_sha1),修复跨模块同名 stub 抢占致 _advance 误绑
|
2026-09-08 20:47:54 +08:00 |
|
TermiNexus
|
a260b9316d
|
style(stubgen): Converter.vp 去除 .vpi 类/函数定义后多余空行
|
2026-09-07 22:35:21 +08:00 |
|
TermiNexus
|
1146719de1
|
fix(generic): 泛型显式实例化 Box[t.CInt](v) 实参提取 Attribute 直读字段
TypeGenResolve._get_type_name_from_annotation 的 Attribute 分支改用 at.attr/at.value 直读:ast.attribute_get_attr 等跨模块访问器在 Phase A 阶段 text.ll 未生成时为 stub 无体返回 None → tn_raw 为空 → Box[t.CInt](v) 泛型类型实参提取失败 → 构造调用 func 名 '?' → RHS None(GenericTest4 main.vp:22 根因)。与 Name 分支 L53-55 同源;同时移除 CallGenCtor 残留 [EXTRACT-DBG] 诊断日志。
|
2026-09-07 22:11:05 +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
|
bcedb15b23
|
fix(generic,rowptr): SlotsBugTest 编译修复——T.__sizeof__ 特化与 rowptr[sha1.Class] 注解解析
1) CallGenDispatch __sizeof__:指针包装判断(X|t.CPtr 联合与 rowptr[X])移到 dot-strip 之前。类型实参规范化名如 rowptr[7565e081d88517ac.AST] 内嵌 '.',strrchr('.') 会把括号内 .AST 剥成 'AST]',rowptr[ 前缀判断失配 → 落回把接收者 Name(T) 当实例翻译 → NameError 'T'(list[rowptr[AST]] 特化 list.__init__ 根因)。2) TypeGenResolve:a) 注解 Name 分支支持 '{16hex}.Class'(_norm_type_arg_name 产物,模块段即 SHA1)经 find_struct_by_module 直解;b) _parse_type_string 下标内层以数字开头(sha1 前缀类名)且单实参无嵌套/无逗号时手工拆 base+slice 递归解析——完整 lexer 会把 7565e081d88517ac 当数值误扫 → slice 变 Constant 占位 → 特化方法 append 参数 'item' 类型解析失败。3) CallGenMixin:泛型类模板缺失分支补内建下标 cast:(rowptr[list[int]])(x)/(t.CPtr[T])(x)/(t.CArray[i8,N])(x) 按 resolve_annotation_type 出类型后单参 _translate_t_type_cast,替代误报 '泛型类 rowptr 未找到模板'(ast/base.vp L392 根因)。
|
2026-09-07 19:36:57 +08:00 |
|
TermiNexus
|
41ed7176e9
|
fix(codegen): __sizeof__ 缺 rowptr[X] 指针尺寸分支,泛型特化 T.__sizeof__() 报未定义名称 'T'
list[rowptr[AST]] 特化翻译 list.__init__ 的 T.__sizeof__() 时,T 解析为新一代指针包装 rowptr[AST],尺寸表全部 miss 后落回把接收者 Name(T) 当实例翻译 → NameError: 未定义名称 'T'(SlotsBugTest ast 包 rowptr[list[rowptr[AST]]] 泛型特化根因)。在旧语法联合 X|t.CPtr → 8 分支旁补 rowptr[ 前缀 → 8(指针大小),与联合类型口径对齐。
|
2026-09-07 15:31:18 +08:00 |
|
TermiNexus
|
ed373a3ef2
|
基线重置,修复了一些 bug
|
2026-09-07 14:46:48 +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
|
c35246f426
|
fix(phase1): 旧 5 参 def 前补全量 includes 预注册(1a-pre),修复'无法构建 SHA1 映射'
178ea40 重构把全量 includes 扫描/注册(PopulateSha1MapStore + 逐文件 import 依赖 PopulateIncludesDeps)从 Phase1Main 移除,依赖注册式 def 在 BFS 中自行登记。改用旧 5 参只读 def(调用点同步改回 5 参)后 store 无预注册 → _BuildIncludesSha1Map 返回 0 → '无法构建 SHA1 映射' 终止。
按 ab0f37e 1a-pre 模式补回:scan_includes 全量扫描 → PopulateSha1MapStore 登记 store → 逐文件 declare_only=2 解析 import 依赖(含 _inject_auto_container_visibility)→ PopulateIncludesDeps(文件级 mark/reset 防 OOM)。_BuildReachableResult 增加 reachable_set/count 过滤,result 只保留可达 includes 子集(1a/1b 只翻译可达文件)。
|
2026-09-05 12:56:10 +08:00 |
|
TermiNexus
|
50d53d3ce6
|
fix(link): 补 CallGenLib._promote_clib_call_args 定义;BuildPipeline PYI_BUF_SIZE 改 t.CDefine 宏
CallGenMixin.translate_call 调用 self.Gen.CallGenLib._promote_clib_call_args(B3 裸名 C 库函数第三参 i64 提升),但 CallGenLib 缺该方法 → ld.lld undefined symbol。按 TPVAppBK 旧语法移植完整方法。
PYI_BUF_SIZE 是跨模块共享裸全局(@PYI_BUF_SIZE),Phase1/__init__ 与 BuildPipeline 两模块各定义强符号 → duplicate symbol。BuildPipeline 侧改用 t.CDefine 宏(同 SRC_BUF_SIZE),不再产生全局。
|
2026-09-05 12:48: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
|
75db09e18a
|
fix(call): 跨模块返回类型解析兜底修复——star import 候选验证失败时先验证原模块(stdlib.malloc extern def 不再误归 stdint);包模块 vpi 未命中时经 reexport 定位定义模块查返回注解(fltk.Fl_Input_value 返回 str 不再退化 i32)
|
2026-09-01 21:23:12 +08:00 |
|
TermiNexus
|
131f3a9a4d
|
fix(phase1): 移除 [CYCBREAK] 临时诊断 printf
|
2026-09-01 21:07:24 +08:00 |
|
TermiNexus
|
178ea401b7
|
fix(phase1): 含 class 定义的 includes 模块强制翻译,修复增量编译跨模块类构造 find_struct_by_module 落空(fltk.Fl_Window 返回类型 fail-fast)
|
2026-09-01 21:06:31 +08:00 |
|
TermiNexus
|
c7c37e1007
|
fix(call): star import 再导出改为多候选验证定义模块
- _lookup_reexport_from_vpi:from X import * 累积全部候选(空格分隔),不遇首个星行即返回
- CallGenMixin:按候选逐个验证 is_cexport_func/_is_state_func_from_vpi 确认定义模块(Fl_init_all→_cfl)
- 修复 fltk/__init__ 依次 from _types/_enums/_cfl import * 时定位到首个模块(_types)的误判
|
2026-09-01 20:39:19 +08:00 |
|
TermiNexus
|
60deee1d17
|
fix(call): _lookup_reexport_from_vpi 支持 star import 再导出定位
- from X import * 的 re-export(如 fltk/__init__ 再导出 _cfl 全部 extern FFI)此前无法定位定义模块
- fltk.Fl_init_all 被误加 SHA1 前缀走 mangled 精确解析 → extern def 无 define → fail-fast
- 命中后由 is_cexport_func/_is_state_func_from_vpi 二次校验裸名
|
2026-09-01 20:26:14 +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
|
9b46e1da78
|
fix(compiler): for x in ptr/数组 实现解引用为空终止(指针/浮点元素支持 + 数组长度上限+NULL终止)
|
2026-08-30 08:37:39 +08:00 |
|
TermiNexus
|
d14415a4e6
|
fix(compiler): asm 约束映射补全 8 位寄存器 clobber(AL/AH/BL/BH/CL/CH/DL/DH)
|
2026-08-30 08:12:44 +08:00 |
|
TermiNexus
|
a0d6dced00
|
fix(compiler): va_arg 截断回目标宽度(%d 高位垃圾)+ 比较按无符号类型选 ULT/ULT/UGT/UGE
|
2026-08-30 07:54:24 +08:00 |
|
TermiNexus
|
4db68ff5c4
|
fix(compiler): 修复模块级全局初始化数据丢失(-1 与字符数组全 0)
|
2026-08-30 07:27:40 +08:00 |
|
TermiNexus
|
23e7f5b1fb
|
fix(compiler): storage vtable 初始化改完整 struct 初始化器(LLVM 拒绝部分初始化)
llc 报 initializer has wrong # elements。__vtable__ 字段(索引 0)= i8* @vtable,其余用户字段按类型生成零值(Ptr→null/Int→0/Float→0.0/Array→zeroinitializer),列全 FieldCount 字段。
|
2026-08-29 18:46:18 +08:00 |
|
TermiNexus
|
fa4c69f95d
|
fix(compiler): storage 对象类全局初始化 vtable 首字段(@t.CVTable)
storage 方案 @g.stg 全零初始化 → @t.CVTable 模块级全局对象 vtable=0 → 用户程序入口虚调用 call [vtable+0x10] 跳 0x0 #PF(HelloWorld 启动即崩)。@g.stg 初始值改为 { i8* @Class.vtable }(首字段 vtable 地址,其余零),无 vtable 的 @t.Object 保持 zeroinitializer。
|
2026-08-29 18:39:28 +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
|
1fe7878074
|
fix(compiler): 对象类模块级全局改静态 BSS storage,修复页 0 混叠与栈悬垂
对象类全局(裸类名注解)此前编译为 NULL 指针,实例建在栈 alloca 后悬垂,对象字段落在物理页 0(IVT+BDA 混叠),导致 VKernel devfs/fat32/sched 全部对象失效。新增 @g.stg 静态 storage(BSS),@g 编译期指向它;赋值/构造点(translate_assign/translate_annassign 全局分支)检测 storage 后绑定引用并复制对象,消除 NULL 与悬垂。
|
2026-08-29 17:27:21 +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
|
efc8f7948f
|
fix(tpv): void 函数 return <expr> 丢弃值 + ret void(llc ret i32 vs define void)
GenApi.add_global_name 声明 -> None 但 body 为 return g.TranslatorGen.add_global_name(...)(委托返回 i32)→ translate_return 对带值 return 直接 build_ret(val) 生成 ret i32,与 define void 冲突 → llc 'value doesn't match function result type void'。修复:函数返回类型为 void 时 return <expr> 仅求值丢弃 + ret void(Python 语义)。
|
2026-08-29 11:12:23 +08:00 |
|
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
|
a99db2a29b
|
fix(tpv): REnum 变体引用作值返回 tag 常量 + kind() 注解兜底
1) 表达式中的 REnumClass.Variant 无括号引用(llvmlite.LLVMType.Struct)此前未处理 → 与 kind() 返回的 i32 tag 比较时条件翻译失败(TranslatorGenMixin L517 根因)。仿枚举成员访问,translate_attribute 增加变体引用 → tag 常量。2) kind() 特殊处理在运行时类型退化(联合 i8*)时无法识别 REnum 类,补变量注解类名兜底。
|
2026-08-29 10:28:39 +08:00 |
|
TermiNexus
|
58d61badcb
|
fix(tpv): 跨模块调用返回类型解析支持 import 别名(GenApi.translate_printf_call)
模块限定调用 GenApi.translate_printf_call 的 mod_ret_sha1 用 LookupSha1ByModName(别名) 查不到 → None → 误走裸名外部函数路径 fatal_if_unknown=1 fail-fast 误杀。改经 _resolve_module_sha1(LookupModNameByAlias 别名还原 → 精确/后缀)解析,与 L620-629 模块归属校验的既有模式一致。
|
2026-08-29 10:14:32 +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
|
9af7b2ead4
|
fix(tpv): from . import Y 跳过包目录名 SHA1 校验(无 __init__.vp 目录包)
from . import CallGenBase(CallGenCall.vp L12)解析后 resolved 是包目录名 lib.core.Gen.Call——无 __init__.vp 的目录包也允许这样导入,目录本身不是模块文件、无 SHA1,对它做 _check_import_sha1 恒失败误报。真实目标子模块 pkg.Y 由下方 LookupSha1ByModName/本地兄弟文件分支逐个校验,此处跳过包级校验即可。
|
2026-08-29 09:48:42 +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
|
99ddff2d87
|
fix(tpv): t.CArray/t.CPtr 下标元素解析失败改为返回 None 交多遍收敛
阶段2 删 map_t_type stdint 硬编码后,UINT 等 typedef 仅经 CTypedef 动态表解析;Phase 1a(declare_only=1)无 vpi 注入,依赖 typedef 的类(zhuff_code)被跳过,导致 t.CArray[zhuff_code, N] 元素解析被误 fatal 中断编译(zhuff.vp L19 根因)。与裸名 CArray 路径及 ClassGenDef 字段 pending 机制保持一致,真实类型错误由 Phase A 收敛检查暴露。
|
2026-08-29 09:01:42 +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
|
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
|
6540e27844
|
fix(tpv): translate_attribute 读路径字段未找到时标记 _deps_pending
- fileio.vp li.QuadPart 报错:LARGE_INTEGER(win32base)未编译时只有 vpi
空 stub,读路径字段查找失败未标记 pending → 直接 fatal 中断多遍收敛
- 读路径对齐写路径:字段未找到 → 标记 trans._deps_pending=1 下遍重译
|
2026-08-29 08:14:25 +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
|
0b0cf5ba66
|
refactor(tpv): _parse_type_string 用 Expression 注解访问 body(源头修正后简化)
- ast.parse_expression 返回注解已改为 Expression | t.CPtr(includes/ast),
expr_node 直接以 Expression 注解声明,去掉强转与 kind 检查
|
2026-08-29 07:26:12 +08:00 |
|
TermiNexus
|
f75a4d795a
|
fix(tpv): _parse_type_string 的 expr_node.body 修正——Expression 包装强转访问
- parse_expression 返回 Expression 节点,body 是 Expression 类字段
(stmts.vp),ast.AST 基类无 body 字段(仅 children)
- 原注解 ast.AST 直接访问 expr_node.body 类型错误;补 kind 检查 +
(ast.Expression) 强转后访问
|
2026-08-29 07:23:13 +08:00 |
|
TermiNexus
|
9e72393a11
|
fix(tpv): ExprGenName 三处 LLVMType.Int8() 模式修正为 Int(bits)+bits==8
- LLVMType 是 REnum,整数变体统一为 Int(Bits 字段),无 Int8 变体;
Int8 仅是模块级工厂函数(返回 Int(8)),LLVMType.Int8 类成员不存在
- case llvmlite.LLVMType.Int8(): 永不匹配 → T|t.CPtr 退化 i8* 的
8 字节步长 GEP 特判静默失效(走 i8 1 字节步长,指针截断)
- 三处(L858/1049/1087)改为 case Int(bits) + bits==8
|
2026-08-29 07:19:36 +08:00 |
|
TermiNexus
|
ec4fb0bcf8
|
refactor(tpv): ClassGenVTable 的 self._mangle_name 统一为 self.Gen.FuncGenBase 显式调用
- 继承链 ClassGenVTable→ClassGenBase(无父类)不含 FuncGenBase,
5 处 self._mangle_name 沿 MRO 解析不到定义(依赖编译器兜底)
- 统一为 self.Gen.FuncGenBase._mangle_name(对齐项目其他 Mixin 写法)
|
2026-08-29 07:16:43 +08:00 |
|
TermiNexus
|
98efd9b1d2
|
fix(tpv): __sizeof__ 模块限定类按模块归属匹配,防跨模块同名类误匹配
- w32.win32base.SECURITY_ATTRIBUTES.__sizeof__() 仅取 attr 丢失模块前缀,
get_struct_type 裸名全局匹配误命中跨模块同名类(FieldCount=0)
- Attribute 形式保留完整模块路径(w32.win32base.SECURITY_ATTRIBUTES),
结构体查找先按模块归属 find_struct_by_module 精确匹配,miss 再裸名
|
2026-08-29 07:06:11 +08:00 |
|
TermiNexus
|
8a69719acf
|
fix(tpv): 裸名 typedef 强转改 resolve_typedef_or_map 统一口径(BYTEPTR 等)
- 阶段2 删除 map_t_type 的 stdint 别名后,BYTEPTR(x) 裸名 typedef 强转
判定 map_t_type 返回 None → 误走外部函数路径 fail-fast
(string.vp L104 TypeError 根因)
- 裸名 typedef call(BYTEPTR/HANDLE/size_t 等)改经 resolve_typedef_or_map:
CTypedef 动态表优先 + t/c 核心 map_t_type 兜底,所有 CTypedef/t 库类型
call 恢复强转语义
|
2026-08-29 06:22:30 +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
|
2610f361fd
|
fix(tpv): 泛型特化名分裂——嵌套泛型实参递归 SHA1 规范化(_Type.md 问题 7)
- _norm_type_arg_name 顶层 '|' 分割改括号感知(list[A|B] 不再误分)
- 新增嵌套泛型实参递归:list[list[AST]] → list[list[{sha1}.AST]],
内部按顶层 ',' 分割逐个 SHA1 规范化
- 所有 module 表示统一为 Hash Namespace({SHA1}.Class),消除跨模块
特化名分裂(undefined symbol)
|
2026-08-29 05:51:49 +08:00 |
|
TermiNexus
|
4415f1f38b
|
fix(tpv): 窄化截断加常量溢出诊断(_Type.md 问题 8)
- coerce_to_type 宽→窄 trunc 前检测编译期常量正溢出目标位宽无符号
范围 → fatal_error(OverflowError),消除 buf[idx] = 0x1FF 类静默截断
- 负常量按模 2^bits 语义放行(-1 → 0xFF 合法);非常量运行时窄化保留
trunc(值域可能安全,无法静态判定)
|
2026-08-29 05:48: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
|
5551db3432
|
fix(tpv): try_extract_callable_ret 调用多传第 6 个参数(签名仅 5 参数)
- ab0f37e 引入:误加尾参 0(疑为 depth 参数),签名实为 (pool, annot, imported_modules, from_imports, trans)
- 删除多余参数,恢复 5 参数调用
|
2026-08-28 15:35:28 +08:00 |
|
TermiNexus
|
85e7011b6c
|
refactor(tpv): INTPTR/UINTPTR 去硬编码,依赖 stdint.vp CTypedef 声明
- map_t_type 删除 INTPTR/UINTPTR = Ptr(i32) 硬编码(与 stdint.vp L10/L14 声明重复)
- INTPTR = t.CInt|t.CPtr、UINTPTR = UINT|t.CPtr 由 CTypedef 动态查表解析(L1377 先于 map_t_type 兜底)
- stdint.vp 成为单一事实源;语义不变(INTPTR 是 int* 历史命名,非 C 标准 intptr_t 整数)
|
2026-08-28 15:33:45 +08:00 |
|
TermiNexus
|
8445af93d2
|
fix(tpv): 泛型污染检测改 token 边界匹配(根治 strstr 误杀合法特化)
- _list.vp L57 elem_ptr: T | t.CPtr 在 list[AST|t.CPtr] 特化时被误报污染:strstr('e9dfb296a8674aee.AST|t.CPtr', 'T') 把 AST 内部字符 T 当参数名
- 新增 _str_contains_ident:独立标识符检测(两侧非字母/数字/_),实参内部字符不算污染
- T→T 完全自映射仍直接报错(明确污染);子串场景按边界判定
|
2026-08-28 15:06:30 +08:00 |
|
TermiNexus
|
27ba74c720
|
fix(tpv): REnum 别名表去指针化(class 槽位改 perm_pool 字符串 + strcmp 内容比较)
- _register_renum_field_alias: class_name strcpy 到 perm_pool,去重检查改 strcmp
- _lookup_renum_field_alias/_lookup_renum_field_alias_ty/_lookup_renum_member_ty: 指针值比较改 strcmp 内容比较
- 删除 _update_renum_alias_class_ptr 及调用点(去指针化后无需指针统一)
- 根治 'LLVMType 字段 Pointee 未找到' 反复报错(注册 AST 指针 vs 查找 entry.Name 池拷贝指针恒不等)
|
2026-08-28 15:00:50 +08:00 |
|
TermiNexus
|
a8eb7fe5fe
|
fix(tpv): 类型静默退化改编译期报错 + 统一整数拓宽 zext/sext
- FuncGenDef: 有返回注解但解析失败 → fatal_error(不再静默回退 i32;无注解函数保留 i32 默认)
- TypeGenResolve: 泛型类型实参污染(T→T 自映射 / 实参含类型参数名)→ fatal_error(不再 return None 静默退化)
- ExprGenBase: coerce_to_type 窄→宽接入 _zext_or_sext_val(i1/i8 默认 zext、无符号类型名 zext、否则 sext),修正 t.CUInt32T 等无符号值被符号扩展的隐蔽数据损坏
|
2026-08-28 14:57:46 +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
|
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
|
19171ee165
|
feat(tpv): vpi 预生成失败输出失败文件路径与原因(含 AST 解析错误行列)
|
2026-08-28 08:05:46 +08:00 |
|
TermiNexus
|
6daec5fa58
|
feat(tpv): translate_unaryop 支持单目 * / &(Deref/AddrOf)
|
2026-08-28 07:35:03 +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
|
907f7892f9
|
fix(callgen): 跨模块返回类型解析的 mod_ret_sha1 显式初始化 None,修复裸名调用读栈残留崩溃
- CallGenMixin.translate_call 中 mod_ret_sha1 原声明在 Attribute 分支内、
elif mod_ret_sha1 is not None 在外层读取,裸名调用(cl.func 是 Name,
如 LLVMModuleCore.CreateGlobalInt 内裸名 create_global_int)时该 alloca
从未 store,读到栈残留垃圾(0x1)→ _LookupMethodRetTyFromTextLL 的
strlen(0x1) 零页访问(llvmlite/__init__.vp 翻译时 0xC0000005)
- 前移声明并显式初始化为 None,裸名调用不再进入跨模块返回类型解析
|
2026-08-27 15:52:09 +08:00 |
|
TermiNexus
|
c54e87bd6d
|
fix(imports): from . import Y 的 Y 是包内符号(非子模块)时跳过 SHA1 校验
- translate_import_from_module 对 from . import Y 曾无条件把每个 name 拼成
resolved.Y 当子模块校验 SHA1 → json/__parser.vp 的 from . import JsonValue
等符号(json/__init__.vp 定义)被误报"模块 json.JsonValue 未注册 SHA1"
- 仅在完整名已注册 SHA1(真子模块)或本地文件时才校验+登记;符号映射
由 translate_import_from_names 的 from-import / re-export 处理
- 顺带:Reexport 懒初始化改用 CompilerFactory.factory.PermPool(配合 TPC
跨模块全局写端修复)
|
2026-08-27 14:27:24 +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
|
07db560510
|
fix(gen): 裸名回退时 malloc/calloc/realloc/alloc/alloc_buf 的 size 参数按 i64 提升——desktop 第 4 次 mm.malloc 返回值被破坏收到 0x0、用户 App vpsdk malloc 同理
|
2026-08-27 00:55:52 +08:00 |
|
TermiNexus
|
f185241a71
|
fix(gen): translate_subscript 支持 Slice 切片表达式(a[start:end])——此前返回 None 导致函数实参被丢弃(create_process(path[n:],entry) 丢 name、entry 错位 → p.entry 垃圾 → 用户进程 iretq 垃圾地址 PF)
|
2026-08-27 00:45:22 +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
|
d082bb3996
|
debug(exprgenattr): 字段查找 arg/func 时打印 attr/类型/索引/实际字段名,定位 Thread.arg 索引错解析成 func(3) 根因
|
2026-08-26 23:40:22 +08:00 |
|
TermiNexus
|
d8286295d1
|
fix(callgen): 外部函数返回类型白名单补 malloc→i8*,修复跨模块裸名 @malloc 调用返回类型推断为 i32 截断 64 位指针(uhci frame list / desktop bg_row_buf 判 None 根因)
|
2026-08-26 22:56:35 +08:00 |
|
TermiNexus
|
ecfa47bd3c
|
fix(callgen): 跨模块裸名 CExport 调用精确解析返回类型,依赖未编译时 _deps_pending 重试,修复 malloc 返回截断 i32
|
2026-08-26 22:44:46 +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
|
5d121f7166
|
fix(funcattrs): stackrealign 是 LLVM 字符串属性需带引号,否则 llc 报 expected '{'
|
2026-08-26 22:07:42 +08:00 |
|
TermiNexus
|
0d4b7ff491
|
fix(funcattrs): 显式传 max_len 并兜底 0,修复方法默认参数缺陷致属性文本全被丢弃
|
2026-08-26 22:03:57 +08:00 |
|
TermiNexus
|
ec45dd0195
|
debug(funcattrs): 打印 _append_str max_len 实际值与写入后 strlen,定位 attrs 变空根因
|
2026-08-26 21:59:09 +08:00 |
|
TermiNexus
|
f27a32b9f4
|
debug(funcattrs): 诊断加当前文件名,区分 VKernel/Scene3D 等模块编译
|
2026-08-26 21:52:26 +08:00 |
|
TermiNexus
|
e9a60273a7
|
debug(funcattrs): 第二轮诊断——dump decorator AST/args/kwargs/模块SHA1,确认第三个属性参数去向
|
2026-08-26 21:32:29 +08:00 |
|