TermiNexus
|
f5c4be3995
|
refactor(core): Phase1 拆 3 组(Scan/Topo/Main,1801→46 行)
直接移动+改调用方:7 个函数按功能移至 3 个子模块,主文件仅保留
常量/_mbuddy。
- 子模块函数体内裸调用映射子模块前缀,全局符号经 Phase1._xxx 访问
- 调用方 main.vp 的 Phase1.func( → 子模块前缀并补 import
- 全 App 语法/引用/import 验证通过
|
2026-08-17 08:14:45 +08:00 |
|
TermiNexus
|
c62ce0797d
|
refactor(handles): HandlesFor 拆 ForHandleBase/ForHandleIter(1600→448 行)
类方法拆 Mixin:
- ForHandleBase(HandlesBase.Mixin):__init__ + 公共工具
(_extract_tuple_names/_seq_kind/_build_seq_loop)
- ForHandleIter(ForHandleBase):8 个 _handle_* 迭代 helper
- ForHandle(ForHandleBase, ForHandleIter):保留 Handle 主分派 + 常量/
_g_gen/NewForHandle 委托;self 调用按 1 级父类解析(Handle→Iter、
Iter→Base 均直接父类)
StmtGenCifMixin 仍以 HandlesFor.ForHandle 实例化/引用,类名不变
|
2026-08-17 08:14:04 +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
|
278893d203
|
refactor(core): StubMerger 拆 5 组(Collect/Store/Topo/IR/Build,2391→72 行)
直接移动+改调用方模式:35 个函数按功能移至 5 个子模块,主文件
仅保留常量与全局变量(main.vp 仍直接赋值 StubMerger._mbuddy)。
- 子模块函数体内裸调用映射为子模块前缀,全局变量经 StubMerger._xxx 跨模块访问
- 12 个调用方文件 StubMerger.func( → 对应子模块前缀并补 import
- 全 App 语法/引用/import 验证通过
|
2026-08-17 08:03:40 +08:00 |
|
TermiNexus
|
d0cf283228
|
fix(gen): ClassGen 拆分遗漏的 12 个顶层 CDefine 常量补回
GSListNode 泛型特化报'深度=1'递归过深根因:GENERIC_SPEC_MAX_DEPTH
在阶段 D 拆分时从 ClassGenMixin 顶层遗漏,TPC 解析为 0 → 任何特化
立即触发守卫。对比拆分前后顶层 CDefine 全量比对,补回遗漏 12 个:
- ClassGenGeneric: GENERIC_SPEC_MAX_DEPTH=64 / GENERIC_TEMPLATE_MAX=512
- ClassGenBase: META_TLS / CLASS_META_MAX / DECOR_FUNC_MAX / DECOR_NAME_LEN
/ EXCEPTION_MAX / EXCEPTION_NAME_LEN / BUILTIN_EH_* / EH_USER_CODE_START
- ClassGenVTable: META_TLS(本地副本)
全部本地副本模式,避免跨模块 CDefine 查找 bug
|
2026-08-17 07:49:27 +08:00 |
|
TermiNexus
|
ebfc74063f
|
fix(handles): HandlesExpr._lookup_cross_module_cdefine 委托补 depth/node 参数
ExprGenName 等调用传 6 参(pool, name, from_imports, imported_modules,
depth, node),委托只定义 4 参 → TPC 报 '传入了 6 个参数,但函数只
需要 4 个参数'。补齐 depth=0/node=None 默认参数并透传,与
ExprGenCdef._lookup_cross_module_cdefine 方法签名对齐。
|
2026-08-17 07:42:49 +08:00 |
|
TermiNexus
|
50db55fd08
|
fix(handles): HandlesClassDef 6 个 _is_* 委托补 trans 参数
ClassGenDef 调用 _is_enum_class/_is_union_class/_is_renum_class(cd, trans)
传 2 参,但委托定义只有 1 参(cd)→ TPC 报 '传入了 2 个参数,但函数
只需要 1 个参数'。统一补齐 _is_cenum_base/_is_enum_class/_is_cunion_base/
_is_union_class/_is_crenum_base/_is_renum_class 的 trans 默认参数并透传。
|
2026-08-17 07:38:09 +08:00 |
|
TermiNexus
|
54fa8b46c8
|
refactor(gen): ExprGenMixin 拆 8 组(Base/Const/Fstr/Ops/Cdef/Name/Attr/Cls,6203→129 行)
- ExprGenMixin 保留 translate_value,其余 74 方法按功能拆至 8 个子 Mixin
- 子 Mixin 均 1 级继承 ExprGenBase(TPV self 调用仅支持 1 级父类)
- 跨 Mixin 调用转 HandlesExpr 模块级委托(_g_gen 单例 cast)
- HandlesExpr 补 15 个委托:f-string 组 7 个、docstring 组 4 个、
Cdef/Attr 各 1 个、Ops 组 translate_binop/_binop_to_dunder/_unaryop_to_dunder
- Generator 继承链加入 8 个 ExprGen 子 Mixin
- 全部 Gen/ 文件均 ≤1500 行,500~1500 行/文件架构重构完成
|
2026-08-17 07:32:56 +08:00 |
|
TermiNexus
|
47ac2dd57c
|
refactor(gen): ClassGenMixin 拆 5 组(Base/Enum/Generic/VTable/Def,4768→空壳)
|
2026-08-17 07:23:40 +08:00 |
|
TermiNexus
|
81d4ff3ac4
|
refactor(gen): TypeGenMixin 拆 5 组(Base/CDef/CType/Resolve/Err,2643→44 行)
|
2026-08-17 07:21:00 +08:00 |
|
TermiNexus
|
65cf71ff7e
|
refactor(gen): FuncGenMixin 拆 Base/Def(2683→1178 行),补 5 个跨 Mixin 委托
|
2026-08-17 07:17:03 +08:00 |
|
TermiNexus
|
607159ae4a
|
fix(gen): 修复 CallGenDispatch/CallGenLib 首方法缩进(8 空格→4 空格)
|
2026-08-17 07:04:11 +08:00 |
|
TermiNexus
|
9f19bb3666
|
refactor(gen): CallGenMixin 阶段 C 拆 translate_call 检测段(Dispatch 6 helper)+ 辅助方法(Lib),顶层降至 1119 行
|
2026-08-17 06:59:14 +08:00 |
|
TermiNexus
|
38e32fdeb1
|
fix(gen): 修复 HandlesExprCall 委托签名缺参数(_infer_generic_ctor_type_arg/_LookupMethodRetTyFromTextLL)
|
2026-08-17 06:38:00 +08:00 |
|
TermiNexus
|
1718738a19
|
refactor(gen): CallGenMixin 阶段 B 拆出 6 组(Ctor/Call/Prop/Fd/Vt/Va),顶层剩 translate_call 中枢
|
2026-08-17 06:34:33 +08:00 |
|
TermiNexus
|
8d9ff96f61
|
refactor(gen): 修复 CallGen 拆分后 undefined symbol(顶层改 1 级继承 + 跨 Mixin 走 HandlesExprCall 委托)
|
2026-08-17 06:17:15 +08:00 |
|
TermiNexus
|
ef979d4435
|
feat(cli): 修复 --nowarn-register 未生效(argparse dest 破折号 key)
argparse 的 dest 保留短横线(--nowarn-register → nowarn-register),
main.vp 误用下划线 key 读取导致开关永不置位、Phase A 依赖类 WARN
照打。改为破折号 key,并同步更新帮助文案覆盖依赖未就绪重试。
|
2026-08-17 05:46:54 +08:00 |
|
TermiNexus
|
996f08fb46
|
fix(core): 末句控制流 merge 可达性存 trans 字段(追加90)
控制流翻译器(If/While/For/Match)记录 merge 可达性到 trans._ctrl_merge_reachable;
FuncGenMixin/ClassGenMixin 仅在全分支 return(结构性不可达)时生成 unreachable,
可达则正常收尾(ConstZero/fail-fast)。修复 llc O2 优化 br-to-unreachable 为
fall-through 导致 check 类函数 PASS+FAIL 双分支执行 + int3 崩溃(FuncTest)。
|
2026-08-17 05:46:47 +08:00 |
|
TermiNexus
|
f4a990c074
|
refactor(gen): StmtGenMixin 按功能域拆为 3 文件(500~1500 行架构试点)
StmtGenMixin.vp(1715) → 顶层(763 语句分派中枢) + StmtGenDeclMixin(512 声明/枚举/nonlocal) + StmtGenCifMixin(520 CIf 求值/工厂)。继承链 Mixin→Decl→Cif,@t.NoVTable 静态绑定沿 MRO 解析;4 字段全留最底层父类保持组合布局;Generator.vp 与 Handles* 委托零改动。
|
2026-08-17 05:46:40 +08:00 |
|
TermiNexus
|
593332636f
|
全部整理上传
|
2026-08-17 04:27:29 +08:00 |
|
TermiNexus
|
f2b33f5e9b
|
fix(core): _translate_method_call 沿 MRO 祖先链查返回类型,修复 Module.append
mod.append(Module 继承 AST)中 append 定义在 ast/base.vp(sha1=71b2),
found_func 未命中时 fallback 按 class_name="Module" 查 text.ll/vpi 找不到
(函数名是 {71b2}.AST.append)→ fail-fast。修复:
1. 新增 ret_anc_name/ret_anc_sha1(方法实际定义类),默认 class_name,
MRO fallback 命中祖先类(AST)时更新;
2. text.ll/vpi 均沿 MRO 祖先链用祖先类名 + 祖先类 sha1 重试查询;
3. 调用名也用方法定义类构造({AST_sha1}.AST.append),避免链接 undefined。
|
2026-08-15 00:41:21 +08:00 |
|
TermiNexus
|
0a0e6d3bab
|
perf(diag): OOM 二分定位诊断 + 主池提升 1.5GB
BuildPipeline/Phase2/StmtGenMixin/HandlesAnnAssign 增加 [MEM] 限频打印
(parse/translate 前后、Phase A 前后、stmt 行级、AnnAssign 入口),
定位 NewAstTest 翻译内存暴涨起点;主池 1.5GB(2^30+2^29 二进制分解),
给单文件峰值与 Phase A 高并发翻译留足余量。
|
2026-08-15 00:15:59 +08:00 |
|
TermiNexus
|
f9878e5a63
|
fix(core): 跨模块 CDefine 查找缓存 perm_pool + list 内置方法识别
1. _lookup_cross_module_cdefine:lookup_from_import 返回非 NUL 结尾内部指针,
base_mod 未截断导致 rc_full_mod 每层累积整个 from_imports + ".base"
(dump:ast.base.base.base 无限递归根因)。入口截断模块名 + 缓存查询/写入
key 统一用 base_mod;结果缓存到 perm_pool(XmodCdef 表)跨文件复用,
CONST_INT 递归查找只做一次。
2. translate_call:obj.method 检测将 list[AST|CPtr] 特化 struct 误当普通结构体,
查 append 返回类型(函数/text.ll/vpi 均未命中)fail-fast。新增
_is_list_builtin_method 识别 list 内置方法,在 Ptr(Struct)/Ptr(Ptr)/
AnnotClassName 三条路径跳过,落到 list 内置分支。
3. HandlesType 新增 register/lookup_xmod_cdefine 模块级委托(Mixin 隔离)。
|
2026-08-15 00:15:43 +08:00 |
|
TermiNexus
|
f7c2fe4534
|
fix: 恢复 _TopoSortFiles 被污染的循环,修复 vtable 'AST.accept' 找不到
上一提交(2ef6a55)编辑串位:把 1a-pre import 扫描的 scan_mark_a/
entry_addr_a 错误注入到 _TopoSortFiles 的 sha1 收集循环,循环内引用
未定义的 entry(恒为 null)→ 全部 continue → file_count=0 → 拓扑排序
结果为空 → 1b 回退字母序 → astaux.vp(ExceptHandler(AST))先于
base.vp(定义 AST.accept)翻译 → accept 未注册全局函数 → vtable
生成 'AST.accept' 找不到函数实现(InternalCompilerError)。
恢复 _TopoSortFiles 原始 entry_addr/entry 逻辑(拓扑排序恢复后
base.vp 先翻译,accept 注册,vtable 引用解析正常)。1a-pre 循环的
scan_mark_a/reset 保持不变。
|
2026-08-14 17:42:42 +08:00 |
|
TermiNexus
|
2ef6a55ead
|
fix: Phase1 三个无 reset 的全量 parse 循环改每文件回收,解 mark1 前 OOM
NewAstTest 仍 1GB 主池耗尽:Phase1 1a 主循环已 reset,但此前还有
三处对全部 includes 全量 parse AST 且驻留到 mark1 的循环(可达 includes
数量多时 AST 累积超 1GB):
1. _ScanClassInheritance(类继承预扫描):每文件收集类名/父类/SHA1
到扁平数组后 reset_to(文件级 mark) 回收 AST;
2. Phase 1a-pre import 依赖扫描:deps 写盘 + PopulateIncludesDeps
(内部 stdlib 深拷贝)后 reset_to(文件级 mark);
3. 删除冗余的 Phase 1a-pre-generic(主 pool 全量 parse 可达泛型文件、
无 reset)——已被 _PreRegisterAllGenericTemplates(文本扫描筛选 +
perm_pool 注册,全覆盖)替代。
注:reset 只回收各文件的 AST/lexer/token/IR 等瞬时数据;注册表数据
(StructTable/Fields/Name/ModuleSha1/struct_ty 深拷贝/枚举/Renum/泛型
模板)已在前一轮迁入 perm_pool,不受 reset 影响。
|
2026-08-14 04:13:59 +08:00 |
|
TermiNexus
|
8d5dbeab89
|
feat: 引入 CompilerFactory 永久内存池,1a 每文件 reset 解 NewAstTest OOM
main 创建 512MB perm_pool(MemBuddy 第二实例,永不 reset)并注册
CompilerFactory 工厂(对齐 TPC Translator 装配模式,memhub 保持通用)。
各 Gen Mixin 跨 mark 持久表(struct/枚举/Renum/spec/vtable/全局函数/
闭包/函数指针/Cexport/Reexport/TraceFrames/Doc)全部迁移到 perm_pool,
替代 stdlib.malloc 深拷贝提升速度。
Phase1 1a 主循环(98 includes 全量 parse AST 驻留主 pool → 1GB 耗尽)
改为:StdlibAlloc=1 注册数据进 perm_pool + 每文件翻译完 reset_to(文件级
mark) 回收 AST;1b-pre vpi 预生成循环同样 reset_to(mark1)。同步修 7 处
reset 后悬空隐患:StructTable 表体、add_field DefaultVal、Renum 变体/
别名表内容、vtable full_names 内容、FuncptrRets 深拷贝。
CompilerFactory 类名与模块名同名(合法场景,TPC 已支持模块别名优先)。
|
2026-08-14 04:02:36 +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
|
a0edc3d961
|
fix(gen): 泛型 type_params 生命周期与无注解赋值 annot 推断
- ClassGenMixin: list[str](pool, 8) elem_size 修正(原 4 致 Pair[T1,T2]
重叠写),新增 GenericClassTpParams stdlib 深拷贝表,特化统一取深拷贝
- Generator: 初始化 GenericClassTpParams 防 0xBEBEBEBEBEBEBEBE
- TypeGenMixin: 泛型上下文栈式管理,支持嵌套特化
- CallGenMixin: sz_builtin 补 double/float/char,修复 T.__sizeof__ NameError
- StubMerger: _CommentOutGlobalInBuf 循环注释同名全局,修复 @_mbuddy 重复定义
- HandlesAssign: 无注解赋值按 RHS 推断 AnnotClassName(类实例化/源变量/
运算符重载/字段注解/方法返回注解 vpi),修复联合类型 Ptr(i8) 属性访问失败
|
2026-08-13 17:31:54 +08:00 |
|
TermiNexus
|
19f48eea02
|
fix(gen): struct 返回类型解析 + 变参提升 + 泛型隐式推断三组修复
1. _ParseLLVMRetTyStr 支持 struct 字面量 {T1,T2,...}:"{i8*,i16}" 内含 * 被
误判为 i8*,b2a_hqx tuple[str,u16] 调用侧返回类型退化 → HandlesAssign
tuple 解包静默跳过 → 目标未初始化 → free 垃圾指针崩溃(HashLibTest hqx);
2. 变参提升 is_u_va 失败时 i8 默认 zext:printf("%02x", uint8) 不再 sext 成
0xFFFFFFF3 输出 ffffffXX(对齐 should_zext_widen 无符号字节策略);
3. _infer_generic_ctor_type_arg:Name("CInt")/("CFloat64T") 裸名类型转换补
strstr 匹配(from t import 后 func 是 Name);非类型转换实参(pool 等非
T 参数)返回默认 int 被"过滤纯 int"排除,不再 fail-fast(VectorGenericTest
隐式泛型推断),仅 Call 类型转换识别失败才 fail-fast。
|
2026-08-13 08:30:44 +08:00 |
|
TermiNexus
|
9bb6dd7612
|
fix(reachable): App 源文件容器依赖注入,修复 dict/list 未编译致方法返回类型误杀
_BuildReachableSha1Set 扫描 App 源文件仅解析 import,未检测 list/dict 容器
使用,main.vp 用 dict 但 _dict 未纳入可达集合→不编译→dict.set_int 等无
返回类型信息→_fail_method_ret_ty 误杀(DictTest 重现)。修复:translate
后调用 _inject_auto_container_visibility 注入 _list/_dict 依赖。
|
2026-08-13 08:11:41 +08:00 |
|
TermiNexus
|
97f765fcb3
|
fix(stubgen): vpi 生成 CArray count 数字常量输出数值而非 t.CInt
_PyiTypeStr 的 Constant 分支对 CONST_INT/CONST_CHAR 默认回退 "t.CInt",
t.CArray[t.CUInt32T, 64] 的 count 被生成成 t.CInt,加载 stub 时触发
TypeError(count 必须是整数常量)。修复:输出数值本身。
|
2026-08-13 08:11:41 +08:00 |
|
TermiNexus
|
1f4b231134
|
refactor(stmt): 还原 translate_with 直接属性访问(TPC 联合转换修复后)
TPC 6a67203 修复了联合类型转换 (X | t.CPtr)(arg) 后属性访问被丢弃的编译损坏,
9f7333b 引入的中间变量 workaround(call_ce/nm_cfn/ovn)不再需要,
还原为直接 ((ast.Call | t.CPtr)(ce)).func 等写法。
|
2026-08-13 07:51:13 +08:00 |
|
TermiNexus
|
9f7333b0f2
|
fix(stmt): translate_with 属性访问改用中间变量,规避 TPC 编译损坏致 asname 未绑定
TransPyC 编译 translate_with 时,联合类型转换后直接取属性(如
((ast.Name|CPtr)(ov)).id / ((ast.Call|CPtr)(ce)).func)的属性访问
(GEP+load)被编译器丢弃——编译产物 75904e6cbc83036b.text.ll 显示
store %asname 0 次、load 3 次,asname 恒 null → pool 从未绑定到
SymTab → body 内 pool.alloc 方法调用检测 lookup_var 失败 → 误报
"跨模块调用 'pool.alloc' 找不到模块 SHA1"。同理 cfn 恒 null 导致
cls_name(AnnotClassName)也设置不上。改为先转换到中间变量再取属性
(代码库已验证编译正常的 cmn 模式),修复 3 处(L264/L279/L298)。
|
2026-08-13 07:37:20 +08:00 |
|
TermiNexus
|
f1530aac91
|
fix(stmt): with 的 asname 注解类名带模块前缀,修复跨模块方法调用解析
translate_with 提取 context 类名时只取裸类名(MemPool),跨模块调用
(如 pool.alloc)的 AnnotClassName 回退需模块限定名(memhub.MemPool)
才能按模块查 SHA1,裸名导致方法调用判定失败、落入"跨模块调用找不到
模块 SHA1"误报。改为与 AnnAssign 的 extract_class_name_from_annotation
一致:Attribute func(memhub.MemPool)生成 "memhub.MemPool" 注解类名。
|
2026-08-13 07:12:27 +08:00 |
|
TermiNexus
|
a6d1a6f9ae
|
feat(stmt): 支持 with 语句翻译(__enter__/__exit__ + MRO 解析)
对齐 TPC HandlesWith 核心语义:构造 context 对象 → 调用 __enter__()
(沿继承链 MRO 回退,如 MemPool → MemManager)→ asname 绑定返回值
→ 翻译 body → 逆序调用 __exit__()。context 对象存入临时变量
__with_ctx,方法调用复用 translate_call 的 Attribute 分派 +
_translate_method_call 的 MRO 回退;嵌套 with 时保存/恢复外层
__with_ctx 避免类型串扰。修复 "with memhub.MemPool(...) as pool:"
报 SyntaxError 未知语句类型 kind=21。
|
2026-08-13 07:07:00 +08:00 |
|
TermiNexus
|
39ddf11ddc
|
fix(stmt): 移除 raise 翻译中无效的 LLVMType.Double 模式,修复 llc 报错
LLVMType 是 REnum,Float(Bits) 变体已覆盖 double(Bits=64),无独立
Double 变体。case LLVMType.Double(_db) 被 TPV match 按未知变体处理
(匹配一切),导致 Int(32) 等整数返回类型的 raise StopIteration 落入
Double 分支生成 ConstFloat(0.0) 位模式常量(0x0000000000000000),
ret i32 0x0000000000000000 被 llc 判为 "floating point constant invalid
for type"。删除该分支后整数返回走 case _ 的 ConstZero。
|
2026-08-13 06:59:25 +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
|
9d0ecf1c5d
|
fix(call): translate_call 无条件查询全局默认参数表,修复未初始化 gd_entry 崩溃
同模块带默认参数函数命中时 gd_entry 仅在 if df_defaults is None 块内
赋值,下方 _build_const_from_snapshot 读到未初始化栈垃圾指针(本次
0x7ead438f),解引用 gd_entry.ConstKinds 触发 ASan access-violation
(翻译 parser.vp 时随机崩溃)。改为与 _translate_method_call 一致,
find_func_defaults 无条件执行,同模块命中时快照优先、AST 回退兜底。
|
2026-08-13 06:54:32 +08:00 |
|
TermiNexus
|
f19c63594a
|
fix(vpi): 注入模块级全局变量 external declare,修复跨模块 stub 误杀
vpi 注入原只处理函数 declare 与 CTypedef,普通模块级全局变量
(tokens.vp 的 _op_head: OpEntry | t.CPtr)不创建 GlobalVariable,
lexer.vp from-import 读取时 find_global_in_module 找不到 →
"跨模块全局变量类型未知(stub 未注入)"。新增
_inject_global_variable_declare:解析注解类型(裸类→Ptr、CArray→
元素指针),创建短名 external global(COFF 按名链接),接入 AnnAssign
分支(非 CTypedef 走全局变量注入)。
|
2026-08-13 04:55:40 +08:00 |
|
TermiNexus
|
eb002ece31
|
fix(phase1): 拓扑排序环处理按被依赖者优先
容器按需注入(string 用 list 泛型 → 依赖 _list)与真实 import
(_list import string)形成伪环,Kahn 无法完全归零。原环处理按扫描
顺序追加,依赖者(astaux)先于被依赖者(base)翻译,跨模块 vtable
TypeStr 未注册。改为环内按"被其余剩余文件依赖数"降序输出,被依赖者
先翻译(stub/TypeStr/模板先就绪)。
|
2026-08-13 04:51:55 +08:00 |
|
TermiNexus
|
1145ef74c8
|
fix(phase1): import 依赖边改用局部映射副本,修复 ASan 崩溃
_TopoSortFiles 的 import 依赖边直接使用 GetSha1Store*Ptr() 返回值
(bytes|t.CPtr 联合)作为 str 参数传入 _FindSha1ByModName,跨函数
传参时指针异常(ASan: strcmp 读 0xffffffffffffffff)。改为先用
_BuildIncludesSha1Map 复制局部 bytes 数组(与 BFS 一致),Phase2 的
BuildTopoSortedIndices 调用同步修复。
|
2026-08-13 04:48:38 +08:00 |
|
TermiNexus
|
0d6891f7bc
|
fix(phase1): 拓扑排序补 import 依赖边,跨模块依赖模块先翻译
仅按类继承建边无法保证跨模块依赖顺序:lexer.vp from-import
tokens.vp 的 _op_head(全局变量 stub 未注入)、astaux 继承 base 的
AST(vtable TypeStr)、base.vp 用 list[...](泛型模板)都在无继承
关系的文件间发生。新增 import 依赖边(读 Phase 1a-pre 填充的
_includes_deps_*,含容器按需注入的 _list/_dict),被 import 的模块
先完整翻译,其 stub.ll/TypeStr/模板先就绪。
|
2026-08-13 04:36:09 +08:00 |
|
TermiNexus
|
f09b6962f9
|
fix(phase1): 容器扫描覆盖表达式字段,修复 _list/_dict 按需注入失效
TPV 的 AST 中表达式/注解树挂在结构体字段(value/slice/func/args/
annotation/targets/returns/bases/left/right),只有语句块在 children。
原 _ScanTreeForContainers 只递归 children,漏掉 list[...] | t.CPtr
(BinOp 包裹)、list[...](...)(Call.func)、字段注解等,导致 base.vp
等 includes 的 list/dict 使用检测不到,_list 不进可达集合,泛型模板
未注册。重写为字段递归 + children 递归,覆盖全部表达式承载点。
|
2026-08-13 04:33:18 +08:00 |
|
TermiNexus
|
dfb86380a6
|
fix(phase1): 容器模板按需纳入可达集合(includes 层)
ad2b97a 移除 _list/_dict 无条件预加入后,includes 文件使用
list[...]/dict[...] 泛型(如 base.vp 的 list[AST | CPtr])但不显式
import _list/_dict 时,_list.vp 不进入可达集合 → 泛型模板未注册 →
"泛型类 list 未找到模板"。
Phase 1a-pre 翻译每个 includes 后新增 _ScanTreeForContainers 扫描
(裸名/泛型下标/字面量),命中则追加 _list/_dict 到 _imported_modules
→ 进 deps → _BuildReachableSha1Set 的可达集合自动包含(Phase1/Phase2
都受益),对齐 App 层 _inject_auto_container_visibility。
|
2026-08-13 04:16:26 +08:00 |
|
TermiNexus
|
5efca5b8e4
|
fix(phase1): Phase 1b 按拓扑序翻译 includes,修复跨模块 vtable 误杀
vtable 生成在 Phase 1b(declare_only=0),继承方法需依赖模块的函数
TypeStr 已注册(1b 翻译时动态写入全局表)。1b 循环原先按扫描顺序
翻译(astaux.vp 在 base.vp 前),父类未先翻译导致 vtable 找不到
实现。topo_order 原在 1a 末尾释放,1b 无法复用——改为 1b 循环按
topo_order 遍历(父类文件先翻译),topo_order 释放延后到 1b 后。
|
2026-08-13 04:10:47 +08:00 |
|
TermiNexus
|
7cc501cdef
|
fix(phaseb+): includes 按依赖拓扑序编译,修复跨模块 vtable 误杀
astaux.vp 继承 base.vp 的 AST 类时,vtable 槽位需 AST.accept 的
TypeStr 已注册到全局表(完整翻译产物)。Phase B+ 原先按 store 扫描
顺序编译,astaux 先于 base 编译 → 继承方法找不到实现被 fail-fast 误杀。
新增 StubMerger.BuildTopoSortedIndices(Kahn 逆拓扑,被依赖者先),
Phase B+ 循环按拓扑序编译可达 includes。
|
2026-08-13 03:50:59 +08:00 |
|
TermiNexus
|
ad2b97a140
|
perf(reachable): 移除 _list/_dict/json 无条件预加入,按需编译
_BuildReachableSha1Set 原本无条件把 _list/_dict/json 塞进可达集,
导致未使用的 App 也整链编译(json/__init__ → __parser/__writer)。
_list/_dict 已由 Phase A _inject_auto_container_visibility 按需注入,
现补充 []/{} 字面量检测防漏;json 由 _dict 真实 import 链带入。
builtins 保留始终纳入(设计意图)。
|
2026-08-13 03:27:31 +08:00 |
|
TermiNexus
|
b4c01808bf
|
fix(phasec): 可达模块 .obj 缺失误杀恢复,纯声明模块跳过
Phase B+ 对纯声明模块(text.ll 无 define 行,如 stdio.vp 全 pass)
按设计不生成 .obj,但 Phase C 遍历可达模块时无条件要求 .obj 存在,
导致误杀。新增 StubMerger.IsDeclOnlyModule 判断(与 Phase B+ 内联
逻辑一致),.obj 缺失时声明文件静默跳过,实现文件缺失仍 fail-fast。
|
2026-08-13 03:11:13 +08:00 |
|
TermiNexus
|
c9de06e76d
|
fix(stubmerger): 依赖 stub/text 为空误杀恢复静默跳过
stdio.vp 等纯声明模块(全 pass)text.ll 为空是合法形态,stub.ll
为空同理(纯常量/纯导入模块)。fail-fast 改造对"文件存在但为空"
加了错误上报导致误杀,恢复静默跳过;文件缺失分支保留 fail-fast。
|
2026-08-13 03:05:41 +08:00 |
|
TermiNexus
|
a56fc6badc
|
fix(type): CDefine 编译期常量表达式补齐二元运算符
zdef.vp 中 ZDEFLATE_WINDOW_SIZE = (1 << ZDEFLATE_WINDOW_BITS) 是
LShift 表达式,extract_cdefine_int_value 的 BinOp 分支原先只支持
|/&/+/-,被 fail-fast 误杀。对齐 TPC ConstEvaluator 补齐
BitXor/LShift/RShift/Mult/FloorDiv/Mod
|
2026-08-13 03:01:02 +08:00 |
|
TermiNexus
|
64195f183e
|
feat(type): 支持字符串 CDefine(如 ZLIB_VERSION = "1.3.2")
- TypeGenMixin 新增 CDefineStrFlags/CDefineIsStr 字段与
register_cdefine_string/lookup_cdefine_string/is_cdefine_str 方法
- AssignGenMixin._register_cdefine_from_value 新增 CONST_STR 分支
- ExprGenMixin.translate_name_value CDefine 本地/跨模块均支持字符串
- Generator.InitGen / HandlesType 委托同步初始化新字段
|
2026-08-13 02:58:15 +08:00 |
|
TermiNexus
|
9eee43c304
|
feat(stmt): 支持 raise 语句(对齐 TPC StopIteration 语义)
Viper 无异常传播:raise 统一按终止函数并返回零值处理,对齐 TPC HandlesRaise——迭代器 __next__ 用 null/0 表示迭代结束(dict.__next__ 的 raise StopIteration)。此前 translate_stmt 不识别 raise 静默跳过(越界后继续执行读垃圾),且未知语句 fail-fast 会误杀。
|
2026-08-13 02:50:07 +08:00 |
|
TermiNexus
|
8b8b716523
|
fix(call): 恢复缺参零值兜底,消除默认参数表查不到时的误杀
默认参数表按裸名注册(如 __init__),跨模块 'ClassName.method' 查找常查不到——查不到不等于无默认值(如 Buf.__init__(data, capacity) 缺的 length=0/owned=False 恰为零值)。恢复三处零值兜底(_call_method_on_ptr if/elif、_translate_method_call if、kw 分支),保留快照缺失 fail-fast。
|
2026-08-13 02:46:52 +08:00 |
|
TermiNexus
|
0c94f52f21
|
fix(call): 缺参 fail-fast 误杀参数匹配的构造调用 + 行号修复
- _call_method_on_ptr 的 elif found_func 分支原无条件 fatal,即使实参与形参匹配(如 JsonValue(pool) 构造 __new__(self, pool))也误报;改为数 found_func 形参数量,仅 total_count < fp_count 时缺参报错。
- 构造路径(_translate_struct_ctor/_translate_struct_ctor_kw)的 _call_method_on_ptr 调用补传诊断节点(取首个实参 AST),fatal_error 不再显示 line 0。
|
2026-08-13 02:41:52 +08:00 |
|
TermiNexus
|
e796e7fc2b
|
fix(expr): list 元素类型未知恢复 i8* 回退
list[Foo]/list[AST|t.CPtr] 等自定义类元素列表下标访问:元素存储为 8 字节槽,回退 Ptr(i8) 位宽一致(load 8 字节)且由 AnnotClassName/特化恢复保证语义。fail-fast 误杀合法自定义类元素列表,恢复回退。
|
2026-08-13 02:33:53 +08:00 |
|
TermiNexus
|
1b80283634
|
fix(type): 联合类型前向自我引用误杀恢复回退
json 等类的字段 'JsonValue | t.CPtr' 引用自身类,类体处理中尚未注册(前向自我引用)是合法场景,由 Phase A-pre 多遍注册 + AnnotClassName 恢复处理。恢复类名未注册时回退 Ptr(i8),禁止 fail-fast 误杀。
|
2026-08-13 02:32:22 +08:00 |
|
TermiNexus
|
03df4f1a20
|
fix(imports): 相对导入 fail-fast 误杀 includes 顶级文件
includes 顶级文件(如 viperstring.vp 的 from .string import *)无包上下文(current_package=None)是常态,此时相对导入语义=同目录/根目录模块,回退 module 是正确解析而非降级。恢复 current_package is None / 上溯越界 / pkg 为空的回退,避免误报 ImportError。
|
2026-08-13 02:13:38 +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
|
8f484f6860
|
fix(gen): extract_module_docstrings 用 children 而非不存在的 body 字段
- FunctionDef/ClassDef 无 body 字段(函数体在 AST.children),fd.body 被编译为基类 parent 字段,bitcast 父节点当 list 调用 __len__ 导致 ASan 读 0xffffffffffffffff 崩溃
- 4 处 .body 改为 .children(与全库一致)
- BuildPipeline: docstring 提取提前到 tr.translate 之前(避免 translate 期间 mb 池复用 AST 池块)
|
2026-08-12 21:45:32 +08:00 |
|
TermiNexus
|
98ddf7977e
|
refactor(handles): BuildPipeline/HandlesAnnAssign 深层短路合并
- BuildPipeline _CollectObjFilesImpl: .obj 判断与容量检查合并短路
- HandlesAnnAssign: 泛型特化 spec_name 提取降层(9→7)
- 行为语义保持不变
|
2026-08-12 21:15:16 +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
|
1c7e8c2056
|
fix(build): ASan includes 缓存独立目录隔离
- Config: get_includes_binary_dir 支持可配置后缀(_inc_bin_suffix)
- main: --asan 用 .binary_asan 独立缓存并清理,非 asan 复位 .binary
- 修复 asan 插桩 obj 与非 asan obj 混链 → __asan_init undefined reference
|
2026-08-12 19:12:52 +08:00 |
|
TermiNexus
|
b232c9266c
|
fix(gen): 裸名 CArray 类字段解析 + 跨模块函数返回类型 vpi 解析
- TypeGenMixin/HandlesAnnAssign: 支持 from t import * 后裸名 CArray[...]
(单参→Ptr(elem),双参→Array),修复 T4K3 类字段 CArray[str]=[...]
退化为 list[str] 动态构造 → list[str] 特化/append/_mbuddy 链接 undefined
- CallGenMixin: 跨模块函数调用返回类型按 vpi stub 注解解析
(tuple[T1,T2]→{T1,T2}),修复 b2a_hqx tuple 解包失效
|
2026-08-12 19:12:45 +08:00 |
|
TermiNexus
|
304bece6fa
|
feat(TPV): CArray 形参衰减/tuple 多返回/dict 迭代/ASan 模式等
- CArray 形参按 C 语义衰减为元素指针(FuncGenMixin/ClassGenMixin/VpiReader 多处)
- 跨模块调用 found_func=None 时数组实参衰减,修复 md5.final 实参 [16 x i8]* 与
定义 i8* 类型不匹配
- VpiReader 返回注解支持 tuple[T1,T2] -> 匿名结构体(b2a_hqx -> {i8*,i16})
- 变参 i8/i16 提升按无符号性 zext/sext(print_hex %02x 不再 ffffff 前缀)
- dict 容器可见性/迭代、c.Deref 赋值注解宽度推断、错误定位日志
- HandlesExprCall._check_and_promote_variadic_call 委托同步 9 参
- BuildPipeline/main 支持 --asan 模式(opt -passes=asan + -fsanitize=address)
|
2026-08-12 18:17:52 +08:00 |
|
TermiNexus
|
4fd331dc08
|
fix(gen): 类字段单参CArray静态数组推断+列表默认值深拷贝;G3泛型循环防护与before_init去重;f-string/ctraits支持
|
2026-08-12 01:27:13 +08:00 |
|
TermiNexus
|
a649e4807d
|
fix: 泛型返回类型短路/数组迭代/非工作区崩溃
- CallGenMixin: 本模块 mangled 调用从当前 IR 取返回类型, 不查自己的 text.ll(未生成误告警)
- HandlesFor: Ptr([N x T]) 数组退化指针 load 后走数组迭代
- Config: 配置字段默认 None/0, 避免垃圾指针通过 is not None 检查
- main: 无 project 配置且无 --src 时 fail-fast 退出(非工作区崩溃)
|
2026-08-11 23:14:27 +08:00 |
|
TermiNexus
|
e7b0fecb99
|
fix(asm): 内联汇编输出约束修复(去重+多输出 struct)
- _asm_add_operand 去重: 模板内嵌 AsmOut/AsmInp 与 out=/inp= 声明同一变量不再重复收集
- ret_ty 多输出: output_count>1 返回匿名 struct, 元素数=输出数
- 输出处理: 多输出 extractvalue 逐元素 store(rdrand*_step 的 val+ok)
- extractvalue SSA 名改字母前缀 %asm.N.e{i} 避免数字 ID 后缀非法
|
2026-08-11 22:20:25 +08:00 |
|
TermiNexus
|
244c8efc96
|
feat(for): list 容器迭代与 enumerate/zip 多变量迭代
- HandlesFor: for v in lst 按 __count__+__data__ 动态长度迭代; 统一序列循环(RANGE/STR/LIST); cast 链属性访问改中间变量(避免字段偏移推断错误)
- ExprGenMixin: 跨模块 CDefine 完整修复——vpi 仅声明无值回退源文件、includes 双前缀路径、浮点值 atof 解析+double 缓存+ConstFloat 返回
|
2026-08-11 22:10:01 +08:00 |
|
TermiNexus
|
882c78c67a
|
feat(gen): ListTest 联合下标修复 + DocTest docstring 完整保留
- CallGenMixin: 默认参数快照无条件查询、静态类调用识别、len() 走 __len__
- TypeGenMixin/AssignGenMixin: T | t.CPtr 泛型标量元素宽度修复
- ExprGenMixin: / → __truediv__、指针判空走 icmp null、__doc__ 完整保留(登记表+跨模块符号解析)
- BuildPipeline: 翻译后提取模块 docstring(预注册阶段跨模块可用)
- Generator: DocKeys/DocValues/DocCount 登记表字段
|
2026-08-11 21:21:40 +08:00 |
|
TermiNexus
|
83d46dd646
|
fix(gen): 装饰器标记支持 + len 分发 + 跨模块调用修复
- _is_enum_class/_is_union_class/_is_renum_class 支持 @t.CEnum/@t.CUnion/
@t.REnum 装饰器形式(此前只认继承基类,装饰器形式 Color 未注册枚举,
Color.GREEN 落到跨模块 CDefine FATAL)
- forward_declare_functions/translate_function_def 支持 @t.CExport/@t.CExtern/
@t.State 函数存储装饰器(对齐 TPC _extract_decorator_storage_flags);
用 HandlesClassDef._has_decorator 委托(Mixin @t.NoVTable 静态绑定,
self. 跨类调生成不存在的 FuncGenMixin._has_decorator → 链接 undefined)
- len() 内建对结构体对象分发 __len__(此前恒 strlen 读对象首字段垃圾长度)
- 静态调用检测 elif:module.ClassName.static_method 形态;零参 @staticmethod
去掉 head is None 守卫;_translate_property_call 按形参类型 coerce 实参
- translate_compare 指针判空(ptr != 0/== 0)跳过 __eq__/__ne__ 重载走
icmp null;同模块类无此 dunder 干净返回 None 防幽灵 call;/ → __truediv__
|
2026-08-11 18:42:04 +08:00 |
|
TermiNexus
|
48d9fbab4c
|
fix(gen): nonlocal 跨层共享与链堆预建修复(ClosureTest2 12/12 通过)
- 嵌套函数独立 nonlocal 缓冲,防共享缓冲 [0] 槽覆盖(Test 7 根因),
translate_nested_function_def 三处退出点补齐缓冲恢复
- _prepare_chain_nonlocals 去掉模块全局 found_g 跳过:建堆+store 每次
照发,映射变量仅首次 add(去重),修复跨测试函数残留堆地址致 env 读错堆
- 新增 trans._nl_chain_done 每函数标志(translate_function_def 入口重置),
多嵌套函数定义共享同一堆,防重复 malloc + 二次重定向 VarEntry
- nonlocal 属性/下标优先走 env 读堆值(对象即指针,Struct/Array 不 load),
新增 _nonlocal_subscript_ptr 经 env 读堆地址后 GEP
- _type_byte_size 按类型字节数分配 nonlocal 共享堆(数组 16 字节防越界)
|
2026-08-11 17:30:01 +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
|
5c6ba308ae
|
fix(ClassGenMixin): register_method_meta 按位或合并装饰器元数据
同一属性名先 @property 再 @x.setter/@x.deleter 时整值替换覆盖 GETTER 位,property 拦截失效导致属性访问落空返回 None,llvmlite 收到 NULL Value 段错误(BuiltinDecoratorTest Phase A 崩溃)。改为 flags |= meta 合并,getter/setter/deleter 位共存。
|
2026-08-11 01:34:04 +08:00 |
|
TermiNexus
|
65d7342d0b
|
fix(Gen): 联合类型数组下标按 8 字节步长(写路径 + CUInt64T|CPtr)
get_subscript_ptr 写路径 IsPtrElement 分支 GEP base 误用 alloca(栈地址),list append 只增 count 不写 data(dump 虚调用读 0xbaadf00d 崩溃),改为先 load 指针值再 GEP。另扩展 _is_ptr_element_annotation 识别 CUInt64T|CPtr 等 64 位标量联合,避免 GEP 步长 1 + trunc i8 截断指针(BuddyTest OOM/fill ptrs 数组 free 全部无效)。
|
2026-08-11 01:33:58 +08:00 |
|
TermiNexus
|
120a2d7ad7
|
fix(Phase2): Phase A 多遍重试修复同项目依赖翻译顺序
main.vp 先于其 import 的 mbuddytest.vp 翻译(文件系统顺序),跨模块函数返回类型精确解析因依赖 text.ll 未生成而 fail-fast。新增 Translator._deps_pending + text.ll 存在性探测区分依赖未翻译/真错误,Phase A 循环改多遍,依赖就绪后下遍重译命中。
|
2026-08-11 01:33:52 +08:00 |
|
TermiNexus
|
b5657b3790
|
fix(TPV): 属性链按需过滤 + 字段查找回退顺序 + t.CArray 跨模块 CDefine
- ExprGenMixin: 属性链写入/读取按需过滤支持 base 为 Attribute(_resolve_attr_field_class 沿属性链递归字段注解类名回溯,联合类型 X|t.CPtr 简化 i8* 时 bitcast 回真实 struct)
- StructGenMixin: lookup_field_by_class 回退分支先查找字段再报错(原 error 在查找前无条件退出导致跨模块 SHA1 不匹配时永远失败)
- TypeGenMixin: _eval_const_int_expr 增加跨模块 CDefine 查找(t.CArray count 引用依赖模块 CDefine 如 SHA512_BLOCK_LEN)
|
2026-08-10 23:01:50 +08:00 |
|
TermiNexus
|
cca468e910
|
feat(gen): 实现 super() 语义(super().__init__ / super().method 静态绑定父类)
- 新增 _translate_super_call:当前类取 self 变量注解类名(Mixin 字段
跨类偏移不一致的替代方案),沿 MRO 跳过自身找父类方法,静态调用
父类实现(不虚分派),this_adjust 字节偏移 + 参数 coerce
- translate_call 拦截 super().method 形态
|
2026-08-10 21:48:42 +08:00 |
|
TermiNexus
|
45ba3a4b5a
|
fix(gen): TPV isinstance 运行链路修复(构造 vtable 槽/this_adjust/虚分派/NoVTable)
- 构造展开跳过 __vtable__ 字段,修复 Dog("dog") 覆盖 vtable 导致 isinstance 全失败
- this_adjust 改字节偏移法(delta=子类偏移-父类偏移),覆盖 vtable 父类
- _do_virtual_call 新增 vtable_base:读 vtable 用对象头,调用用调整后 self
- NoVTable 类无参构造分配内存而非返回 ConstZero
- ClassGenMixin:类体 CDefine 兜底注册 + vtable linkage 默认 external
|
2026-08-10 21:15:43 +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 |
|
TermiNexus
|
451be82b32
|
fix(gen): 清理 ASan 二分调试检查 + StdlibAlloc 跨 Mixin 委托 + 调试链修复
1. 移除 ClassGenMixin 泛型判断前/模板注册后与 Phase1 五处 gen 完整性二分检查(GlobalFuncs 调试残留,Mixin 方法体访问非自身字段违反块内索引约束)。2. ClassGenMixin._register_struct 读 self.StdlibAlloc(StructGenMixin 字段)改经 HandlesStruct.get_stdlib_alloc 委托,新增 StructGenMixin.get_stdlib_alloc。3. 含 P5 后累积修复(VpiReader ParamCount/越界封堵等)。
|
2026-08-10 18:09:23 +08:00 |
|
TermiNexus
|
ba3f22702e
|
refactor(gen): P5 对象化迁移完成 - FuncGenMixin/ClassGenMixin 全量迁移+委托层; 泛型模板表迁入 gen 字段; stub 方法 ParamCount 不含 self(修复跨模块方法调用默认参数填充错位); 默认参数快照失败 fail-fast(防悬空 AST UAF); HandlesMatch 改委托 gen._lookup_renum_variant
|
2026-08-10 06:24:50 +08:00 |
|
TermiNexus
|
0e4f00baf4
|
refactor(gen): P4 CallGenMixin - HandlesExprCall 86 函数迁移 + 委托层
HandlesExprCall(7043 行, 本仓库最大文件)全部模块级函数迁移为
CallGenMixin 方法(含 translate_call 1408 行整体迁移),全局表
(cexport/LLVMIR 序号/temp_dir/闭包/funcptr/全局函数表/默认参数表)
迁入 gen 字段;旧函数保留为 _g_gen 单例委托,4 类保留。Generator
多继承追加 CallGenMixin(现为 5 Mixin 组合)。
修复 P4 迁移引入的两处缺陷:
1. HandlesTranslator 引用已删除的 HandlesExprCall._g_temp_dir → None
导致跨模块 .vpi 注入全局失效(json 翻译崩溃),改用
HandlesType.get_temp_dir()
2. Generator 50 字段突破 FIELD_MAX=48 硬上限导致字段截断丢失,
字段槽位上限提升至 64(HandlesStruct/StructGenMixin/HandlesClassDef)
|
2026-08-10 03:31:10 +08:00 |
|
TermiNexus
|
24c1aada30
|
refactor(gen): P3 ExprGenMixin - HandlesExpr/ExprOps 51 函数迁移 + 委托层
HandlesExpr 45 个表达式函数(translate_value/subscript/attribute 等)
与 HandlesExprOps 6 个运算符函数(try_operator_overload/translate_binop
等)迁移为 ExprGenMixin 方法;本模块调用 self 化、外部模块调用保留
前缀,_lookup_cross_module_cdefine(490 行)完整迁移。旧函数保留为
_g_gen 单例委托。Generator 多继承追加 ExprGenMixin(4 Mixin 组合)。
|
2026-08-10 02:11:26 +08:00 |
|
TermiNexus
|
34a37358c9
|
refactor(gen): P2-2 StructGenMixin - HandlesStruct 53 函数迁移 + 委托层
HandlesStruct 全局注册表/可见性状态迁入 StructGenMixin 字段,
53 个结构体注册/查找/字段函数迁移为方法(register_struct/find_struct/
lookup_field/get_mro_chain 等);旧函数保留为本地 _g_gen 单例委托。
Generator 多继承追加 StructGenMixin(现为 3 Mixin 组合)。
|
2026-08-10 01:55:15 +08:00 |
|
TermiNexus
|
e1ef67d013
|
refactor(gen): P2 TypeGenMixin 迁移 + 全局单例委托机制
Generator 改 @t.NoVTable 多继承(BaseGenMixin + TypeGenMixin)组合;
HandlesType 54 个类型函数迁移为 TypeGenMixin 方法(全局状态迁入
gen 字段),旧函数保留为委托层。单例经 HandlesType 模块级 _g_gen
注入(BuildPipeline/main),避免 TPC 包短名未注册与 Generator
类/模块名歧义导致的编译链接问题。bootstrap 38/38 通过。
|
2026-08-10 01:46:28 +08:00 |
|
TermiNexus
|
b3170ba823
|
feat(handles): Viper 多继承支持 M1-M4 - 父类数组+MRO/字段展平/vtable合并/this调整
HandlesStruct: StructEntry 增加 ParentNames/ParentCount + get_mro_chain
(深度优先+声明顺序+去重, 含自身, mro[0]=自身)
HandlesClassDef: 多父字段展平去重 + vtable 合并(方法短名去重+探测实际定义类)
+ 继承链统一 vtable 判定 + 无字段类(接口/标记类)支持 + 空 struct 跳过 zeroinitializer
HandlesExprCall: 方法调用沿 MRO 回退 + 继承方法 this 调整(GEP 定位+bitcast 成父类指针)
HandlesExprOps: 运算符重载 MRO 链查找
|
2026-08-10 00:28:58 +08:00 |
|
TermiNexus
|
37626bca63
|
feat(gen): P1 Generator 骨架 - BaseGenMixin/Generator 拆分与 BuildPipeline 接入
引入 lib/core/Gen/ 对象化骨架(对象化 P2 起点), BuildPipeline.Generate
接入 LLVMCG 生成链路; Generator.InitBaseGen 内联初始化(规避 Viper 继承
不转发父类方法符号的链接问题)。
|
2026-08-10 00:28:51 +08:00 |
|
TermiNexus
|
695699f01e
|
fix(build): 统一 SHA1 口径消除符号前缀不一致(undefined reference)
- Phase2 App 源文件 SHA1 改用 IncludesScanner.compute_file_sha1(CRLF→LF 归一化), 与 StubMerger 对同一批文件口径一致; 此前用 Utils.compute_sha1(原始字节) 在 CRLF 文件上产生不同前缀
- compute_file_sha1 BUF_SIZE 128KB→1MB(与翻译侧 SRC_BUF_SIZE 一致), 消除大文件尾部变更不触发缓存失效
|
2026-08-09 22:54:32 +08:00 |
|
TermiNexus
|
f63dcd7fed
|
fix(handles): 对象化前的最后稳定版本
- 修复 t.CVoid(x, CPtr) 裸名 CPtr 识别失败导致方法体 ret null(scale/move/__new__/take_damage 链式调用对 NULL 解引用崩溃)
- c.Addr(self) 返回对象指针(load 一层 Ptr(Struct)), 与 c.Addr(self.field) 语义一致
- return 语句指针→指针元素类型不匹配(i8* → 类指针)自动 bitcast, 避免 llc 类型不匹配
- 多层继承 vtable 槽沿父类链用 find_func_global 定位实际定义类(修复 ElectricCar.is_running=null)
- 新增一元运算符重载(__neg__/__pos__/__invert__)
- 新增表达式接收者方法调用 (expr).method(args)
- map_t_type 补 CFloat8/16/32/64/128T 精确宽度浮点映射
|
2026-08-09 22:19:21 +08:00 |
|
TermiNexus
|
da23160ca6
|
fix(handles): 变参调用按 Win64 8 字节槽位提升(整数 sext 到 i64, f32 提升 f64)
根因: 变参按窄类型(i32)传入, LLVM 只写 4 字节进 8 字节栈槽, 高 4 字节残留旧数据;
viperlib %d 强制 va_arg 读 i64 暴露残留高位(如 0x400921FB00001000, 高位是 PI 残留)。
修复: found_func.IsVarArg==1 且参数在变参位时提升, 对齐 TPC/Python-llvmlite ABI 自动提升。
SprintfTest R1-R4 PASS, DefineTest PAGE=4096 验证通过。
|
2026-08-09 04:06:17 +08:00 |
|
TermiNexus
|
e5a99abb63
|
fix(handles): 本轮修复集 - StructTest/TypeCastTest/StringIterTest/va_list
- t.Struct 纳入标记基类: 消除幻影父类虚假 vtable + Phase A-pre 延迟注册, 修复 point_sum 参数退化为 i32(签名与函数体 Ptr 不一致, llc 报错)
- 指针算术改 GEP 元素缩放(对齐 TPC): ptrtoint+add 字节语义致 i32*/struct* 偏移错误(StringIterTest Test4/8)
- 右移按操作数符号性选 lshr/ashr + t.XXX 注解 AnnotClassName 提取 attr + _node_type_unsigned Name 分支查变量无符号性(TypeCastTest)
- 显式类型转换按符号性 sext/zext; _call_method_on_ptr 传 node 修复 line 0 报错; __getitem__/__setitem__ stub 守卫 + 结构体字段 bitcast 条件化
- va_list 24 字节对齐 + build_alloca_aligned; CIf 运行时回退(CIf 真值/CIfdef 恒真); parse traceback; builtins 关联
|
2026-08-09 03:39:26 +08:00 |
|
TermiNexus
|
e79b676e51
|
feat(handles): 实现 c.CIf/c.CIfdef/c.CIfndef 编译期宏(对齐 TPC HandlesIf)
- 常量表达式求值: CDefine/跨模块 CDefine/平台宏 + 算术/比较/逻辑/位运算
- 编译期剪枝: 命中分支只编译, elif 递归, 未定义名特判(CIfdef 走 else/CIfndef 走 then, 不报错)
- 求值失败(运行时变量)回退运行时翻译(HandlesExprCall: CIf 真值比较/CIfdef 恒真)
|
2026-08-09 03:39:18 +08:00 |
|
TermiNexus
|
57d6ffefad
|
fix(TPV): c.Set 实现赋值语义 a=b(三形态: c.Deref左值/Name/Attribute), 修复 undefined reference to Set; 函数默认返回/裸return按返回类型生成浮点零值(ConstFloat 0.0, 修复 llc value doesn't match)
|
2026-08-08 21:35:59 +08:00 |
|
TermiNexus
|
59ae99f6d7
|
fix(TPV): 浮点CDefine存储与浮点调试打印改用CRT stdio(绕开viperlib %g格式化bug); REG-SRC 拆位模式打印定位 float_val 覆写假象
|
2026-08-08 20:38:24 +08:00 |
|
TermiNexus
|
92ba3af752
|
fix(TPV): 浮点 CDefine 注册多方案绕开 pool 覆写与跨模块 double 传递问题 - 查表/str_val/源文件重读+atof_out 输出参数; PRE-TR/PRE-ML/REG-SRC 定位插桩; 记录浮点节点构造值表
|
2026-08-08 19:42:54 +08:00 |
|
TermiNexus
|
24d3de4b72
|
fix(TPV): 统一浮点 CDefine 注册路径 + 1a 预扫描签名防 UAF - handle_module_level_var/PreScan 统一走 _register_cdefine_from_value(浮点/整数自动识别); 新增 register_cdefine_double/lookup_cdefine_double(%.17g 存值); translate_name_value 浮点 CDefine 返回 ConstFloat(修复 llc ret i32 0); 1a 预扫描函数签名提前泛型特化到 mark1 前(防 UAF); 移除 ASSIGN-DBG; 临时定位插桩 CDEF-DBG
|
2026-08-08 18:18:44 +08:00 |
|
TermiNexus
|
aa6eee54e9
|
fix(compiler): 支持模块限定泛型类类型注解 numpy.ndarray[t.CDouble]
Subscript value 为 Attribute 时仅支持 t.CArray/t.Callable,模块限定
泛型类(numpy.ndarray[T])触发 fail-fast。提取 _resolve_generic_subscript_ty
辅助函数,Name 泛型类与 Attribute 泛型类共用(收集实参→mangled→特化)。
|
2026-08-08 16:41:47 +08:00 |
|
TermiNexus
|
16d0302b08
|
fix(compiler): stub 注入泛型类跳过方法 declare,修复 ndarray[T] 错误特化
Phase2 翻译 App 文件注入 numpy stub 时,_inject_method_declare 解析
class ndarray[T] 的模板签名(ndarray[T] | t.CPtr),T 无上下文可替换
→ _specialize_generic_class("ndarray", ["T"]) 递归崩溃。泛型类
(type_params 非空)跳过方法 declare 注入,具体特化方法 define 已由
Phase1 生成,返回类型仍走 vpi 返回注解缓存泛型归一化。
(含 4 处 TC-DBG 定位插桩,验证后移除)
|
2026-08-08 16:33:04 +08:00 |
|
TermiNexus
|
94b84c7dc1
|
refactor(compiler): c.LLVMIR 改无返回值直接嵌入 IR 文本(不做指令解析)
translate_c_llvmir 重写:LInp 替换为值引用文本、LOut 分配唯一 SSA
寄存器 %llvmirN 并自动 store 写回变量 alloca;模板经 block_append_text
直接嵌入当前基本块;返回 None(ret_ty 废弃)。删除 9 个旧指令解析
辅助函数。
|
2026-08-08 16:10:29 +08:00 |
|
TermiNexus
|
3a6296d638
|
fix(compiler): 支持裸名 float/double 映射 + 前向声明时序 + 类型解析 fast-fail traceback
- resolve_annotation_type Name 分支与 map_t_type 补小写 float(→f32)/double(→f64),
float(0.0) 转换原误映射 f64 改为 f32(vipermath fmodf result: float 修复)
- forward_declare_functions 解析签名期间临时切 declare_only=1,
签名触发的泛型特化只注册结构体,方法体延迟补译(numpy _empty_like 前向引用修复)
- HandlesAnnAssign 变量类型注解解析失败改 fatal_error(Python traceback)
- c.LLVMIR 未识别指令改 fatal_error 立即终止(原静默返回 None)
|
2026-08-08 15:59:08 +08:00 |
|