Commit Graph
390 Commits
Author SHA1 Message Date
TermiNexus cc3359faea refactor(tpv): 形参类型注解解析失败改 fail-fast(不再静默用 i32)
- FuncGenDef 前向声明形参 / 定义签名形参:resolved is None 即 fatal
- FuncGenBase create_function 形参:同上(暴露调用方未传 trans 上下文)
- ClassGenVTable _translate_method 形参:同上(签名/调用点/实现体三方一致)
- TypeGenCDef 整数 CDefine 值缓冲分配失败改 fatal(对齐同文件浮点/字符串分支)
- FuncGenMixin._type_byte_size 类型缺失改 fatal(case _ 保留 8,注释说明无布局查询能力)
2026-09-11 22:14:10 +08:00
TermiNexus 22c71388d4 docs(tpv): 更新 TypeSpec 注释(IsPtrElement 已删,仅容器种类待后续) 2026-09-11 22:09:32 +08:00
TermiNexus a4bc5dc0ce refactor(tpv): 删除 IsPtrElement 字段,指针元素语义承载于 Spec.ElemBits
- TypeSpec 抽 _spec_clone(消除 SpecWithSign/Source/ElemBits 三处重复逐字段拷贝)
- 新增 SpecWithElemBits:覆盖元素槽位宽(独立副本不驻留,ElemBits 不在驻留键内)
- set_var_ptr_element 改写 Spec.ElemBits=64;Spec 不可承载(非指针/缺失)即 fail-fast
- 新增 var_is_ptr_element(PtrLevel>=1 且 Elem.Bits==8 且 ElemBits==64,排除真实 i64* 与纯 str)
- ExprGenName 4 处下标读写切读该入口;GenTypes 删 VarEntry.IsPtrElement
2026-09-11 22:09:18 +08:00
TermiNexus e55ec5fde0 docs(tpv): 更新 TypeSpec 设计注释至 S4 现状(TypeStr/AnnotClassName 已删) 2026-09-11 22:06:20 +08:00
TermiNexus 9e461d21cb refactor(tpv): 删除 AnnotClassName 字段,注解类名统一承载于 Spec.SourceName
- GenTypes 删 VarEntry.AnnotClassName / FieldEntry.AnnotClassName
- set_var_annot_class_name / add_field 改为写入 Spec(Spec 为 None 时建 TS_UNKNOWN 承载,
  不表态具体类型,等价原 Spec 缺失);删 1b 的 AnnotClassName 专属深拷贝
- var_annot_class_name / get_field_annot_class_name 去旧字段回退分支
- 剩余 7 处直读(StmtGenCifMixin list/dict 5 处、CallGenMixin CPtr 2 处)改走封装
2026-09-11 22:06:00 +08:00
TermiNexus 95133d8483 refactor(tpv): 变量/字段注解类名读取统一走 Spec.SourceName 封装
- VarGenMixin 新增 var_annot_class_name(SourceName 优先,回退 AnnotClassName)
- 变量侧类名恢复与诊断读取切读:ExprGenAttr(5) / ExprGenOps(6) / ExprGenName(1)
  / CallGenDispatch(3) / CallGenCall / CallGenProp / CallGenVt / ExprGenCls / AssignGenMixin / MatchGenMixin
- ExprGenAttr 字段侧直读改走 get_field_annot_class_name
2026-09-11 22:02:28 +08:00
TermiNexus 8aad248c25 fix(tpv): SpecWithSign 不复制 SourceName,避免驻留表来源名污染
InternSpec 键不含 SourceName,若带来源名的副本入表,后续同键查找会把该来源名
污染给无关条目(键相同必须语义相同 ⇒ 表内实例 SourceName 恒为 None)
2026-09-11 21:54:29 +08:00
TermiNexus 029a423f55 feat(tpv): Spec 增 SourceName 承接注解来源名(类名块基础设施)
- TypeSpec 新增 SourceName 字段:注解书写形态名(裸名/模块限定名/t.XXX attr/mangled),
  与 BaseName(LLVM 注册名)命名域不同;不参与驻留键,避免条目暴增与线性查找变慢
