TermiNexus
|
59865b2a3a
|
feat(TPV): void 值操作 fail-fast(声明 void 变量 / 把 void 值当值用一律报 TypeError)
承上一笔(裸名 void = t.CVoid 别名,仅 `void*` 与 `typedef 不透明结构体 = void` 可用):
- ExprGenBase.coerce_to_type 顶部:void 值被 coerce 到**非 void** 目标(赋值 / 传参 /
返回 / 二元运算对齐)直接 fatal_error(TypeError),不再按 LLVM void 硬拼出非法 IR
("load void" / "bitcast ... to void");void → void 属无值传递,放行。
- AssignGenMixin.translate_annassign:注解解析结果为 void 时禁止声明该变量
(否则会按 LLVM void 建槽)。
|
2026-10-01 21:39:48 +08:00 |
|
TermiNexus
|
b289e93650
|
fix(泛型实参 T* 形): 补齐 T* 消费侧(VpiReader 段解析 / AnnotClassName 提取 / 构造推断)
唯一规范形 T*(rawptr[T] ≡ t.CPtr[T] ≡ T|t.CPtr,见 83baf5a/2b2b70e)落地后,
所有"读**已归一实参文本**或**结构体名**并做文本解析/嗅探"的点都必须接受 T* 形,
否则会**静默**走错分支(不是报错,更难发现):
- VpiReader._resolve_single_vpi_type_str:尾随 * 段按层重写回 rawptr[...] 文本形
再走原分支(与既有 rawptr[ 分支逐字等价)。必须补的原因:_subst_template_arg
用特化类名 [...] 内的**已归一实参**替换模板注解里的 T,喂进来的就是 {sha}.AST*;
旧代码只认 rawptr[ / t.CPtr[ / 裸 t.CPtr ⇒ 落到 strrchr('.') 取末段 "AST*"、
查 struct miss ⇒ 返回 None/i8*,跨模块参数/返回宽度被悄悄收窄。
- ExprGenCls / AssignGenMixin 的 _extract_annot_class_name(各 2 处):段尾剔除集
补 '*',剥后再 find_struct(旧形态 {sha}.AST|t.CPtr 按 '|' 分段能命中,新形态
不剥则 miss ⇒ 返回 None ⇒ 链式 .get(0).kind() 分派退化)。
- CallGenCtor._infer_generic_ctor_type_arg:新增 _ptr_layer_type_arg —— 先经
_norm_type_arg_name 归一(保证类名带定义模块 SHA1,否则裸 "AST*" 无法再归一、
反而新分裂),再按 VarEntry/FieldEntry 的 Spec.PtrLevel 补 '*',使构造侧推出的
类型实参与注解侧同票名(否则 Box(x) 这类隐式特化分裂成两个结构体)。
- CallGenDispatch.__sizeof__:'*' 判据由 strrchr 改为**尾随**判定 —— 原写法会把
list[{sha}.AST*](元素为指针的容器)误判成指针并返回 8。
现场:Test/AstTest/App/main.vp:21 的 list[ast.AST | t.CPtr] | t.CPtr 特化链
(→ includes/_list.vp:36 T.__sizeof__())。
|
2026-09-30 21:16:48 +08:00 |
|
TermiNexus
|
849001ae9e
|
fix(AssignGen): 禁止注解声明类型被右值继承上转窄化
TPV 侧「注解退化修复」只挡了裸泛型基类降级,漏挡「注解写明基类、右值是派生类」的上转窄化:node: rawptr[AST] = Name(...) 会把 alloca 重建成 Ptr(Name),随后 node = <返回 rawptr[AST]> 变成被禁止的父→子下转(includes/ast/parser.vp:1919 报 指针隐式转指针已禁止:%AST* → %Name*)。补上与 TPC HandlesAnnAssign._rb_is_upcast 同判据的守卫(复用 ExprGenBase._is_inheritance_upcast)。
|
2026-09-30 19:08:58 +08:00 |
|
TermiNexus
|
af5fba81c5
|
fix(transpyv): 严格指针规则下的源码级窄化与跨层指针写法修正
c 源码违规(按新严格指针规则的显式书写):
1) AssignGenMixin.vp 属性赋值:target 是基类 ast.AST*,而
CallGenProp._try_property_setter 形参是 ast.Attribute*。基类指针传派生类形参属
向下转型,严格指针规则下禁止 ⇒ 在 ASTKind 判据确定为 Attribute 后显式窄化
`at_tg: ast.Attribute* = ast.Attribute*(target)`,并复用到 fd_an(不再重复窄化)。
2) TypeGenResolve.vp `return (str | t.CPtr)(v)`:`(str | t.CPtr)` 语义是 i8**(char**),
而该函数声明返回 i8*,声明/返回层数不符 ⇒ 改为 `t.CPtr(v)`(i8* 显式转换)。
同文件另含仓库内既有书写统一(ast.OpKind.USub 全限定名、rawptr(...) 取代
(str | t.CPtr)(...)、空行/续行缩进整理),无行为变化。
|
2026-09-28 19:40:42 +08:00 |
|
TermiNexus
|
d579d70113
|
fix(TransPyV): 修正形参/字段链节点的注解为 llvmlite.ParamNode*
c 类(源码违规):这些变量由 new_param_node 构造、或取自 get_struct_fields /
param_list_append / function_get_param_head,实际是 llvmlite.ParamNode 链节点,
注解却写成 llvmlite.Function*。旧的无条件指针 bitcast 掩盖了该错误,严格指针规则下暴露。
涉及:VarGenMixin / CallGenVt / VpiReader / ClassGenEnum / ClassGenVTable /
ExprGenName / FuncGenMixin / FuncGenDef / TypeGenResolve / TypeSpec /
StmtGenCifMixin / AssignGenMixin(纯注解替换,零语义变化)。15 行。
|
2026-09-28 17:54:13 +08:00 |
|
TermiNexus
|
4255ab9d32
|
fix(fstr): f-string 改回每站点栈缓冲 + 禁止逃逸,逃逸点改 stdlib 拷贝
ExprGenFstr._fstr_finalize:结果缓冲改回每站点栈 alloca(线程安全、零运行时依赖;每站点各建一个,站点之间不再共享),docstring 与文件头写明语义:f-string 结果是当前函数内的临时值。
GenApi 新增唯一判据 fail_if_fstring_escape 与唯一拷贝出口 escape_fstring_copy(stdlib.malloc + string.strcpy);逃逸位置接护栏:translate_return(函数返回值)、translate_assign(字段/元素/全局变量赋值)、handle_module_level_var(模块级 AnnAssign 初始化)。
编译器自身 7 处逃逸点(ExprGenBase._cast_fail_where 6 处、AssignGenMixin.const_assign_msg 1 处)改为 escape_fstring_copy 显式拷贝——正是造成 ASan stack-buffer-underflow in vsnprintf 的那条路径。
残留(已在 GenApi 头注释诚实记录):间接逃逸(把 f-string 传进会保存它的函数、或放进容器后带走容器)静态判不出;类字段默认值路径未接护栏。全仓自查:TransPyV/App、includes、ViperApps 均无 容器/字段/全局 存 f-string 的写法,也无残留 return f-string。
|
2026-09-27 14:45:28 +08:00 |
|
TermiNexus
|
cf815b17de
|
feat(gen): volatile 构造写入落 LLVM volatile(逐字段 store + 构造三方法屏障)
值位置 volatile 前缀(a: int = volatile f() / a: S = volatile S(...))此前只在调用点无落点。LLVM 的 call 指令没有 volatile 限定符,故语义只能落在内存存取上:
- AssignGenMixin:赋值目标的结果槽按 volatile 存取(本次 store 立即带 volatile,并登记 VarEntry.IsVolatile 使后续 load/store 亦带);对已存在的 global/nonlocal/mod_glob 条目在分支前统一登记。
- CallGenCtor:_translate_struct_ctor / _translate_struct_ctor_kw / _translate_renum_construct / _apply_struct_defaults 增加 is_volatile 参数,清零、tag、默认值、逐字段 store 全部带 volatile;_translate_generic_ctor_call 直接从 cl.IsVolatile 取。
- CallGenCall._call_method_on_ptr 增加 is_volatile 参数:__new__/__before_init__/__init__ 的写入发生在被调函数内部,调用点无法逐条附加 volatile,故在调用后对该 self 指针追加一次 i8 volatile load 作为内存屏障,使构造写入不被优化器消除或跨越重排。
- CallGenMixin / CallGenDispatch:结构体、关键字、泛型、REnum 构造调用点统一透传 cl.IsVolatile。
|
2026-09-27 12:01:22 +08:00 |
|
TermiNexus
|
f084da7c01
|
feat(gen): 重复声明改为无条件失败(不再比较类型),global 后再注解同样报错
- 判据改为:模块级已有同名变量 + 函数内再次用注解声明同名变量 ⇒ TypeError 重复声明,不再比较注解类型是否与全局一致(此前仅在类型不一致时报错)
- 有 global/nonlocal 声明后再带注解声明同名变量也报错(注解与既有全局声明重复)
- 检查点前移到注解解析之前(紧跟 REPL 分支),保证优先于 coerce_to_type 报错
- 合法写法只剩两种:global + 无注解赋值修改全局;或换不重名的局部变量
|
2026-09-27 08:55:08 +08:00 |
|
TermiNexus
|
78fc7313fb
|
feat(gen): 同名全局 + 注解冲突优先报重复定义
- translate_annassign: 函数内(无 global/nonlocal、非模块级)再次注解同名变量时,若注解类型与模块级变量类型内容不一致 ⇒ TypeError 重复定义 fail-fast,不再延后到 RHS 的 coerce_to_type 报无关的「指针隐式转整数」(PointerTest/App/main.vp:46 _g_ptr: int = None,全局已是 t.CUInt32T | t.CPtr)
- 注解与全局一致时仍按 Python 语义遮蔽为独立局部变量(既有行为不变)
- 该检查走 _stg_ty_equal 内容比较(TypePrint),非地址比较,避免 Int32()/Ptr() 新实例造成误判
|
2026-09-27 08:50:18 +08:00 |
|
TermiNexus
|
f0309e4904
|
fix(gen,renum): 指针操作符目标写入落盘 + REnum tag 三侧口径统一,修 kind() CastError
- AssignGenMixin: 补 UnaryOp(Deref) 赋值目标分支(*p = v / *&x = *&y),非 Deref 的 &x/-x/~x fail-fast;*p += v 真正实现;Tuple/List 目标合并
- CallGenDispatch: kind() 改四级 REnum 判据(变体表 / struct __tag / pointee 带 __tag / X.field 声明类型反推);修正 build_load 第一参数误传指针类型 rk_tag_p(生成 load i32*, i32* 使返回值 Ty 为 i32*,导致 CallGenLib.vp:355 vk_a: int = val.Ty.kind() 报指针隐式转整数的 CastError),rk_load 分支同步改 rk_ty.Pointee
- CallGenCtor / MatchGenMixin: __tag 读/写/比统一取字段声明类型 FieldEntry.Ty
- Test/FieldReadTest: 字段读取探针
|
2026-09-27 00:19:44 +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
|
676c19c362
|
feat(asm,err,typedef): 支持 __asm__/__llvmir__ 裸名与 typedef 语法糖;解析报错统一 Python 风格 traceback
CallGenCBuiltin/CallGenDispatch: __asm__/__llvmir__ 裸名调用,asminp/asmout/irinp/irout 与裸 ASM_DESCR。
AssignGenMixin: 支持 define NAME: T = V 形式的 CDefine 浮点值恢复;负浮点(-1e308)剥一层 UnaryOp(USub)。
Phase1Main/Phase2: AST 解析失败改调 GenApi.dump_parse_traceback(Traceback + File/行 + 源码行 + caret)。
TypeGenResolve/TypeGenCType: typedef 文本扫描统一支持 typedef 语法糖(builtins/库/单文件三处共用同一解析)。
|
2026-09-25 13:11:16 +08:00 |
|
TermiNexus
|
a7af34bd7e
|
修正了部分代码的表达方式,最后可用版本,mlirlite 已基本完善
|
2026-09-23 17:41:49 +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
|
eb01a45024
|
修复了一些问题
|
2026-09-17 14:51:18 +08:00 |
|
TermiNexus
|
cb0836de8a
|
清理了 t.CVoid
|
2026-09-16 16:06:48 +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
|
617d4ea911
|
fix(gen/assign): 模块级与 nonlocal 分支补写赋值注解上下文通道
模块级 AnnAssign 的 mod_glob 分支与 global 语句分支、以及 nonlocal 分支此前均未写入 trans.CurAssignAnnot/CurAssignNode,导致模块级/闭包内 s: Stack[int] = Stack() 在泛型裸名构造处 fail-fast、x: int = c.Deref(p) 退化为 i8 单字节读取
按主分支既有先例(AssignGenMixin set 在 RHS 翻译前 / clear 在返回前)在三处分支补齐同款 set/clear,并覆盖全部分支的提前 return 与末尾出口,避免通道残留污染后续 c.Deref 读取宽度与泛型构造类型实参推断
影响面: 全仓 模块级/global/nonlocal 的 X: T = c.Deref(...) 与 X: Generic[...] = Ctor(...) 均 0 处,属纯增量
|
2026-09-15 21:52:42 +08:00 |
|
TermiNexus
|
0dd7511a9b
|
fix(tpv): 修常量折成0致alloc(0)与多处fail-fast,并落地热点优化
TypeGenCDef: CDefine 表名深拷贝(vpi 注入名为零拷贝指针且 vpi_buf 提前释放,悬空名致常量查出错误值 0)
VpiReader: 模块级 SHA1_LEN(16) 改名 SHA1_HEX_LEN,消除与 Phase1.SHA1_LEN(17) 的跨模块同名冲突
CallGenCall: 实参翻译失败/漏传必需实参改 fail-fast,禁用零值兜底(堵住 SHA1_LEN 未解析变 alloc 0 的通路)
MatchGenMixin: 序列 match 的 case _ 分支补容量守卫(原先会越界写穿 pool 块、破坏空闲链)
Phase1Main/Phase1Scan: 预扫描缓冲分配失败改 fail-fast;加临时取证打点
CallGenBase: find_func_in_module 4 趟链表扫描合并为 2 趟
ImportsGenMixin: import 查找加哈希索引(键为 NUL 结尾副本,未命中回退原扫描)
TypeGenBase/TypeGenResolve: 库 typedef 按模块一次性门禁与缓存
VpiReader: vpi 注解解析补 rowptr[T] 分支
|
2026-09-13 17:50:03 +08:00 |
|
TermiNexus
|
eef84657a1
|
fix(tpv): 修正 REnum 表按名查找与 match 分派,恢复 str() 指针强转
str() 对整数(sizet/i64)走 snprintf 十进制格式化(Python 语义),不是 i8* 强转;用它读 sizet|t.CPtr 联合表元素再 strcmp 永不相等 => _is_renum_class_name 恒 0、变体名查不到(__types.vp:407 bits / :159 Void 根因)。IR 实证 output/a8891afb66d3eda4.text.ll L5551-5558。
- ClassGenEnum: RenumClassNames/RenumVariantNames 读侧统一改 (str)(t.CVoid(x, t.CPtr));新增 _is_renum_by_entry 与 RenumTableDump;REnum 注册静默早退改 fail-fast
- MatchGenMixin/CallGenMixin: match 分派 2a/2b 与变体构造入口并上 by_entry 判据
- TypeGenResolve: 泛型下标 Phase B 解析不出特化时 fail-fast
- CallGenProp: 泛型特化名末段按括号外点切分
- CompilerFactory/ClassGenBase: REnum 注册表改挂编译期单例
- ClassGenDef: CEnum/REnum 分派歧义 fail-fast
|
2026-09-12 23:14:23 +08:00 |
|
TermiNexus
|
ea2abba574
|
refactor(tpv): 删除 _deps_pending 置位面与 Phase A pending 多遍收敛机制
69 个工程成功编译且 _phaseA_pending.log 恒 0 字节,证实 14 个置位点全部零命中。删除 14 个 _MarkDepsPending 调用点(原「依赖未就绪」分支保留默认类型或原报错路径);删除 _MarkDepsPending 与 _AppendPhaseAPending 及 _phaseA_pending.log 读写;删除 Phase A 出口「pending 则不写盘、回滚 MethodsEmitted、continue」整段;删除 _deps_pending 与 _pf_dbg_pend_flagged 字段及全部读取分支;清理遗留探针 [PF-DBG] 与 [METHDBG]。16 files changed, +37 / -558
|
2026-09-12 19:24:52 +08:00 |
|
TermiNexus
|
17f109e204
|
fix(tpv): 修复 vpi 重导出包前缀与 D25 变量名悬垂,补齐 fatal_error 刷盘
VpiReader 包 __init__ 重导出补包前缀,类注册与方法声明两遍化,按需注入依赖 vpi(先登记后注入防环,失败撤销登记);VarGenMixin 的 add_var 深拷贝变量名,符号表条目不再依赖 AST tree 生命周期;CallGenCall 的 list 内建与泛型基类判定类名来源回退到接收者实际 struct 名;TypeGenErr 的 fatal_error 退出前 fflush;StubMergerBuild 每模块重置 vpi 注入去重表
|
2026-09-12 19:00:19 +08:00 |
|
TermiNexus
|
3c45895878
|
fix(tpv): alloca 退化守卫收窄到「裸泛型模板基类」形态(避免误杀同名重声明换类型)
- parser.vp:964 'node: rowptr[AST] = Slice(...)' 命中上一版守卫(旧 alloca 是 Tuple*)——但 Tuple* vs AST* 是同名重声明换具体类,两者都是 8 字节指针槽,属合法用法,不该 fatal
- 收窄判据:仅当旧 alloca 的 pointee 是**裸泛型模板基类**(剥 sha1 前缀后不含 '[' 且 _find_generic_template 命中)时才 fail-fast —— 这正是 D25 的退化形态(丢类型实参 → 方法调用按错误元素类型特化 → 截断)
|
2026-09-12 15:24:23 +08:00 |
|
TermiNexus
|
590a6a2bbe
|
fix(tpv): 复用的 alloca 与注解类型不一致时 fail-fast(D25 alloca 退化根治)
- get_or_create_sym 只用「名字+作用域」复用(ty 不参与判定),可能命中类型不同的旧 alloca(同名重声明 / 退化 alloca,如裸 list* 对上 list[ast.ASTptr]*)→ alloca 类型与使用点注解类型分裂 → 方法调用按错误元素类型特化 → inttoptr 截断
- 只比较「双方都是指针且 pointee 都是结构体」这一最典型退化形态:结构体名不同即 fatal_error,报出变量名与两个类型,直接暴露退化点(不兜底)
|
2026-09-12 15:13:41 +08:00 |
|
TermiNexus
|
82eea2719f
|
refactor(tpv): rowptr[T] 迁移 + D 表定长缓冲改精确分配 + SHA1 前缀判定收敛(D1/D3/D4/D5/D6/D7/C10)
|
2026-09-12 11:09:35 +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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
ec2feea15b
|
尽可能修补 Gen 的导入
|
2026-08-22 10:53:26 +08:00 |
|
TermiNexus
|
01b45c0630
|
修正了 import 路径,修正了部分代码谬误
|
2026-08-22 02:29:08 +08:00 |
|
TermiNexus
|
e18609e184
|
feat(tpv): 支持 coro.Coroutine = c.Addr(task()) 就地解读句柄赋值
- c.Addr(Call) 分支:求值存临时槽(entry alloca)返回槽地址,
供 coerce 指针→结构体 load 就地解读(Coroutine={__ptr__} 8 字节)
- 协程登记扩展:c.Addr(async_call) 也登记 _coro_var_async
- 新增 _coro_frame_ptr_from_arg 统一提取帧指针:pointee 是 Struct
(Coroutine 变量,translate_value 返回 alloca 地址)GEP __ptr__ load,
普通指针 bitcast 直通;5 处拦截函数(run/destroy/exception/msg/gather)替换
|
2026-08-22 01:55:54 +08:00 |
|