TermiNexus
|
fa52fbd4e5
|
fix(gen): REnum 变体检测避免指针减法生成非法 sub i8*
rc_mq_dot - rc_mq_path 两操作数都是 str(i8*),TPC 直接发 sub i8*, i8*
非法 IR,opt ASan 插桩失败。改用 strlen 整数差计算模块前缀长度
(strlen(path) - strlen(cls) - 1),与既有 d_i - d_start 整数减法写法一致。
|
2026-08-19 02:54:08 +08:00 |
|
TermiNexus
|
e700de1055
|
fix(gen): REnum 变体构造支持模块限定形式 mod.Class.Variant
CallGenMixin.translate_call 的 REnum 变体检测只认单层 Name(ClassName.Variant),
llvmlite.LLVMType.Struct(...) 这类嵌套属性漏检 → 误走跨模块函数路径 →
_lookup_module_sha1('llvmlite.LLVMType') 查无 → '跨模块调用找不到模块 SHA1'。
根因修复:扩展检测到嵌套 Attribute,取路径末段为 REnum 类名、前缀为模块,
仅要求最左模块已导入(跨模块任意同名可接受,不做类归属校验),命中后走
_translate_renum_construct 构造变体。对应 TPC HandlesExprCall 静态方法路径。
|
2026-08-19 02:45:10 +08:00 |
|
TermiNexus
|
941ba2feb0
|
fix(call): 模块属性调用不回退局部变量,修同名局部变量劫持 VLogger.fmt_buf
found_func 未命中时仅裸名调用(Name)回退查局部变量(函数指针/闭包);模块属性调用(VLogger.fmt_buf())目标是模块符号,跨模块任意同名可接受(CallGenLeafKit 局部 fmt_buf 曾劫持 VLogger.fmt_buf → 误走函数指针调用报 t.Callable 缺失),仅 from-import 裸名 yyy 重名才冲突
|
2026-08-19 02:30:18 +08:00 |
|
TermiNexus
|
ebf0aed5b1
|
fix(cbuiltin): translate_c_addr 补末尾 return None(真实掉出)
arg0 非 Name/Attribute/Subscript 时三个分支都不进入 → 流程真实掉出函数末尾,补显式 return None(fail-fast 不允许掉出)
|
2026-08-19 02:30:11 +08:00 |
|
TermiNexus
|
132c48d41a
|
fix(gentype): register_ctypedef_from_source 先清表再注册,修 stdint.vp strcmp 悬空遍历崩溃
clear_ctypedefs 只在 translate 前调用,文件 reset_to(mark1) 回收后上一文件 CTypedefNames 表悬空(非 None);本函数去重遍历读已回收内存 → ASan strcmp 读地址 0x4(1.log)。开头 clear_ctypedefs 重建表,杜绝悬空遍历
|
2026-08-19 00:45:08 +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
|
65838da0dc
|
fix(Generator): 补全 ClassGenBase 拆分遗漏的 17 个字段初始化
结构体由 mb.alloc 分配,未初始化字段是内存垃圾。异常表字段(ExceptionCount/ExceptionNames/ExceptionParents/ExceptionCodes/NextExceptionCode/_exception_codes_tmp_count)此前未初始化,无用户异常类的项目(如 FuncTest)从不触发 _ensure_exception_tables 懒分配,is_exception_name 里非 null 垃圾指针通过 is not None 检查后 strcmp 越界(ASAN heap-buffer-overflow)。一并补上 RenumAliasTy/RenumAliasVariant/ClassMeta 4 个/Decorator 4 个/GenericSpecDepth 字段。
|
2026-08-18 12:40:21 +08:00 |
|
TermiNexus
|
d18f9a7e7f
|
fix(phase1): CTypedef 改源码文本扫描注册,彻底修 stdint.vp 访问违规崩溃
AST 字符串字段(attr/id)token 零拷贝指向 src_buf,跨阶段内容不稳定
(悬空)——ScanCTypedefDeclarations 读 attr 在两次运行间内容不同
(上轮 prefix=1 有效、本轮直接崩),0xC0000005。修复:
1. Phase1 1b translate 前用 RegisterCTypedefFromSource 纯文本逐行匹配
'NAME: t.CTypedef = TYPE' 注册(src_buf 有效期内),不依赖 AST 内容
2. 移除 translate 内 ScanCTypedefDeclarations 调用(已被文本扫描替代)
|
2026-08-18 10:22:26 +08:00 |
|
TermiNexus
|
23945cd168
|
fix(gentype): ctypedef 检查 strcmp 改 strncmp 限长比较,修 stdint.vp 读穿崩溃
prefix=1(attr 内容 'CTypedef' 正确)后仍崩——attr 是零拷贝引用
src_buf 的 token 字符串,无 NUL 结尾(后跟空格/其他字符),strcmp
无限读穿到页边界 0xC0000005。改 strncmp 限长 8 + 第 9 字节分隔符
校验;mod_id 的 strcmp 同样改 strncmp。
|
2026-08-18 10:02:26 +08:00 |
|
TermiNexus
|
8db2d1c23b
|
fix(assign): _is_scalar_ty_name 改白名单,修 list[str].get 返回类型不匹配
原实现排除 Ptr/str/bytes/| 后默认返回 1(标量),把未知类名(如泛型
上下文污染产生的 llvmlite.Value)误判为标量 → IsPtrElement=0 →
elem_ptr[0] 走通用路径生成 Value*,list[str].get 声明 i8* 与 ret
Value* 不匹配(8fbba llc 报错)。改白名单:已知整数/浮点/字符标量
才返回 1,未知类名按 8 字节指针槽(list 元素本就是 8 字节槽)。
|
2026-08-18 09:51:54 +08:00 |
|
TermiNexus
|
0f25dc1511
|
chore(gentype): resolve_annotation_type 加 T 替换断点(方法体局部注解路径)
上一轮 resolve_generic_type_name 断点无输出——方法体局部注解
(elem_ptr: T|t.CPtr)的 T 替换走 resolve_annotation_type 的
Name(T) 分支(gen.GenericTypeArgs),非 resolve_generic_type_name。
在此打印 T 实际替换值,确认 list[str].get 的 T→str 还是 T→Value。
|
2026-08-18 09:48:11 +08:00 |
|
TermiNexus
|
5ec6a3baef
|
chore(gentype): resolve_generic_type_name 加 T 替换断点,定位 list[str].get 类型不匹配
8fbba(ForHandleIter.vp 的 list[str].get)声明返回 i8* 但函数体
ret Value*——get 方法体里 T|t.CPtr 的 T 疑似被替换成 Value(泛型
上下文 GenericTypeArgs 被嵌套特化污染)。打印 T 替换结果确认。
|
2026-08-18 09:43:10 +08:00 |
|
TermiNexus
|
8db5dc63a5
|
chore(gentype): ctypedef attr 手动逐字节检查(防 strcmp 读穿崩),定位内容损坏与读越界
|
2026-08-18 09:32:12 +08:00 |
|
TermiNexus
|
7178d169e3
|
chore(gentype): ctypedef 检查加 attr 读取断点,对比构造与读取地址
|
2026-08-18 09:25:36 +08:00 |
|
TermiNexus
|
7a7c3939db
|
fix(gentype): CTypedef/注解类型名处理改用 ast 字段访问器,修 stdint.vp 访问违规崩溃
断点确认 AnnAssign 字段地址全部合理(stub 字段访问正常),崩溃在
_is_ctypedef_annotation / _get_type_name_from_annotation 对 Attribute.
attr/Name.id 等字段的访问(跨模块 stub GEP 偏移错 → strcmp 读垃圾
0xC0000005)。改用 ast.name_get_id/attribute_get_attr/attribute_get_
value/binop_get_*/constant_get_str_val 访问器(ast 模块完整类型内读取)。
并加 kind() 虚调用断点,若 vtable 错可立即确认。
|
2026-08-18 08:59:10 +08:00 |
|
TermiNexus
|
2847d358c8
|
chore(gentype): ScanCTypedefDeclarations 加 AnnAssign 字段地址断点
stdint.vp 崩溃已定位到 ScanCTypedefDeclarations(容器可见性完成后)。
加断点打印 AnnAssign 节点与 annotation/target/value 字段地址,
垃圾地址即确认跨模块 ast stub 字段访问偏移错。
|
2026-08-18 08:50:50 +08:00 |
|
TermiNexus
|
43470b6e4a
|
fix(vpi): 参数数上限哨兵 + declare 链遍历哨兵,定位 builtins.vp dump 卡死根因
dump 步数哨兵已定位卡死链路为 printf 的 Params 链异常。新增:
1. VpiReader _inject_function_declare/_inject_method_declare 参数数上限
128(fail-fast):vpi tree 深层节点被覆盖损坏时 args_list.__len__()
返回垃圾大数 → add_param 海量次 → Params 链超长,dump 误报成环
2. CallGenBase._ensure_method_declare FuncHead/Params 遍历步数上限
(防 translate 期间死循环)
|
2026-08-18 08:10:18 +08:00 |
|
TermiNexus
|
453f428aab
|
fix(gen): TypeGenErr 补 import w32.fileio,修复 File 类型错位
TypeGenErr._read_source_line 使用 fileio.File 但未 import fileio → TPC 全局符号回退解析 fileio.File 时类名错位成 7cadfe07e983fd90.File(_list 前缀),与 fileio 构造的 d137b1f3311f3a7f.File* 类型不匹配(if f.closed 报 Type of #1 arg mismatch)。
|
2026-08-17 19:44:24 +08:00 |
|
TermiNexus
|
33c8609882
|
fix(gen): list 内置分支置位 hit_box 并确认对象类型,修复 nums.set 找不到模块 SHA1
- list 内置分支 set/clear 等 void 方法成功处理返回 None 时未被标记命中,translate_call 误判未命中继续走跨模块路径,把对象名当模块名查 SHA1 → '跨模块调用 nums.set 找不到模块 SHA1'(ListTest 根因)
- 进入 list 内置分支即置位 hit_box(对齐 _translate_method_call 调用点模式),void 方法返回 None 视为已处理
- 增加对象类型确认(额外搜索路径):从对象结构体名匹配 list,明确非 list(dict/普通类未注册场景)跳过本分支,避免按 list 布局 GEP 误处理
|
2026-08-17 18:31:10 +08:00 |
|
TermiNexus
|
51ae18a160
|
fix(gen): 编译器生成方法 __before_init__ 跨模块调用放行,修复找不到模块 SHA1
- _tc_h6_method_dispatch 增加 hit_box 命中标记:_translate_method_call 返回 None(void 语义)不再被误判未命中,translate_call 不再把对象名当模块名查 SHA1
- AnnotClassName 回退分支新增编译器特殊方法放行:结构体未注册 + 模块 SHA1 不可查(Phase A 依赖未就绪)时,__before_init__/__init__ 由 _special_method_ret_ty 固定返回类型,走 _translate_method_call 处理并标记 _deps_pending 下遍重试
- ExprCallHandle._tc_h6_method_dispatch 委托透传 hit_box,对齐 c.Asm/c.LLVMIR hit_box 修复(2f3320f)
|
2026-08-17 18:19:15 +08:00 |
|
TermiNexus
|
2f3320ffde
|
fix(gen): c.Asm/c.LLVMIR void 调用 hit_box 命中标记,修复 StringTest 编译报 Asm 外部函数未登记
拆分后 _tc_h2_c_special 以 None 表示未命中,但 translate_c_asm/
translate_c_llvmir 对 void(无输出)asm 返回 None 表示已处理无返回值,
两者混淆导致 translate_call 继续走外部函数路径 → WARN 外部函数返回
类型未登记 Asm/AsmInp + t.ASM_DESCR 被当 CDefine 常量赋值 FATAL。
新增 hit_box(t.CPtr,[0]=1)区分命中,Asm/LLVMIR 分支置位,
translate_call 命中且返回 None 时视为已处理直接返回。
|
2026-08-17 12:43:49 +08:00 |
|
TermiNexus
|
285f4c25e2
|
fix(handles): ExprCallHandle 类方法裸调用补模块前缀(translate_call/printf/print)
拆分后主文件保留的 ExprCallHandle.HandleCall/HandlePrintfCall/
HandlePrintCall 仍裸调 translate_call/translate_printf_call/
translate_print_call → TPC 报 Undefined function: 'translate_call'。
改为 ExprCallCall. 前缀并补 import;ExprGenName.find_func_in_module
裸调用同步补 ExprCallBase. 前缀。全 App 裸调用扫描清零。
|
2026-08-17 08:27:07 +08:00 |
|
TermiNexus
|
3ff5769290
|
refactor(gen): CallGenCall 精简重复注释块(1502→1495 行,恢复 ≤1500)
HandlesExprCall 拆分追加 import 后 CallGenCall 达 1502 行,
删除 _kwarg_name_matches 前的重复注释块(方法与逻辑不变)
|
2026-08-17 08:16:56 +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
|
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
|
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
|
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
|
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
|
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 |
|