- 新增 SpecWithSource(独立副本、不驻留、幂等)/ SpecSourceName 读取入口 / _spec_set_source_name
- set_var_annot_class_name 与 add_field 注解侧填 SourceName
- get_field_annot_class_name 切读 SourceName 优先(3 个调用点自动生效)
2026-09-11 21:54:10 +08:00
TermiNexus 7028399366 refactor(tpv): 无符号判定切读 Spec(条目级 TS_UINT 优先)
- 新增 _entry_spec_unsigned:Spec.Kind==TS_UINT 为注解明确无符号的强信号
- _node_type_unsigned 的 Name/Subscript 分支、Attribute 字段分支切读 Spec 优先
- 只切无符号方向(TS_INT 含未表态,不可反推 SIGNED,仍走字符串真源)
2026-09-11 21:51:11 +08:00
TermiNexus 7fedf8daad feat(tpv): Spec 注解侧填符号性(SpecWithSign + 变量/字段接入)
- TypeSpec 新增 SpecWithSign:整数 TS_INT↔TS_UINT 切换 + 驻留(SpecToText 键区分符号)
- set_var_annot_class_name 接入:注解类名提取符号性,补 Spec 无符号性
- add_field 接入:字段注解类名提取符号性,补 Spec 无符号性
2026-09-11 21:48:23 +08:00
TermiNexus 0a108e6289 refactor(tpv): 删除 FuncEntry.TypeStr 旧路径,函数类型文本改由 Spec 派生
- 删 FuncEntry.TypeStr 字段、_build_func_type_str 生产者、_check_func_spec_text 闸门
- update_global_func_typestr 改名 update_global_func_spec,仅填 Spec(去 pool 参数)
- ClassGenVTable vtable 合并 func_valid 分支,统一 SpecToLLVMText 派生
- 同步 FuncGenDef/ClassGenVTable/GenApi/VpiReader 调用点
2026-09-11 21:33:58 +08:00
TermiNexus a173ba0296 refactor(tpv): ClassGenVTable vtable 类型文本切到 SpecToLLVMText
- 删除 _format_func_type_str(512 缓冲 + >100 参截断的 TypePrint 重复实现)
- _generate_vtable 当前类方法分支改为 SpecToLLVMText 派生,回退全局表 TypeStr
- Spec/TypeStr 皆失败时 fail-fast
2026-09-11 21:21:01 +08:00
TermiNexus 0e973d5f23 feat(tpv): SpecToLLVMText 格式化器与函数签名一致性闸门,并修驻留键静默截断
- SpecToLLVMText/_spec_llvm_text/_spec_llvm_append 逐分支对齐 llvmlite.TypePrint
- CallGenLeafKit.update_global_func_typestr 增 _check_func_spec_text 闸门,不一致即 fatal
- _spec_text_append 溢出返回哨兵;_spec_to_text 各结构分支检查哨兵
- SpecBaseText 前缀先算长度;InternSpec 键装不下返回完整实例不写截断键
2026-09-11 21:13:28 +08:00
TermiNexus ff7caa57e8 feat(tpv): S3 条目双写接线,三个唯一创建点填 TypeSpec
- GenTypes: VarEntry / FieldEntry / FuncEntry 各加 Spec 字段(FuncEntry 合并为单个整签名 Spec,替代设计 D4 的 RetSpec+ParamSpecs,理由见注释)
- VarGenMixin: add_var 新增 _spec_of_var_alloca,用 alloca.Ty 的 pointee 构造 Spec(is_ptr_type 判定)
- StructGenMixin: add_field 统一在两条写入分支之后填 Spec(PermPool 驻留故无需 DeepCopyType)
- CallGenLeafKit: _register_global_func / add_func_to_table 初始化为 None;update_global_func_typestr 新增 _build_func_spec 填整签名 Spec(用 function_get_param_head 两遍遍历,变参取 func.IsVarArg,避免 SpecFromLLVMType 的 Func 分支丢变参)
- 注: 当前尚无读取方;驻留表溢出会导致该条目 Spec=None(已记录,S4 改 fatal)
2026-09-11 20:43:17 +08:00
TermiNexus f0deff931d refactor(tpv): S3 无符号判定切读真源,指针层级收拢到 TypeSpec
- ExprGenOps: _type_name_unsigned / _annot_str_unsigned 改为真源优先(UNSIGNED->1 / SIGNED->0),仅真源不表态 UNKNOWN 时按需回退旧子串路径(热路径避免双份开销)
- ExprGenOps: 删除 S2 的双写一致性闸门 _spec_sign_check(切读后读即取真源,比对恒等、无意义)
- TypeSpec: 新增 SpecTypePtrLevel -- 指针层级推导的唯一实现,原 get_ptr_level 记录的 match codegen 缺陷规避写法随实现移入
- ExprGenBase: get_ptr_level 删去同码副本,改为委托 TSpec.SpecTypePtrLevel(行为等价)
- TypeGenCType: spec_sign_of_annot 注释更新为无符号判定的读入口
- 注: 值级切读(读 Spec.PtrLevel)仍需条目双写(VarEntry.Spec / FieldEntry.Spec 等)接线,S2 路线 C 未做,留待下一步
2026-09-11 20:40:26 +08:00
TermiNexus b7100e9dc1 feat(tpv): S2 落无符号判定双写闸门,并修 i8 拓宽丢符号与 WCHARPTR 旧判
- TypeSpec: 新增 SpecFromLLVMType(LLVM 类型 -> TypeSpec 结构转换器,当前无调用点);SpecSignFromTypeName 拆出零分配切片版 Span
- TypeGenCType: 新增 lookup_ctypedef_span 与独立符号性真源 spec_sign_of_annot(精确名白名单 + CTypedef 链逐层展开)
- ExprGenOps: 旧判定改名 *_legacy,外层加双写闸门 _spec_sign_check(新真源明确表态且不一致即 fatal;S2 不切读)
- ExprGenOps: 修旧符号性两个洞 -- 子串表补 WORD、裸别名沿 CTypedef 链展开(闸门实测暴露 WCHARPTR 旧判 signed、新真源 unsigned)
- ExprGenOps: should_zext_widen 的 i8 分支补「源注解明确有符号则 sext」例外,修 b8470c1 引入的 TypeCastTest 回归(t.CInt32T(v) 丢符号);新增 _node_type_signed
- TypeGenBase: 补 import lib.core.Gen.Type.TypeSpec(此前遗漏)并接入驻留表 ensure_spec_arena(PermPool 惰性创建)
- 修两条链接错误: TypeSpec.vp 残留 stdlib.atoi 改 string.atoi;模块别名与模块内类名同名会被误解析为该类静态方法(隐式补 self 实参),四处导入别名统一改 TSpec
2026-09-11 20:32:55 +08:00
TermiNexus b1090abe70 feat(tpv): 新增 TypeSpec 统一类型描述符(S1,未接线)
类型信息目前散落在 AnnotClassName/IsPtrElement/TypeStr 等字符串与布尔里,
导致「无符号/指针层级/数组维度/函数签名」到处重复解析且结论不一致
(Debugger/_Type.md 二次盘点 A/C 类)。

