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
|
cf6c917e83
|
fix(gen): 泛型特化类记录触发文件,作废重译正确重置 MethodsEmitted
ld.lld undefined symbol list[ast.ClassDef|t.CPtr].* 根因:Phase A _deps_pending
作废重译时 reset_module_methods_emitted 按当前文件 sha1 精确匹配,特化类
ModuleSha1=模板 sha1(方法名带模板前缀)匹配不到,MethodsEmitted 残留 1
→ 下遍 _specialize_generic_class 补译分支(==0 才补译)跳过 → text.ll 只有
call 无 define → 链接失败。
修复:StructEntry 新增 SpecTriggerSha1(特化类触发文件 sha1),
_specialize_generic_class 全部返回路径经 _record_spec_trigger 记录,
reset_module_methods_emitted 按 ModuleSha1 或 SpecTriggerSha1 匹配重置。
|
2026-08-20 04:04:40 +08:00 |
|
TermiNexus
|
b68ae16639
|
fix(stubmerger): 依赖 worklist 去重,修复 64KB 溢出(app_deps 与 BFS 展开均无去重,公共模块重复累积导致溢出;三处逐模块词边界去重,溢出检查保留作防线)
|
2026-08-20 03:11:48 +08:00 |
|
TermiNexus
|
b08a0aff48
|
perf(phase2): 缓存 BuildCombinedIR 全目录扫描结果
Phase B 编译 .obj 慢得像同步编译的根因:BuildCombinedIR 对每个源文件
调用一次 _collect_stub_sha1s 递归扫描 temp_dir 全部切片子目录(90 文件
× 全目录枚举 O(N×S)),且目录扫描与 llc 并行无关(llc 并行已生效)。
按 temp_dir 缓存扫描结果(StubMerger._stub_scan_cache_*,stdlib 分配
跨 reset 存活),首次扫描后复用,temp_dir 变化时自动重建。BuildCombinedIR
的所有调用点(Phase B 主循环/Phase B+ includes 编译/stubgen)统一受益。
|
2026-08-20 01:15:05 +08:00 |
|
TermiNexus
|
efc0e47058
|
chore(gen): 移除 [DBG-ANNOT]/[LLC-DBG] 调试插桩
EdgeCaseTest/MultiInheritTest 已修复验证,清理 e770fef/dc5bb21/0d2e912
遗留的调试输出:TypeGenResolve.vp resolve_annotation_type 的 [DBG-ANNOT]
(含多余 import stdio),BuildPipeline.vp llc 并行路径的 [LLC-DBG]/
[LLC-DBG2](10 处 region debug-point)。
|
2026-08-20 00:50:18 +08:00 |
|
TermiNexus
|
8947c5c5ee
|
fix(gen): 多继承 this-adjust 对无字段父类跳过字节调整(对齐 TPC,Vec2Extra 误报未注册修复)
|
2026-08-20 00:31:33 +08:00 |
|
TermiNexus
|
e770fef0f7
|
fix(gen): 恢复 ClassGenBase 基类别名解析(_resolve_base_alias)
ClassGenMixin 拆分(47ac2dd)时 _resolve_base_alias 丢失:_get_parent_class
/_collect_parents 不再解析 from-import 别名基类(from t import CStruct as cs
→ class CsPoint(cs)),'cs' 被当真实父类 → find_struct('cs') 失败 → 类 defer
永不注册 → 变量注解解析失败(EdgeCaseTest Test12 回归)。恢复
_resolve_base_alias 并在两处调用;_collect_parents 增 trans 参数透传(别名
解析需 from_imports)。TypeGenResolve 增 [DBG-ANNOT] 插桩待验证后移除。
|
2026-08-20 00:05:32 +08:00 |
|
TermiNexus
|
dc5bb2111b
|
fix(phase2): 句柄数组改回 list[str] 显式 elem_size=8
插桩确认 list[t.CPtr] 构造正常(pool 有效 elem=8 data 有效)但 append
仍读零页崩溃(list[ptr] append 的 store/参数类型生成待查)。改用全库
验证稳定的 list[str](str=bytes=i8*,显式 elem_size=8 走 else 分支),
append(t.CPtr(th.handle)) / t.CPtr(get(j)) 显式转换,join/close 对句柄
操作不变。保留 [LLC-DBG2] 构造状态插桩。
|
2026-08-19 23:12:33 +08:00 |
|
TermiNexus
|
0d2e9124d9
|
debug(phase2): 打印 list[ptr] 构造后内部状态定位 append 崩溃
崩溃仍在 list[ptr].append 的 pool.alloc(0xf8→0x128 偏移变化说明
elem_size 修复生效),需区分 __pool__ 未初始化(__init__ 未调/写错位)
与 MemBuddy 内部损坏。新增 [LLC-DBG2] 打印 pool/count/cap/elem/data。
|
2026-08-19 23:01:48 +08:00 |
|
TermiNexus
|
0faf44e179
|
refactor(phase2): 句柄数组改回 list[t.CPtr]
TPC 已根修 list[t.CPtr] 特化(_resolve_generic_slice_type 保留 t.CPtr
带前缀 + mangled 名统一 'ptr'),不再需要 list[str] 绕开。句柄数组
方案保留:start() 后立即取 handle,join/close 直接对句柄操作。
|
2026-08-19 22:44:21 +08:00 |
|
TermiNexus
|
0810f9f9e8
|
fix(phase2): llc 线程 join 改用句柄数组替代 Thread 对象存取
插桩证实 list[vthreading.Thread|t.CPtr] 的 get(0)/get(1) 返回同一
对象指针(栈对象地址复用),j=0 的 close() 把 handle 置 NULL 后 j=1
的 join 用 NULL 句柄 → WaitForSingleObject 立即 WAIT_FAILED → alive=0
→ e5fb 线程句柄从未被 join(失败槽 Result=-1 误报)。改为 start()
后立即取出 handle 存入 list[t.CPtr](8 字节指针存取稳定),join/close
直接对句柄 WaitForSingleObject/CloseHandle,不再依赖 Thread 对象存续;
join 索引用全局 batch_start+j(handles 跨批次累积)。
|
2026-08-19 22:19:33 +08:00 |
|
TermiNexus
|
88778dc422
|
debug(phase2): join 前打印 th 指针/handle/started 定位 join 立即返回
ClassArrayTest join(0) 已正常等待 edd8(645e8e0 生效),但 join(1) 仍
立即返回 alive=0 且 e5fb Result=-1(worker 未写 Result)。新增
[LLC-DBG2] 插桩打印 th_j 指针/handle/started,区分句柄无效(存取错)
与 e5fb 线程已死两种可能。
|
2026-08-19 22:10:11 +08:00 |
|
TermiNexus
|
645e8e0fbf
|
fix(phase2): llc 线程数组元素类型改为指针 Thread|t.CPtr
list[vthreading.Thread] 的 store/load 类型不一致:append 存 8 字节
(th 指针,elem_ptr 降级 i8*),get 却按 Thread 结构体返回槽地址
(HandlesExprAttr._infer_element_struct_class 推断元素类)→ th_j 是
list 数据槽地址,join 把对象地址当线程句柄 → WaitForSingleObject
立即 WAIT_FAILED → alive=0 → 误报 llc 失败(4bd254a 只修了槽间距,
未修类型不一致)。改为 list[vthreading.Thread | t.CPtr](与已稳定的
list[ast.AST | t.CPtr] 同理),store/load 均为 8 字节指针,
join/is_alive/close 拿到真实线程句柄。
|
2026-08-19 22:03:22 +08:00 |
|
TermiNexus
|
3f3e3d5898
|
fix(phase2): _run_cmd_wait 清零 STARTUPINFOA 等结构体
TPV 的 T() 构造仅 alloca 不 memset(无 __init__ 时只 InitStructDefaults,
extern 结构体无默认值记录 → no-op)。_run_cmd_wait 的 si 只设 cb,
dwFlags 等 15 个字段为栈垃圾:多线程并发调用时垃圾值随机,dwFlags
垃圾位令 CreateProcessA 使用垃圾句柄作子进程 stdio → 子进程行为不定
/父进程线程崩溃(ClassArrayTest e5fb worker 崩、edd8 正常的概率崩溃
根因,70c8810 引入 _run_cmd_wait 时即存在)。si/sa/pi 全部显式清零。
|
2026-08-19 21:50:56 +08:00 |
|
TermiNexus
|
4bd254a27f
|
fix(phase2): llc 并行线程数组修复 list 元素间距与容量越界
1b5246f 引入 list[Thread] 时误把 max_threads 当作 list 构造的
容量参数传入,实际第二参数是 elem_size=16 → 槽间距 16 字节远小于
Thread 结构体大小,set(j, th) 元素重叠覆盖(get 返回混合垃圾对象);
且 list 初始容量仅 8,batch>8 时 set(8..15) 无容量检查越界写堆 →
llc 全部成功后随机 ACCESS_VIOLATION(ClassArrayTest 崩溃根因,ASAN
构建下更早触发)。改为不传 elem_size(默认取 T.__sizeof__())+
append 自动扩容(8→16→32 覆盖 LLC_MAX_THREADS=16 批量)。
|
2026-08-19 21:36:26 +08:00 |
|
TermiNexus
|
42aa90c1af
|
fix(gen): translate_c_deref 支持转换链包裹推断指针目标
对齐 TPC HandlesSpecialCall._infer_deref_target_type 增强:
1. 新增 _IsTypeExpr/_IsCastWrappingDeref 模块级辅助,判定
c.Deref 是否处于类型转换链包裹(如 (T | t.CPtr)(t.CPtr(c.Deref(p))))
2. translate_c_deref 推断条件从仅直接 RHS 扩展为直接 RHS 或
转换链包裹 Deref,新增 dref_is_ptr 允许指针目标推断
(bitcast 后 load 8 字节),修复 llc 并行线程数组 list[Thread]
之外仍受 i8* 退化的场景(1b5246f 只绕开了一处)
|
2026-08-19 21:19:38 +08:00 |
|
TermiNexus
|
1b5246f29f
|
fix(phase2): llc 并行线程数组改用 list[Thread]
c.Deref 对 i8* 无法推断加载类型时只读 1 字节(旧编译器),th_ptrs 存
Thread* 后 join/is_alive 拿到垃圾句柄立即失败——llc 并行"5 秒误报失败"
的直接原因(ClassArrayTest 2 模块并发必现)。改 list[Thread] 保类型,
get 返回明确类型,不再依赖 Deref 推断。含 [LLC-DBG] 插桩,验证后移除。
|
2026-08-19 21:14:20 +08:00 |
|
TermiNexus
|
c68eb22052
|
debug(phase2): 细化插桩区分 CreateProcessA 卡点与 join 等待行为
|
2026-08-19 21:03:47 +08:00 |
|
TermiNexus
|
70c88107ce
|
fix(phase2): llc worker 改用 CreateProcessA 替代 system,修 asan 并发挂起
插桩证实:ClassArrayTest 固定 llc 失败是 e5fb16127bce8f68 的 worker 卡在
stdlib.system() 内(LLC2 未打印,Result 保持 -1)。Python 复现 os.system
并发无问题,差异仅剩 asan 构建环境——Windows asan 的 RTL allocator hook
经 CreateProcess 启动子进程时受干扰(LLVM issue #111166 同类)。
新增 _run_cmd_wait:CreateProcessA 直接执行 + WaitForSingleObject +
GetExitCodeProcess,继承父控制台输出(同 system 语义),全 stdlib/栈分配
线程安全。含 [LLC-DBG] 插桩,验证后移除。
|
2026-08-19 20:57:52 +08:00 |
|
TermiNexus
|
f3c94917e5
|
debug(phase2): 插桩 llc worker 打印 system 返回码,定位 ClassArrayTest 固定 llc 失败误报
|
2026-08-19 20:48:01 +08:00 |
|
TermiNexus
|
f5b3e46543
|
fix(gen): while 1 无限循环无 break 判定 merge 不可达
HandlesWhile 翻译 while 后无条件置 _ctrl_merge_reachable=1,导致末句为
`while 1:`(条件常量真且循环体仅 return 无 break)的函数在收尾检查被
误判"流程掉出末尾未显式 return"(vrandom.gammavariate TypeError)。
新增 _IsConstTrue/_StmtHasBreak(跳过嵌套循环子树):常量真且无本层
break 时 merge 结构性不可达 → 置 0,函数收尾对末句 While 生成 unreachable。
|
2026-08-19 20:35:22 +08:00 |
|
TermiNexus
|
b2e69c2f75
|
chore(gen): 移除全部 [DIAG] 调试打印
|
2026-08-19 10:11:37 +08:00 |
|
TermiNexus
|
63caf152c2
|
perf(phase2): llc 并行线程数 8 提升到 16
对齐 TPC Phase2Translator n_workers=os.cpu_count()(本机 16 核)。
|
2026-08-19 07:56:31 +08:00 |
|
TermiNexus
|
6807082853
|
fix(gen): this-adjust 失败静默跳过改 fail-fast
非第一父类方法调用时,this-adjust 任一步失败(父类/子类 struct 未注册、
首字段缺失、字段查找失败)此前静默用未调整的 obj_ptr 当 self -> 方法按
自身布局读字段读到垃圾(lookup_reexport strcmp 概率崩溃根因候选)。
新增第一父类判定(前缀对齐 delta==0 免调整),其余失败路径 fatal_error
报出方法/定义类/接收类。
|
2026-08-19 07:51:37 +08:00 |
|
TermiNexus
|
edd842b6af
|
fix(phase2): free_llc_task 误 free 任务槽导致 double-free
LlcTask 记录是 llc_tasks 数组的连续槽(非独立 malloc),free_llc_task
此前对槽调 stdlib.free,循环后又对数组整体 free -> 同一 32 字节区域
double-free(ASan)。修复:free_llc_task 只释放命令串并置 None,记录
由调用方随数组整体释放。
|
2026-08-19 07:34:57 +08:00 |
|
TermiNexus
|
18b9b8bfa8
|
perf(phase2): llc 编译改多线程异步并行
Phase B 主循环从'每文件同步跑 llc'改为'循环内写 .ll + 构造 LlcTask
(命令串 stdlib.malloc,避免主池 reset_to(mark2) 回收悬空),循环后
run_llc_parallel 分批发 LLC_MAX_THREADS(8) 个线程并发跑 llc,join 后
校验结果。worker 只调 stdlib.system(),不做任何池分配(MemBuddy 非线程
安全);ASan 模式 opt 插桩也在 worker 内并行。includes 编译路径与
单文件 run_pipeline 保持同步不变。
|
2026-08-19 07:28:08 +08:00 |
|
TermiNexus
|
eb0398eae3
|
fix(gen): this-adjust 基类 bitcast 前确保 opaque 类型声明
_translate_method_call/_translate_super_call 的多继承字节偏移调整会生成
bitcast i8* -> %SHA1.ClassGenBase*,但 PrintModule 只扫描函数签名、
不扫函数体指令,跨模块基类类型未被声明导致 llc 报 use of undefined type。
在 bitcast 前调用 module_ensure_opaque_for_type(幂等,仅对未定义类型
添加 = type opaque)。
|
2026-08-19 06:25:33 +08:00 |
|
TermiNexus
|
e8a3fd0a65
|
fix(attr): ALL_CAPS 非 CDefine 回退跨模块全局变量
Phase1.PYI_BUF_SIZE: t.CSizeT = 262144 是 i64 模块级全局而非 CDefine 宏,
语义同 C 的 extern size_t PYI_BUF_SIZE。原 ALL_CAPS 属性路径在 CDefine
查找失败后直接 fail-fast,从不尝试跨模块全局。修复:
- ExprGenAttr 模块限定路径:CDefine 失败时先查 find_global_in_module,
命中则按跨模块全局引用加载,仅全局也不存在时才 fail-fast;
- ExprGenName 裸名路径:from-import 确认后同样回退跨模块全局加载
(覆盖 from Phase1 import PYI_BUF_SIZE 形式)。
|
2026-08-19 05:41:21 +08:00 |
|
TermiNexus
|
aa2a1e593f
|
revert(cdef): 撤销跨模块 CDefine 匹配放宽
t.CSizeT 等注解的模块级常量是全局变量而非宏,不应走 CDefine 宏路径
(正确语义:Phase1.PYI_BUF_SIZE 按 extern size_t 跨模块全局引用)。
恢复行匹配仅认 t.CDefine。
|
2026-08-19 05:41:14 +08:00 |
|
TermiNexus
|
677373c629
|
fix(cdef): 跨模块 CDefine 匹配放宽到 t.C 类型注解
原行匹配只认 "t.CDefine"(9 字符精确),漏掉 t.CSizeT/t.CInt 等注解的
模块级常量全局(如 Phase1.PYI_BUF_SIZE: t.CSizeT = 262144,是 i64 全局
常量而非 CDefine)→ "跨模块 CDefine 未找到" 误报。本函数仅被 ALL_CAPS
名触发,放宽为 t.C<大写> 类型 + 字面量初值即视为编译期常量;模块限定
(Phase1.PYI_BUF_SIZE)与 from-import 裸名(from Phase1 import PYI_BUF_SIZE)
两条路径均经本函数,一并覆盖。
|
2026-08-19 05:35:02 +08:00 |
|
TermiNexus
|
cf9207f171
|
fix(struct): PARENT_MAX 16→64 修复 Generator 43 父类字段截断
拆分重构使 Generator 父类增至 43 个,PARENT_MAX=16 使 _collect_parents/
set_parent_names 只收前 16 个父类 → StmtGenMixin(#40) 等字段丢失 → 结构体
缺 DiagStmtCount → __init__ 写 self.DiagStmtCount "属性写入失败"。FIELD_MAX
128→256 防字段静默截断;MRO_MAX 16→64 保证父类方法解析可达。两处常量
(HandlesStruct/StructGenMixin)同步提升。
|
2026-08-19 05:11:51 +08:00 |
|
TermiNexus
|
46170c20ef
|
fix(gen): ExprGenCls/Fstr 补本地 DOC/FSTR 常量副本
ExprGenMixin 拆分后 DOC/FSTR 系列常量只定义在 ExprGenMixin.vp(M),而 ExprGenCls(C)/ExprGenFstr(F) 按文件序先于 M 编译,跨模块 CDefine 全局表未注册 → NameError 未定义名称。按 CallGen 既有本地副本惯例补定义,消除文件序依赖。
|
2026-08-19 05:06:08 +08:00 |
|
TermiNexus
|
6d627d67cf
|
fix(gen): fatal_error 后补 return 样板,修复属性访问/写入掉出末尾
translate_attribute 与 get_attribute_ptr 的 match 末 arm(case _)调
fatal_error 后无 return None → 块未 terminated → 该 arm 被 match 收尾
误判掉出 → br end_bb → merge 可达 → 方法收尾 fail-fast '流程掉出末尾'
(返回类型 Value*)。补显式 return None(块设计约定:fatal_error 后也
必须保证块 terminated)。
|
2026-08-19 04:58:12 +08:00 |
|
TermiNexus
|
d766eaf656
|
fix(gen): 依赖未就绪时保持默认 i32 而非 Void,修复表达式 fatal
根因(ExprGenAttr._get_cderef_attr_base 'if 条件表达式翻译失败'):Phase A 按
文件系统顺序编译,ExprGenAttr(A) 先于父类模块 ExprGenBase(B)。方法调用
self.is_ptr_type() 返回类型无法解析 → _deps_pending=1 + call_ret_ty=Void →
build_call(Void) 返回 None → 调用结果喂进 if 条件/比较时 fatal,多遍重译
机制(本遍不写盘、下遍重译)根本走不到。对齐跨模块函数路径 L8167-8195
'保持默认类型继续'语义:pending 时保持默认 i32(错误类型不进入产物,
下遍依赖就绪后精确解析)。共修 6 处(CallGenCall L395/L852/L878/L1417、
CallGenDispatch L1080、CallGenProp L135)。
|
2026-08-19 04:49:26 +08:00 |
|
TermiNexus
|
4d7a6db31a
|
fix(match): case 体末句控制流全 return 补 unreachable 不 br end_bb
根因(ClassGenEnum._get_type_align 掉出末尾):case 体末句是 If/控制流且
全分支 return 时,处理器把 builder 停在无 terminator 的 merge 块,case
循环的 is_terminated 误判未终止 → 补 br end_bb → rm/sq/sm_merge_reach=1
→ 全 case return 的 match 被误判 merge 可达 → 函数收尾 fail-fast
'流程掉出末尾'。新增模块级 _case_tail_unreachable:末句控制流
(If/While/For/Match)且 _ctrl_merge_reachable==0 时补 unreachable,
与 HandlesIf L309-315 / ClassGenVTable L1084 同语义;应用于 renum/
sequence/simple 三路的 case 体与 default 收尾(不含 Try/With,其处理器
不维护该标志)。
|
2026-08-19 03:16:16 +08:00 |
|
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
|
c40c00f933
|
fix(match): renum match merge 标志声明作用域修正(a45b806 补充)
m_merge_reach 声明放 Handle 分派函数,renum match 内引用退化为隐式全局跨 match 污染 → get_struct_name(LLVMType REnum match)收尾读到残留 1 仍 fail-fast。声明移入 _handle_renum_match 局部(rm_merge_reach),置 1 与收尾覆盖同步修正
|
2026-08-19 01:58:32 +08:00 |
|
TermiNexus
|
a45b806afa
|
fix(match): merge 可达性用局部标志记录,消除 case 体内嵌套 if 污染
主 match/sequence/simple 三条路径:case 体内嵌套 If(无 else + return)翻译时把 _ctrl_merge_reachable 置 1,全 case return 的 match 被误判 merge 可达 → 函数收尾 fail-fast '流程掉出末尾'(LLvmLiteTest includes/llvmlite/__module.vp _is_opaque_struct)。改用局部变量记录本 match 自身的 br end_bb,收尾覆盖全局标志
|
2026-08-19 01:04:42 +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 |
|