TermiNexus
|
c2b04f5026
|
fix(compile): _LoadSha1Map 缓存补充只加载当前编译有效 sha1,修 9026a429f5e2d0e0.new_builder undefined symbol
.transpyc_cache 残留旧版 llvmlite/__builder.vp 的 9026a429f5e2d0e0.pyi/
.stub.ll(当前版本是 d9b3d06934cd1898)。_LoadSha1Map 从全局缓存补充
temp 缺失文件时不检查 sha1 有效性,把旧版 .vpi/.stub.ll 也加载进
sig_files/stub_files → 同名类 IRBuilder 按旧 sha1 前缀注册 →
new_builder 用 9026a429f5e2d0e0 前缀拼接,链接 undefined symbol。
补充逻辑移到 sha1_map 加载之后,仅补充 sha1_map 中存在的 sha1。
|
2026-08-17 21:51:21 +08:00 |
|
TermiNexus
|
401429ccdf
|
fix(generic): 特化 T 替换判据修正——t 模块内建类型(裸名或 t. 前缀)仍用 type_name
上一提交对类类型参数改用 mangled type_arg 替换 T,但 type_name 为
't.CInt'(带 t. 前缀、不在 _BUILTIN_TYPE_NAMES 裸名集合)时被误判为
类类型,改用 type_arg='i32' 替换 → list[t.CInt] 特化方法体出现
'i32.__sizeof__'(源码无此名)→ [FATAL][__sizeof__] 类型 'i32' 无法
解析 + self 类型错乱(list[i32] 中找不到 CifEvalOk,StmtGenCifMixin
编译崩溃)。判据改为取裸名(去掉 t. 前缀)判断内建,内建仍用 type_name,
只有真正的类类型参数(AST/ast.AST 等)才用 mangled type_arg。
|
2026-08-17 21:44:40 +08:00 |
|
TermiNexus
|
dd95bf5bd4
|
fix(handles): _try_operator_overLoad fallback 补回 SpecClass 初始化,修 UnboundLocalError
|
2026-08-17 21:25:25 +08:00 |
|
TermiNexus
|
fa2cfef205
|
fix(generic): 特化 T 替换用 mangled 名 + operator fallback 选有 define 的特化
1. _specialize_generic_class 的 type_map 对类类型参数改用 mangled type_arg
(如 f467978339422f32.ASTptr)替换 T,而非裸短名 type_name:模板内部嵌套
注解(list[T].__iter__ 返回 list[T])不再被替换成裸 list[AST] 后重新特化出
只有 declare、无方法体的错误特化 → 消除 ld.lld undefined symbol:
7cadfe07e983fd90.list[AST].__len__/list[ClassDef].__len__。
2. _try_operator_overLoad 特化 fallback 改为优先选已编译方法体(define)的特化,
全部只有 declare 时按需补发;dict 插入序不再导致 len() 选中错误特化。
|
2026-08-17 21:19:43 +08:00 |
|
TermiNexus
|
bd0e541b74
|
fix(handles): 删除 [CD] lookup: 调试输出及无用 _is_cd_key 逻辑
删除 _HandleNameLlvm 中 4 处 [CD] lookup 调试打印(干扰编译日志)、
随之失效的 _is_cd_key 计算、以及仅用于打印的 SymbolTable.lookup 死代码。
|
2026-08-17 21:00:52 +08:00 |
|
TermiNexus
|
3b5f2af838
|
fix(structgen): 跨模块 struct 兜底命名改查 _struct_sha1_map,修复 7cadfe07e983fd90.Translator 前缀错位
泛型特化 _specialize_generic_class 把 Gen.module_sha1 切换到模板定义模块
(_list=7cadfe07e983fd90)的窗口内,_generate_structs Step 1 对不在
class_sha1_map 的类(因 LlvmGenerator 共享 class_methods 跨文件泄漏而
缺条目)用 _mangle_name 兜底,错误注册为 7cadfe07e983fd90.Translator 等
跨模块类型 → Translator.__before_init__ self 类型错前缀,与构造 result
(6ccfee1e5bd522ed.Translator*)不匹配,llvm 报 Type of #1 arg mismatch。
兜底改为优先查 _struct_sha1_map(Phase2 从 vpi 扫描构建的正确类→模块映射),
特化类自身仍走 _mangle_name(用模板 sha1 命名是设计意图)。
|
2026-08-17 20:55:47 +08:00 |
|
TermiNexus
|
7e710d1e9a
|
perf(vast): _Peek(0) 增加游标缓存,命中率 87% 降低解析热点开销
TokenStream._Peek 是 cProfile 最大热点(1588 万次调用,累计 4.86s)。
递归下降解析常在同一游标位置重复窥视(_At/_AtOp/_AtName 等),
增加 _PeekCacheIdx/_PeekCacheTok 字段缓存最近一次 offset=0 结果,
命中时跳过 len() 与列表索引;游标移动后 Idx 失配自然失效。
实测大文件解析命中率 87.1%(6503 次调用仅 717 次真实访问),
vast 差分测试 51/53 通过、0 FAIL,正确性无回归。
|
2026-08-17 20:29:34 +08:00 |
|
TermiNexus
|
e6b842f46b
|
Revert "fix(compile): 移除 Projectrans.py 入口对已删除的 _parallel_translate_worker 的导入"
This reverts commit a341106a74.
|
2026-08-17 20:28:24 +08:00 |
|
TermiNexus
|
ecdb5c34c5
|
Revert "refactor(compile): 完全去除多进程,翻译/编译全部改顺序阻塞执行"
This reverts commit 15e8bc7c7d.
|
2026-08-17 20:28:24 +08:00 |
|
TermiNexus
|
a341106a74
|
fix(compile): 移除 Projectrans.py 入口对已删除的 _parallel_translate_worker 的导入
|
2026-08-17 20:23:33 +08:00 |
|
TermiNexus
|
15e8bc7c7d
|
refactor(compile): 完全去除多进程,翻译/编译全部改顺序阻塞执行
ProcessPoolExecutor 批次/波次子任务模型导致跨模块 struct 类型前缀错位
(7cadfe07e983fd90.Translator != 6ccfee1e5bd522ed.Translator,见 1.log),
且 cProfile 墙钟被进程池等待支配(223s 中 173s 耗在 WaitForMultipleObjects)。
删除 _parallel_translate_worker/_parallel_translate_batch、_executor_pool
及两处 llc ThreadPoolExecutor,App/includes 翻译按依赖拓扑顺序阻塞翻译,
llc 编译逐文件阻塞执行,消除 pickle 序列化共享符号表与进程池等待开销。
|
2026-08-17 20:22:45 +08:00 |
|
TermiNexus
|
6b9186848b
|
fix(llvmlite): _type_str 增加 IR-FAIL 校验护栏,防 LLVMType 悬空生成垃圾 IR
LLVMType 类型对象可能被 MemBuddy 覆盖/悬空(跨遍 reset 回收后 pool 内存复用),TypePrint 输出首字符变为垃圾(如 't')或为空。现在 _type_str 对输出做首字符合法性校验,非法即打印 [IR-FAIL] + 类型地址并 exit(1)(fail-fast),防止生成 bitcast i8* null t 类垃圾 IR 导致 llc 报 expected 'to' after cast value 后难以定位根因。
|
2026-08-17 20:13:13 +08:00 |
|
TermiNexus
|
e5af28fa93
|
fix(imports): NoneType 异常静默 + struct_body 判空,减少 WARN 干扰输出
编译大量输出 "HandlesImports: 忽略异常 'NoneType' object has no attribute 'endswith'":注解/类型解析回退路径对 None 参与运算(数据缺失属正常兜底)——每文件每符号都打 WARN 淹没关键信息。
- 783/1166/1264 三处 except:AttributeError+NoneType 时静默不 WARN,其他异常保留
- 两处 is_packed 判断补 struct_body is not None 防护(源头防 None.startswith/endswith)
|
2026-08-17 20:07:35 +08:00 |
|
TermiNexus
|
f66e119d1f
|
perf(compile): App 翻译改批次子任务模型(多文件/任务 + 每文件重置 SymbolTable)
原"一文件一任务":200+ 文件每个都经 ProcessPool 调度 + worker 内创建 Phase2Translator + pickle.load 全部共享数据。改为批次模型:need_translate 按 worker 数分块,每 worker 一个批次子任务——Phase2Translator 创建 + pickle.load 仅一次,批内顺序翻译。
防污染:SymbolTable 是编译期唯一被写的共享对象,dump 时额外存 symbol_table_bytes(独立 pickle),批内每文件前 pickle.loads 出干净副本,前文件 import 写入不残留后文件(避免 7cadfe07e983fd90 类前缀错位)。includes 阶段保持拓扑单文件任务不变。
|
2026-08-17 20:01:33 +08:00 |
|
TermiNexus
|
a28aacda0b
|
fix(compile): 回退 worker 进程级复用,消除共享 SymbolTable 跨文件污染
复用后同一 worker 的 trans 处理多文件,_translate_file 编译过程会向共享 SymbolTable 写入符号(import insert/类注册),前文件符号污染后文件 → 跨模块 struct 类型前缀错位(7cadfe07e983fd90 即 _list 前缀混入 CompilerFactory/Translator/File,Type of #1 arg mismatch)。每任务从 pickle 反序列化独立副本(原实现)。
收益评估:worker 复用仅省 pickle.load ~0.5s/次 × 每 worker 12 次 ≈ 6s 并行墙钟,远小于 worker 内翻译计算(百秒级),不值得以正确性为代价。n_workers 满核优化保留。
|
2026-08-17 19:58:28 +08:00 |
|
TermiNexus
|
2dbf348329
|
perf(vast): 回滚 _PosInfo 增量行查找(Python while 慢于 C bisect)
新 cProfile(232s)显示 _PosInfo tottime 1.74s→2.84s:增量 while 顺延的 Python 循环开销大于 _bisect(C 级 O(log n)),且 _Make 先 start 后 end 两次调用跨行时退化。回滚为 bisect + 保留 isascii 快速路径(避免 encode 分配)。
|
2026-08-17 19:46:14 +08:00 |
|
TermiNexus
|
08e7b8d0c0
|
fix(handles): 带前缀类名提取 class_sha1,启用 stub 查找修复 Undefined method
ExprGenAttr 场景:ClassName 带 sha1 前缀(940e5294667daf5a.ExprGenAttr),struct_sha1_map.get(带前缀名)=None → class_sha1 为空 → _HandleMethodCallLlvm 的 stub 查找路径(if not func and class_sha1)被整体跳过 → fail-fast "Undefined method 'get_attribute_ptr'"(尽管 stub.ll 第 24 行存在该 declare)。
- 带前缀类名:class_sha1 直接取前 16 位,FullMethodName 不再拼接(避免双前缀)
- 裸类名:保持原逻辑从 _struct_sha1_map 取 sha1
|
2026-08-17 19:35:24 +08:00 |
|
TermiNexus
|
1f3c83cb6d
|
fix(handles): MRO 查找归一化带 sha1 前缀类名,修复继承方法 Undefined method
TPC 编译 TPV 报 "Undefined method 'find_func_in_module' in class 'c9b44d17cd621a75.CallGenLib'":跨模块 ObjVal 类型反查 Gen.structs 得到带 sha1 前缀的类名,而 class_parents / ModuleSha1Map / _struct_sha1_map 键为裸类名 → _get_mro_chain 查不到父类 → MRO 回退失效 → fail-fast。
- BaseGen._get_mro_chain:查 class_parents 前剥离 "16位hex." 前缀(父类名带前缀时同样处理)
- HandlesExprCall._EnsureClassParentsLoaded:归一化后再查 class_parents / 按需加载父类信息
|
2026-08-17 19:11:48 +08:00 |
|
TermiNexus
|
3aebf402bb
|
perf(compile): worker 进程级复用 Phase2Translator,消除每文件重复 pickle.load
cProfile 显示 ~163s 墙钟在 ProcessPool 等待(非计算)。App 阶段 200+ 文件分散到 worker,原实现每个任务都新建 Phase2Translator 并 pickle.load 2.5MB 共享符号表(_shared_sym.json)→ 每 worker 12+ 次重复反序列化。
- _parallel_translate_worker 增加进程级缓存:以 shared_sym_pickle_path 为 key,首次遇到才创建 trans + 加载 pickle,后续任务直接复用 trans._translate_file
- _translate_file 每次新建内部 TransPyC 且对 self 的写均为覆盖型(translator 引用/错误栈),复用安全
- App/includes 两阶段 pickle 路径不同,key 变化时每 worker 各自重建一次
|
2026-08-17 19:04:22 +08:00 |
|
TermiNexus
|
58ce673f01
|
perf(compile): TPC 编译提速——并行 worker 满核 + vast 解析器热点优化
cProfile 分析(206s 全量重编译 TPV):~163s 为 ProcessPool 等待(16 核机器仅用 8 worker),vast.parse 35.9s(1231 次)为最大 Python 计算热点。
- Phase2Translator:4 处 n_workers 上限 8 → os.cpu_count()(16 核满负荷),并行翻译/llc 编译利用率翻倍
- vast/Tokenizer._PosInfo:isascii 快速路径 + 行索引增量查找(~300 万次调用,免每次 bisect+encode)
- vast/Tokenizer._EmitOp:运算符按首字符分组,58 万次调用从 42 项全表 startswith 降到 2-3 项
- vast/Tokenizer._ScanName:内联 _IsIdentPart(70 万次循环免函数调用)
- Projectrans/Utils:find_reachable 用 deque + 后缀索引替代 pop(0)/全表扫描;topological_sort 用反向邻接表 + heapq 替代每轮 sort+全图扫描
|
2026-08-17 18:56:55 +08:00 |
|
TermiNexus
|
5d93692baa
|
feat(vast/ast): 新增 export 软关键字声明 CExport 函数(等价 t.CExport)
允许 4 种语法(配不配 def 都一样):export def A(...) / export A(...),
与 extern 对称。返回注解改写为 <原类型> | t.CExport,复用既有 CExport
路径(符号名裸名、不加模块 SHA1 头);无 body 形式消费本行 NewLine。
TPC 侧 vast:_ParseExportDef + Unparser 还原(Export=True);
TPV 侧 includes/ast:Keyword.Export + FLAG_IS_EXPORT=16(追加末尾)+
_is_funcdef_kw/_parse_funcdef 支持。
|
2026-08-17 12:12:32 +08:00 |
|
TermiNexus
|
451e7a0391
|
fix(ast/parser): extern 无 body 形式消费本行 NewLine,修复 Phase1a-pre 7 文件扫描失败
extern def A(...) -> T(无 ': pass')解析完返回时 cur 停在 NewLine token,
模块级/类体语句循环只 _skip_nl(Nl)不跳 NewLine,下一轮把 NewLine 当
表达式解析(_parse_atom error_count++)→ parse_tokens 返回 None →
Phase1a-pre 报 7 个文件扫描失败(w32 7 个 extern 文件全挂的根因)。
|
2026-08-17 11:57:01 +08:00 |
|
TermiNexus
|
a641c7c8da
|
test(w32): 204 个 t.State 声明函数改用 extern 语法
- win32base/console/file/memory/process/sync/winsock2 七个模块
- def X(...) -> T | t.State: pass → extern def X(...) -> T: pass
- 转换后 vast AST dump 与原声明完全一致(extern 改写 returns 为
<原类型> | t.State,语义等价),用于 extern 关键字编译测试
|
2026-08-17 10:49:39 +08:00 |
|
TermiNexus
|
ce568e10b7
|
feat(vast/ast): 新增 extern 软关键字声明 FFI 函数(等价 t.State)
TPC 侧 vast:
- extern [def] A(...) [-> T] [: pass] 四种语法解析为 FunctionDef
- 返回注解改写为 <原类型> | t.State,复用 TPC 的 IsState 外部函数路径
- 设 Extern 标记,Unparser 还原 extern 语法(round-trip 一致)
TPV 侧 includes/ast(自举前端):
- Keyword.Extern 枚举与 intern,_is_funcdef_kw 软判定
(extern def / extern Name+'( 或 '[')
- _parse_funcdef 支持无冒号声明、FLAG_IS_EXTERN 标记、
returns 改写为 <原类型> | t.State(vpi 含 State → 定义端裸名 + 不生成函数体)
|
2026-08-17 10:41:44 +08:00 |
|
TermiNexus
|
aa9042173e
|
fix(vast): 修复 match 类模式与 or 模式解析与 CPython 不一致
- case ClassName.attr(...) 类模式:扫描属性链末尾判断 '(',
此前只查首 token 后 '(',LLVMType.Ptr(...) 被误解析为
MatchValue(Call) → TPC 对 renum match 走值模式分支,对枚举
构造表达式运行时求值生成 ptrtoint SSA,LLVM switch 报
'case value is not a constant integer'
- case 0 | 1 值模式:字面量/符号不再消费顶层 '|',留给
_ParsePattern 组 MatchOr(此前 ParseExpr 吞掉 '|' 成 BinOp)
|
2026-08-17 10:22:29 +08:00 |
|
TermiNexus
|
d7213d2197
|
fix(vast): 修复 Tokenizer 行号登记与 import/f-string 位置属性与 CPython 不一致
- _ScanStringBody 三引号内引号对 Pos+=1 后未 continue,双重自增
跳过一个字符,若恰为换行则漏登 _LineStarts 行首,导致其后所有
行号偏移 -1、字面量 col_offset 超行尾,TPC 引号判断失败将
单引号单字符误推断为 i8*(1.LOG 编译错误根因)
- alias 节点位置改为名称起始(asname 结束),与 CPython 一致
- f-string 内部表达式绝对偏移补上 FSTRING token 源码起始
|
2026-08-17 10:08:43 +08:00 |
|
TermiNexus
|
920c0ba677
|
fix(vast): 修复分号分隔语句误将 AST 节点传给 _FixLoc 导致 AttributeError
ParseModule/_ParseSuite 的分号分隔分支曾用 stmt 节点调用 _FixLoc,
应传入 Token。改为不补位置(extra 由内部解析器自设位置),
修复 'Assign' object has no attribute 'Line' 崩溃。
|
2026-08-17 09:38:00 +08:00 |
|
TermiNexus
|
6fc9e19e24
|
feat(vast): 新增自研 Viper/Python 语法解析器取代标准库 ast
TPC 侧取缔对 Python 标准库 ast 模块的依赖,改用 lib/vast 包:
- Nodes: 与 CPython 3.12 ast 完全同构的 131 个节点类(含抽象基类继承)
- Tokenizer: 词法分析(缩进/字符串/f-string/数字/运算符/软关键字)
- ExprParser: 表达式递归下降解析(优先级/lambda/推导式/f-string/切片)
- Parser: 语句解析(def/class/if/for/try/with/match/import/注解)
- Utils/Unparser: walk/dump/unparse/copy_location/literal_eval 等辅助
- 软关键字 fn/fun/func/function 并入解析器, 废除 ExpandSoftKeywords 预处理
- lib/_bootstrap 将 lib 目录加入 sys.path, import vast as ast 零修改替换
- 52 个文件 import ast 替换为 import vast as ast; 94 文件差分测试 0 失败
|
2026-08-17 09:36:38 +08:00 |
|
TermiNexus
|
a7bbd68507
|
fix(parser/lexer): 支持括号内行首 or/and、类基类跨行、CRLF 反斜杠续行(追加69/70/71)
|
2026-08-16 11:19:16 +08:00 |
|
TermiNexus
|
5e6a80c9f6
|
refactor(zlib): 裸 stdlib/string 函数调用改为 namespace 限定形式
free/malloc/calloc/realloc→stdlib.*, memcpy/memset/strncpy→string.*;
修复 pyzlib.vp L177 free 未定义且未导入; zhuff.vp 补 import string;
方法形态(self.pool.free/self.free/def free)不受影响
|
2026-08-16 07:32:07 +08:00 |
|
TermiNexus
|
995faf8a9c
|
test(NumpyTest): c.Timer() 改为 timer_sec()(GetTickCount64), 修复链接 undefined symbol: Timer
c.Timer() 无编译器支持(TPC/TPV 均无该内建), bench_numpy_perf 链接期 undefined; 改用 Win32 单调时钟
|
2026-08-16 06:48:53 +08:00 |
|
TermiNexus
|
a641cbff63
|
test(NumpyTest): numpy.ndarray 裸泛型注解改为显式类型参数 numpy.ndarray[t.CDouble]
裸泛型类名注解(Foo 无 [T])在 TPC/TPV 均不被支持(TPC 静默降级 i32, TPV fail-fast 报 struct 未注册); 与 SimdTest 已验证模式对齐
|
2026-08-16 05:53:56 +08:00 |
|
TermiNexus
|
9b190ac73e
|
fix(TPC): --asan 假生效修复 —— opt -passes=asan 需先 forceattrs 加 sanitize_address 属性(LLVM>=20 只插桩带属性函数)
|
2026-08-15 13:25:12 +08:00 |
|
TermiNexus
|
e400a1c0a7
|
fix(JsonTest): write string hello 断言改用 strcmp(追加14 遗留,i8* == 是指针地址比较)
|
2026-08-15 13:12:12 +08:00 |
|
TermiNexus
|
396e0a54be
|
fix(SysLibTest): CDefine 大整数全链路 64 位化 + Win32 结构体 ULONG→DWORD
- maxsize=9223372036854775807 曾全链路 32 位截断成 4294967295:
StubGen/Converter 与 register_cdefine_constant 改 %lld、lookup 改
atoll、extract_cdefine_int_value/_lookup_cross_module_cdefine 改
CInt64T,新增 _const_int_for_cdefine(超 0xFFFFFFFF 才升 i64,
0xFFFFFFFF 保持 i32 -1 语义)
- subprocess stdout 为空根因 STARTUPINFOA/PROCESS_INFORMATION/
MEMORY_BASIC_INFORMATION ULONG 字段(i64 占 8 字节)布局错位致
CreateProcess 读不到 STARTF_USESTDHANDLES,改 DWORD 对齐 Windows 布局
- 移除 syslibtest_impl.vp 调试 DBG 标记
|
2026-08-15 13:11:25 +08:00 |
|
TermiNexus
|
5844e6e725
|
fix(TPC): range for 循环 body 以 break 终结时不再发射死代码 load(游离指令致 opt expected instruction opcode)
根因: HandlesFor.py L229-233 在 body 使 _reg_values[循环变量] 失效后,
于当前 builder 位置重新 load 循环变量(该值实际未被使用, 死代码)。
当 body 最后一条语句是 break 时当前块已带 terminator, load 落在
br for.end 之后 → 非法 IR → opt/llc 报 'expected instruction opcode'。
触发场景: 装饰器扫描循环 body 内 list[ASTptr].get 调用触发泛型特化
重入编译(_EmitFunctionLlvm L1647 整体清空 _reg_values 且不恢复)。
修复: else 分支加 is_terminated 守卫, 终结时跳过死 load(语义不变)。
|
2026-08-15 07:36:40 +08:00 |
|
TermiNexus
|
8112e0d66f
|
fix(_withcontent): 移除 wdbg 运行时诊断(已定位根因)
根因在 TPV 编译器 range 负 step 条件(HandlesFor.vp 固定 ICMP_SLT),
_withcontent 侧保留 strcmp 匹配 + _tls_index 守卫双保险即可。
|
2026-08-15 06:59:20 +08:00 |
|
TermiNexus
|
5f6dd8615a
|
debug(_withcontent): find 诊断增强(names[i] 地址/内容 + strcmp 对比)
第一轮诊断显示 TLS/栈/top 全正常但 strcmp 未命中,增强 find 循环内
打印 names[i] 指针与 %s 内容,直接观察 push 存的字段字符串是否损坏。
|
2026-08-15 06:55:26 +08:00 |
|
TermiNexus
|
dc9a2848c1
|
debug(_withcontent): 临时 [wdbg] 诊断 provider 栈运行时状态
TLS 守卫/strcmp/IR 均正确但 Test 9 仍 find 返回 NULL,加运行时诊断:
get_stack 打印 tls 索引与栈指针(观察是否每次 NEW)、push 打印 field/ptr/top、
find 打印 field/top/HIT。重编 Test 跑一轮后删除。
|
2026-08-15 06:51:50 +08:00 |
|
TermiNexus
|
5d660a5448
|
docs(_withcontent): _init_tls 守卫注释更新为双保险
TPV 已正式实现 @t.TLS(FuncGenMixin.translate_function_def 与
ClassGenMixin._translate_method 生成 __tls_init_done 全局标志 +
skip/cont 块,对齐 TPC HandlesFunctions.py L1763-1792);此判重
守卫保留以兼容未重建的旧 TPV.exe。
|
2026-08-15 06:42:30 +08:00 |
|
TermiNexus
|
6759406a7e
|
fix(_withcontent): _init_tls 加 _tls_index==0 守卫(TPV 未实现 @t.TLS 一次性语义)
TPV 编译器没有 @t.TLS 的首次执行守卫(TPC 有:全局标志+跳过块),
_init_tls 每次调用都重新 TlsAlloc → _get_stack 每次拿到新 TLS 索引和
新空栈 → push/find 各用各的栈,provider 永远匹配失败(Test 9 注入仍
FAIL 的根因)。_tls_index 初始为 0(TlsAlloc 成功不会返回 0),判重即
等价 TLS 语义。待办:TPV 函数翻译对齐 TPC HandlesFunctions.py L1763
实现 @t.TLS。
|
2026-08-15 06:36:53 +08:00 |
|
TermiNexus
|
ba16d54f32
|
fix(_withcontent): _find_provider 字段匹配改 strcmp 内容比较
TPV 对每次 create_global_string 生成独立字符串常量(不去重),push 存的
字段名指针与 find 传入的指针地址不同,指针 == 永假 → provider 匹配失败 →
with 上下文 __mbuddy__ 注入不上(Test 9 FAIL)+ 后续 upper() 解引用 NULL
崩溃(0xC0000005)。改为 string.strcmp 内容比较,TPC/TPV 均健壮。
|
2026-08-15 06:28:43 +08:00 |
|
TermiNexus
|
3fe985648e
|
chore: 更新 TODO/toast 脚本/测试源
TODO 补编译器实验方向;toast 通知改 list 泛型方法修复完成;DecoratorTest 补 global _call_count 声明;LLvmLiteTest ConstFloat 断言改十六进制位模式。
|
2026-08-15 06:24:22 +08:00 |
|
TermiNexus
|
2b074dfb48
|
fix(llvmlite): Struct name 参数默认 None;移除 GEP 降级 printf
Struct() 的 name 参数改为可选(默认 None),简化无名字段结构体构造;IRBuilder 的 GEP 遇非指针 base 直接返回 None,不再打印降级日志(噪音)。
|
2026-08-15 06:24:17 +08:00 |
|
TermiNexus
|
46b7cbc4ba
|
fix(memhub): 非 2 的幂 arena 二进制分解 + reset 重建 + OOM 诊断增强
主池 1.2GB(非 2 幂)不再被 _largest_pow2_le 砍成 1GB:整个区域按二进制分解拆成多个 2 的幂空闲块压入对应 free list,buddy 合并跨分解边界因 order 不匹配自然停止;reset/_rebuild_free_lists 重建同样分解格局。新增 big_alloc_count 计数与 alloc 失败 self_check/free_bytes 诊断、mark 异常 fail-fast。BuddyTest 断言改为初始分解块数。
|
2026-08-15 06:24:13 +08:00 |
|
TermiNexus
|
31d7602368
|
fix(memhub): checkpoint 记录栈初始容量 64K→2M + realloc 失败诊断
单文件翻译(parse AST + 生成 IR)可产生几十万次 alloc,64K 初始容量
在首个大文件就触发 realloc 扩容;realloc 失败时该块不再记录到
checkpoint 栈 → reset_to 无法回收 → 渐进泄漏 → 1GB 主池 OOM
(NewAstTest Phase2 Phase A 根因,used 精确到 2^30 吻合)。
初始容量加大到 2M 条目(16MB stdlib,惰性分配)覆盖单文件峰值,
避免扩容;realloc 失败分支打印 cap/depth 诊断(fail-fast 暴露而非
静默泄漏)。
|
2026-08-14 18:13:29 +08:00 |
|
TermiNexus
|
50795b63f1
|
chore: 更新 TODO/toast 脚本/IsinstanceTest 测试源
|
2026-08-14 04:02:27 +08:00 |
|
TermiNexus
|
fd3254cdd4
|
fix(TPC): 模块名与类名同名时 X.func() 按模块函数解析
import lib.core.X as X 且模块内有同名 class X 时,X.func() 此前被
is_class_name 判定拦截走 _HandleStaticMethodCallLlvm,用模块函数签名
生成带类前缀的 {sha1}.X.func 声明,而 define 是 {sha1}.func,导致
链接 undefined symbol(CompilerFactory.get_perm_pool)。现加模块别名
优先规则:SymbolTable 命中 IsModuleAlias 时跳过类静态方法路径,让位
模块函数调用;类构造 X.X(args) 仍走 struct 路径。同时移除
_HandleExternalCallLlvm 中误加的 else: return None 截断。
includes/llvmlite/__types.vp:DeepCopyType 各层分配源改由调用方传入
pool 参数(传 perm_pool 即持久),includes 层不依赖 App 工厂。
|
2026-08-14 04:02:22 +08:00 |
|
TermiNexus
|
2c7f563dda
|
test(generic): GenericOopTest 补字段注解并改用 int 实例化
- 补 A/Pair/Calculator/Container 字段注解触发字段拦截验证
- calc2 改 Calculator(2),适配 TPV 泛型函数 int-only 限制
|
2026-08-13 17:32:00 +08:00 |
|
TermiNexus
|
409296a84c
|
chore: 更新 toast 脚本内容(Vector 隐式泛型推断修复通知)
|
2026-08-13 08:30:52 +08:00 |
|