TermiNexus
|
c2d7480f3d
|
fix(transpyv): 槽视图统一 cast 到声明类型(47 处,含 codegen 自身)
同 includes 的同类修正:把一级指针 i8* 隐式塞进二级注解(i8** / str*)。
TransPyV 侧 coerce(ExprGenBase._ptr_cast_reason)没有 TPC 那样的「值侧是显式
指针 cast ⇒ 按 bitcast 重解释」豁免,故一旦用新构建的 TransPyV 编到这些文件
必然 fail-fast(回归测试首爆点在 includes/llvmlite 侧,本仓同形态站点随后必然
同样触发)。
涉及的两种形态:
· `slot: str | t.CPtr = (t.CPtr)(addr)` —— cast 目标是一级 t.CPtr
· `nm_slot: str* = (t.CPtr)(addr)` —— 注解 str* 即 i8**
统一改为 cast 到声明类型:`(str | t.CPtr)(addr)` / `str*(addr)`(后者与
includes/sys.vp `argv_arr: str* = str*(...)` 同一写法)。
本仓 47 处 / 6 文件:
App/lib/core/Gen/VarGenMixin.vp 3
App/lib/core/Gen/TranslatorGenMixin.vp 8
App/lib/core/Gen/Func/FuncGenMixin.vp 13
App/lib/core/Gen/AsyncGenMixin.vp 15
App/lib/core/Gen/DebugInfoGen.vp 6
App/lib/Stub/StubGen/Converter.vp 2
Converter.vp:107 的 `_g_pyi_cdef_names: str | t.CPtr = None` 保持原样
(None 即空指针,任何指针类型均可,不属本类问题)。
只提交本 6 个文件;本仓其余未提交改动(CallGenBase/CallGenDispatch/CallGenFd/
CallGenProp/Generator/Translator/VLogger)与本迁移无关,保持不动。
|
2026-09-29 15:10:33 +08:00 |
|
TermiNexus
|
75ea6fb9b2
|
fix(transpyv): 消除隐式向下转型(ast.AST* 实参 → 派生 AST 形参)
c 源码违规(严格指针规则:基类指针传派生类形参属向下转型,须显式转换):
1) TranslatorGenMixin._prescan_funcdef_signatures:形参由 ast.FunctionDef* 改为
ast.AST*,函数体内显式 `fd: ast.FunctionDef* = ast.FunctionDef*(node)`。
理由:模块级调度器只持有 ast.AST* 子节点,同一处调用的
translate_function_def / translate_class_def / _register_cexport_from_funcdef
形参一律是 ast.AST*,本函数是唯一例外(报错现场:第 2 个实参 %"..AST"* 不能
隐式转为形参 %"..FunctionDef"*)。改为与兄弟入口同口径,调用点无需改动。
2) CallGenDispatch len() 内置分支:_is_list_builtin_receiver 第 5 形参是
ast.Call*(仅用于 D25 fail-fast 定位节点),实参 len_arg_node 声明为基类
ast.AST* ⇒ 显式窄化 `len_arg_cl: ast.Call* = ast.Call*(len_arg_node)`。
附:对 App\lib 全量静态扫描(core\Gen 全 47 文件 + Stub/Phase/core/main)确认
此类「基类指针实参 → 派生形参」的隐式向下转型仅此两处,其余调用点均为同类型
或向上转型(规则允许)。
同文件另含仓库内既有书写整理(续行合并),无行为变化。
|
2026-09-28 20:20:56 +08:00 |
|
TermiNexus
|
66e697e8df
|
feat(codegen): 模块级 extern 全局生成外部声明(@裸名 = external global T)
注解含 t.CExtern/t.State → is_global_extern:裸名(无 SHA1 头)、Linkage=external、不写初始值、不建 storage
与 export 全局(本模块定义 + 裸名)区分;配合 includes f854f7e 的 export/extern 变量语法
|
2026-09-27 17:56:51 +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
|
12bd7b7a16
|
fix(gen): 收敛 static 跨模块拦截为独立方法,消除类型推断污染
新增五个独立方法承载 static 检查与登记:_CheckStaticCrossModule(mod.name 取值)、_CheckStaticCallCrossModule(mod.fn 调用)、_CheckStaticFromImport(from-import)、_RegisterStaticModuleVar(模块级变量登记)、_RegisterStaticFunc(函数登记)。调用点只保留一行调用——内联新增分支会改变超大函数的类型推断,曾导致 translate_attribute 后续 match obj_ptr.Ty 报指针隐式转整数已禁止。
删除 _resolve_module_attribute_global 内与入口检查重复的 static 拦截(其两个调用点均在 _CheckStaticCrossModule 之后)。
|
2026-09-27 13:12:22 +08:00 |
|
TermiNexus
|
dd56580855
|
feat(gen,static): static 符号禁止跨模块使用(定义侧登记 + 引用侧三处拦截)
语义 = C 的 internal linkage:static 符号(函数/变量)只在定义模块内可见,任何跨模块引用一律 fail-fast(NameError)。
- 登记表:CallGenBase 新增 StaticSha1Arr/StaticNameArr/StaticCount(PermPool 定长槽,与 CexportSha1Arr 同款)+ RegisterStaticSymbol/IsStaticSymbol(按 (符号名, 模块 SHA1) 精确配对,避免跨模块同名误判)。
- 定义侧登记:FuncGenDef 识别注解形态(-> t.CVoid | t.CStatic)与装饰器形态(@t.CStatic;裸 static def 已由解析层归一为装饰器)→ 登记函数名;TranslatorGenMixin.handle_module_level_var 识别注解形态(static x: int 已归一为 t.CStatic | int)→ 登记变量名。
- 引用侧拦截(三处,覆盖全部跨模块形态):ExprGenAttr.translate_attribute 入口统一拦截 mod.name(含 import 别名还原);CallGenMixin.translate_call 入口拦截 mod.fn(...) 调用(按 AST 形态一次覆盖 found_func/vpi/裸名兜底各分支);ImportsGenMixin.translate_import_from_names 拦截 from mod import name。
- 性能:三处检查均以 StaticCount > 0 快速短路——项目中无 static 符号时零开销(不触碰逐条线性扫描与 sha1 解析)。
- 同模块自引用(sha1 相同)与非模块基座(self.method / obj.field / Class.static_method)一律放行。
|
2026-09-27 12:58:51 +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
|
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
|
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
|
82eea2719f
|
refactor(tpv): rowptr[T] 迁移 + D 表定长缓冲改精确分配 + SHA1 前缀判定收敛(D1/D3/D4/D5/D6/D7/C10)
|
2026-09-12 11:09:35 +08:00 |
|
TermiNexus
|
db8220801c
|
refactor(tpv): Z 类兜底改 fail-fast(返回类型/模块级变量/枚举成员)
- ClassGenVTable 方法返回:有注解但解析失败即 fatal;State/CExport/CExtern 标记归一为 Void
- TranslatorGenMixin 模块级变量:有注解但解析失败即 fatal(保留无注解合法默认)
- ClassGenEnum._resolve_enum_member_type 4 处:Attribute 缺失名/Name 缺失 id/两处解析失败均改 fatal
(无注解与 t.State 标记的 i32 默认保留)
|
2026-09-11 22:17:45 +08:00 |
|
TermiNexus
|
cfb92e5da5
|
初步清理 t. 类型异味
|
2026-09-11 18:36:32 +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
|
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
|
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
|
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
|
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
|
e82664fa67
|
fix(gen): @t.Object 类模块级变量转 Ptr(struct),t.CStruct 值类保持值,修复 devfs 虚表调用跳栈 #PF
|
2026-08-26 22:33:11 +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
|
89995dffde
|
refactor(gen): 去除 Handles 委托层——链式化 + GenTypes/GenApi 迁移
- Gen 内部 1742 处 HandlesX.func() 改 self.Gen.Y.method() 链式调用
- 数据类/常量迁移 GenTypes.vp(10 类 + CLASS_META_*/META_*/SEQ_KIND_*/FIELD_MAX 等)
- 管线/保留文件经 GenApi.vp 模块级入口(48 函数带类型注解,从 Gen 方法签名自动生成)
- 删除 26 个纯委托 Handles 文件,仅留 5 个实体文件(Base/Translator/Expr/ExprCall/ExprCallTable)
- 修复字段分裂:TypeGenErr CurrentFile/TraceCount 链式化;CallGenBase TempDir/Cexport 真源化
|
2026-08-21 06:32:40 +08:00 |
|
TermiNexus
|
9f396f4874
|
refactor(gen): 完成 P6 机械化迁移——Handler 类并入 Gen Mixin,语句实现单层化
- 10 个 Handler 类主方法迁入 Gen:Assign/AnnAssign/AugAssign→AssignGenMixin,
If/While/For/Return→StmtGenCifMixin,Match→新建 MatchGenMixin(注册 Generator MRO),
Imports→ImportsGenMixin;方法体 self.Trans→trans,签名加 trans 首参
- 分派改:StmtGenMixin.translate_stmt 同链 self.translate_xxx + 跨链经 Handles 委托壳
(NoVTable 静态绑定约束);ExprCall 分派改走 ExprCallCall 壳
- 清理:HandlesTranslator 删 11 个 Handler 字段与 _init_state 创建段;
StmtGenCifMixin 删 5 个 NewXxxHandle 工厂;main/BuildPipeline 补 HandlesAssign._g_gen 注入
- 委托壳保留:跨 Mixin 桥(Assign/AnnAssign/AugAssign/Match/Imports)待编译器缺陷修复后删
|
2026-08-20 06:40:37 +08:00 |
|
TermiNexus
|
99df2aef99
|
fix(gen): 全局变量引用加引号(SHA1 前缀名以数字开头)
llc "expected instruction opcode" 根因:模块级全局带 SHA1 前缀后名以
数字开头("sha1.name"),LLVM 无引号标识符不能以数字开头。stub/text
打印端早已按 _ll_name_needs_quote 加引号,但引用端(make_global_ref /
_find_pool_var 兜底 / 定义端 ref_name)一律 @%s 无引号 → 组合 IR 指令里
store i32 0, i32* @748d0424e8976fa0._pass_count 解析失败。
修复三处引用生成按 _vtable_name_needs_quote(数字开头或含 .)加引号,
对齐函数引用路径(ExprGenName/FuncGenMixin 的 needs_quote 判断)。
组合 IR 去重(_HasGlobalInBuf 等)按打印格式名匹配,带引号一致无需改。
|
2026-08-20 04:42:20 +08:00 |
|
TermiNexus
|
5f7a87341a
|
fix(gen): 模块级全局变量命名带 SHA1 前缀,消除 ld.lld duplicate symbol
多个模块声明同名模块级全局(如 _mbuddy)时全部生成裸名强定义(zeroinit)
→ 链接时 ld.lld duplicate symbol: _mbuddy(大量 warning)。函数名早已
mangled,全局变量漏做。
修复(对齐函数名 _mangle_name,SymTab key 保持裸名查找逻辑零改动):
1. 定义端 TranslatorGenMixin:全局名 = {模块sha1}.{变量名}
2. 模块属性访问 ExprGenAttr:按目标模块 SHA1 前缀精确查找/创建(含嵌套
模块 w32.xxx 与 t 类型对象裸名 linkonce_odr 特例),引用用完整名
3. from-import 全局 ExprGenName:带源模块 SHA1 前缀查找,引用用完整名
4. _find_pool_var 兜底:linkonce_odr + zeroinitializer 定义(每模块独立,
不再依赖裸名链接合并共享;运行时未初始化则真实崩溃暴露,不掩盖)
|
2026-08-20 04:31:39 +08:00 |
|
TermiNexus
|
55d4c4102a
|
fix(call): super() void 命中用 hit_box 区分未命中 + CTypedef 预注册修复 mode_t NameError
- CallGenDispatch/CallGenMixin/ExprCallHandle: super() 命中 void 方法返回 None 属预期,用 hit_box 命中标志区分未命中,避免误走裸名调用报 'super 未定义'
- HandlesAnnAssign.Handle + TranslatorGenMixin.handle_module_level_var: CTypedef 按需注册(翻译期表已被 clear_ctypedefs 清空),修复 posix.vp S_ISREG(mode: mode_t) 参数解析 NameError
|
2026-08-19 00:28:48 +08:00 |
|
TermiNexus
|
2cb974ae5a
|
refactor(handles): HandlesExprCall 拆 6 组(Base/Deref/Ctor/Call/Table/Handle,2041→241 行)
直接移动+改调用方:~100 个委托函数按功能移至 6 个子模块,主文件
保留 _g_gen/set_global_gen/顶层常量/4 个类(AsmOperand、FuncEntry、
FuncDefaultsEntry、ExprCallHandle——CallGenLeafKit/HandlesTranslator
仍以 HandlesExprCall.类名 引用)。
- 子模块函数体内 _g_gen/常量/类裸引用 → HandlesExprCall.xxx 跨模块访问
- 28 个调用方 HandlesExprCall.func( → 子模块前缀并补 import
- 全 App 语法/引用/import 验证通过
|
2026-08-17 08:10:55 +08:00 |
|
TermiNexus
|
593332636f
|
全部整理上传
|
2026-08-17 04:27:29 +08:00 |
|
TermiNexus
|
c27a1ba347
|
fix(gen): lambda 捕获 str 指针偏移 + 表达式接收者等五组回归修复
- lambda 捕获 cap_slot 改 cap_names + ci*64:TPV 将 (str)(整数) 编译为 itoa,define_var 键名变数字串,lambda body lookup 穿透父函数作用域产生跨函数误读
- StructGenMixin 递归解 Ptr 到 Struct / CallGenMixin self coerce + 表达式接收者方法调用:修 sub Vec3**、ld.lld undefined dot/cross
- TranslatorGenMixin/HandlesAnnAssign 跳过 CTypedef 全局符号:修 duplicate float64_t
- ClassGenMixin 枚举/联合/REnum 基类别名经 lookup_from_import_original 解析:修 Color.Green NameError
- 重载路径 1 对 Ptr(Ptr(Struct)) 先 load 对象指针:修 MultiInheritTest self 误读
- TypeGenMixin 泛型 T 先 resolve_generic_type_name:修 NoVTableTest T 未注册
|
2026-08-13 19:10:50 +08:00 |
|
TermiNexus
|
07e1efeb82
|
fix(gen): 移除 vtable 临时诊断代码并扩容 MAX_FUNCS 256→1024
1) 移除 _generate_vtable 中临时诊断块(含 self.find_func_global 调用),
该调用被当成 ClassGenMixin 类方法 mangling 导致 bootstrap 链接失败
(undefined symbol: ClassGenMixin.find_func_global)。
2) MAX_FUNCS 256→1024:VpiReader 注入依赖 declare(~102)+ 大模块方法
(stmts 162 个)累积使函数表恰好溢出,ImportFrom.dump 等第 257 个
注册静默失败 → vtable 缺实现误杀。同步 7 处(HandlesTranslator/
TranslatorGenMixin 常量 + ClassGenMixin/FuncGenMixin/VpiReader 硬编码)。
|
2026-08-13 06:54:40 +08:00 |
|
TermiNexus
|
9d3483e97e
|
refactor: 全面 fail-fast 化(去兜底)+ 泛型补译/解引用宽度修复
- 全量降级点改 fail-fast:23 文件约 140+ 处静默 i32/i8*/void/continue 兜底改为 HandlesType.fatal_error(python traceback 风格)或 VLogger.error 终止,暴露上游根因;保留语言语义默认(无注解 i32/infer 链/CIf/star 回退)
- 泛型特化 Phase B 补译 reemit 强制发射方法体(修复 list[...] define 缺失)
- c.Deref 读取宽度仅按赋值直接 RHS 推断(修复 CurAssignAnnot 残留误判 i32)
- 类型别名清理:t.CChar|t.CPtr→str、t.CInt→int 等
|
2026-08-13 02:11:49 +08:00 |
|
TermiNexus
|
ea5b17f5fd
|
refactor: 深度 if 守卫化重构(guard continue + 短路合并)
- HandlesAssign/Return/Match、StubMerger、Phase2、Gen/*Mixin、StubGen/* 手写 None 检查链改守卫/短路,全局最深 14→12、>=10 层 26→19
- StubMerger define→declare 剥 linkonce_odr 等 linkage(修复 VectorGenericTest invalid linkage)
- CallGenMixin len() 数组常量长度分支(对齐 TPC _HandleLenLlvm)
- print 参数翻译失败 (null) 兜底改 fail-fast
- 临时诊断日志与死代码(sub_vk)清理
|
2026-08-12 21:13:25 +08:00 |
|
TermiNexus
|
c472ea9798
|
feat(gen): 支持 lambda 与 nonlocal 运行时 env 链式共享
- translate_lambda 提升 __lambda_{id}(i8* env, args...) + 捕获变量堆存储
- _lambda_scan_body 递归收集捕获变量;HandlesAssign 注册 lambda 闭包名
- translate_closure_call 支持带参(实参链表 + 函数类型 i32(i8*, args...)*)
- 嵌套函数参数支持(提升函数签名 + 参数 alloca)
- nonlocal 改为运行时 env 链式共享:父函数局部新建堆+重定向 VarEntry;
父函数中为 nonlocal 时从父函数 env 读堆地址(_load_raw_var_ptr)
- 全局数组 initializer 按声明长度补齐补零
- LambdaCount 计数器迁移到 trans._lambda_count(修复 TPC 编译崩溃)
|
2026-08-11 16:10:05 +08:00 |
|
TermiNexus
|
6677da99f7
|
refactor(gen): P6 方法化 - StmtGen/AssignGen/VarGen/ImportsGen/TranslatorGen Mixin
5 个新 Mixin(92 方法)承接 HandlesBody/If/While/For/Return/Nonlocal/Match/Enum/AnnAssign/AugAssign/Var/Imports/Translator/Main 的无状态函数与 _g_ 全局;15 个 Handles 模块改为一行委托(调用方零改动);Generator 组合扩展至 12 Mixin,__init__ 初始化 8 个新字段;BuildPipeline/main 注入 14 个模块 set_global_gen;修复 ImportsGenMixin 与 TypeGenMixin 的 CurrentFile 重复字段冲突(改 HandlesType 委托,延迟 import 规避循环依赖)。
|
2026-08-10 18:42:07 +08:00 |
|