新增 App/lib/core/Gen/Type/TypeSpec.vp 作为统一描述符:
- TypeSpec:Kind/Bits/IsSigned/PtrLevel/Elem/ArrayCount/BaseName/Ret/Params/
  ParamCount/IsVarArg/Storage,以及元素语义三元组 ElemBits/IsElemPtr/
  DerefBase(替代单一 IsPtrElement 布尔——同一 Ptr(i8) 下存在两种相反语义)
- TypeSpecArena 驻留表(对象持有,非全局表)+ InternSpec 去重(键=规范文本)
- SpecToText/TextToSpec 规范文本编解码(驻留键/日志/vpi 通道)
- 构造器 NewTypeSpec/NewTypeStruct/NewTypePtr/NewTypeArray/NewTypeFunc
- 访问器 SpecIsPtr/SpecPointedTo/SpecIsUnsigned/SpecBitWidth
- SpecSelfCheck 自检(不参与编译流程)
- 实例与数组一律 PermPool 分配(跨 mark 持久,跨模块可直接传指针)

GenTypes 仅加 import 使该模块参与编译(否则新文件不会被编译、无法验证);
未改动任何既有调用点,产物 IR 应与上一版一致。
2026-09-11 20:02:52 +08:00
TermiNexus b8470c1cae fix(tpv): 拓宽方向统一为单一真源,并修 TypeStr 变参与 should_zext_widen 缺参
三项独立缺陷(均来自类型系统盘点 _Type.md D7):

1) should_zext_widen 签名缺 trans 形参,函数体内的 trans 退化为隐式全局(恒
   None),而 translate_binop 两处调用早已在传第 5 实参(被静默丢弃)⇒ 注释所
   述「源无符号 → zext」补救从未生效:Name/Subscript 形态的无符号源(uint16/
   uint32 变量、数组元素)在比较/二元路径恒被 sext 扩展(ide.vp/timer.vp 根因)。
   修:should_zext_widen 补 trans 形参并明确为拓宽方向的单一真源;
   translate_compare 两处补传 trans;ExprGenBase._zext_or_sext_val 改为委托
   should_zext_widen(wide_val=None 使「宽侧常量」启发式自然失效)。

2) _translate_t_type_cast 原以「目标类型名符号性」决策整数拓宽,且 target_name
   未知时默认 zext,与 coerce_to_type / should_zext_widen 的默认 sext 极性相反。
   修:统一由源的符号性决定(与 coerce 同源),并删除已无使用点的 target_name
   形参(1 处签名 + 7 处调用点)。

3) TypeStr 生成(FuncEntry.TypeStr 的唯一生产者)与其现算现用副本
   (ClassGenVTable._format_func_type_str)都未打印变参后缀 ...,而 FuncGenDef
   对 *args 会设 IsVarArg=1,且继承方法强制走 TypeStr 回退 ⇒ vtable 中的函数
   指针类型与真实签名不符。修:按 llvmlite IR 打印规则补齐(有参 ", ...",
   无参 "...")。
2026-09-11 19:57:18 +08:00
TermiNexus c71642dca0 清理一部分异 2026-09-11 18:55:33 +08:00
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