TermiNexus
|
e83c06041a
|
fix(ast): 解析器支持括号内行首运算符跨行续接
and/or 与 binop/比较链循环此前在检查运算符前不跳 Nl:
A and B 换行后再 and C(ThreadingTest check 多行 and 链)停在 Nl 上
循环退出,上层把续行运算符当非法 token 报 SyntaxError。每轮循环先
_skip_nl 再查运算符(对齐 vast 实现),支持 (a\n + b)、(a < b\n < c)
等行首运算符续行。
|
2026-08-19 06:52:20 +08:00 |
|
TermiNexus
|
73e5eea3f0
|
fix(llvmlite): create_block 块名与参数名冲突去重
LLVM 中块标签 entry 即值 percent-entry,与参数 percent-entry 重名导致 llc
unable to create block named entry(CallGenCall._field_byte_offset 的 entry
参数根因)。create_block 创建块时扫描函数参数值名(剥离百分号前缀),
冲突则追加 .1/.2 后缀,覆盖全部 7 处入口块创建点。
|
2026-08-19 05:54:11 +08:00 |
|
TermiNexus
|
915054495f
|
fix(ast): 补齐 exprs 字段访问辅助函数 re-export
5cda173 只补了 attribute_get_attr,TypeGen 还以 ast.<helper> 调用
attribute_get_value/name_get_id/constant_get_str_val/binop_get_left/
binop_get_right(均定义在 ast.exprs)→ 同样触发跨模块返回类型解析
fail-fast。一次性全部补入 from .exprs import 导出列表。
|
2026-08-19 05:26:26 +08:00 |
|
TermiNexus
|
5cda173a5e
|
fix(ast): re-export attribute_get_attr 修复跨模块返回类型解析失败
TPV TypeGenCType/TypeGenResolve 以 ast.attribute_get_attr(at) 调用,但 ast
包 from .exprs import (...) 未 re-export 该函数(定义在 ast.exprs)→ 跨模块
函数返回类型解析在 ast 包 text.ll 找不到定义 → fail-fast "返回类型无法
精确获取"。按既有 re-export 惯例(如 get_parse_err_line)补入导出列表。
|
2026-08-19 05:18:41 +08:00 |
|
TermiNexus
|
a2378e6878
|
chore(ast): Attribute.__init__ 加构造断点,定位 stdint.vp attr 垃圾来源
|
2026-08-18 09:25:36 +08:00 |
|
TermiNexus
|
802377e9ab
|
feat(ast): 加 Name/Attribute/Constant/BinOp 字段访问器,绕开跨模块 stub 字段访问陷阱
|
2026-08-18 08:59:10 +08:00 |
|
TermiNexus
|
4f95867209
|
fix(llvmlite): PrintModule param_scan 改用访问器绕开 stub 字段访问陷阱
printf.fmt Param 创建后 next=0(正常)、dump_ir 诊断访问器读 next=0,
但 PrintModule 直接访问 param_scan.Next 遍历超限死循环——同一指针两次
读取结果不同,指向跨模块 stub 字段访问生成错误 GEP/静默跳过
(param_scan 永不更新 → 死循环)。param_scan 遍历改用 param_get_next/
param_get_ty(__function.vp 完整类型内读取),并打印首节点 param/next
供对比验证。
|
2026-08-18 08:26:38 +08:00 |
|
TermiNexus
|
37e6dd1863
|
feat(llvmlite): 加 module_get_func_head 跨模块访问器,供 dump 诊断遍历函数链
|
2026-08-18 08:17:51 +08:00 |
|
TermiNexus
|
1805790336
|
fix(tpv): 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 期间死循环)
3. dump 哨兵报错增强打印 Params.Count,区分真成环与海量节点
|
2026-08-18 08:10:02 +08:00 |
|
TermiNexus
|
f1db31b645
|
fix(llvmlite): dump 路径链表遍历加步数上限哨兵,把 IR 成环卡死变确定性报错
builtins.vp 翻译后 dump_ir 卡死(IR 链表 Next 被越界写破坏成环,
遍历无限挂起)。PrintModule/FunctionPrint/RenumberSSA/_scan_type_
for_cross_module_refs 的全部链表遍历(funcs/globals/named types/
params/blocks/lines/struct fields)加 IR_DUMP_CHAIN_LIMIT=100000
步数上限,命中即打印链路名并 exit(1),对齐 memhub.self_check
max_steps 的 fail-fast 哲学。
|
2026-08-18 07:59:39 +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
|
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
|
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
|
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
|
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
|
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
|
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
|
0e93f40289
|
fix(includes): 导出 llvmlite 缺失符号 + 移除临时 DBG
- llvmlite.__init__ 导出 get_struct_fields/get_struct_fcount/DeepCopyType(HandlesAssign tuple 解包与 ClassGenMixin 深拷贝调用 fast-fail 符号未定义)
- 移除 string.vp [ATOF-DBG]、ast/parser.vp [LKP-DBG] 临时插桩(保留查表逻辑)
|
2026-08-12 21:13:36 +08:00 |
|
TermiNexus
|
8ccf5d2c18
|
fix(TPC/includes): 泛型特化 linkonce_odr + None 全局 common + includes 前缀
- TPC HandlesFunctions/HandlesClassDef: 泛型特化类方法(类名含 '[')设
linkonce_odr,消除 GSList[NameEntry].__before_init__ 等 duplicate symbol
- TPC HandlesAssign: None 初值模块级全局用 common linkage,合并 _g_gen 等
跨模块同名全局重复定义
- includes: binascii/hashlib 裸调用加 stdlib./string. 前缀(malloc/free/memset/memcpy)
- llvmlite: FunctionPrint 泛型特化方法输出 define linkonce_odr;__module 调整
- 删除 wiki/01-overview.md
|
2026-08-12 18:18:22 +08:00 |
|
TermiNexus
|
b4567ffb9a
|
fix(llvmlite): opaque与空结构体区分(fcount哨兵);ast表达式节点调整
|
2026-08-12 01:27:24 +08:00 |
|
TermiNexus
|
2120a0a4ab
|
feat(ast): 结构化 Stmt/Expr 中间基类(isinstance 分类支持)
- base.vp 新增 Stmt/Expr(CVTable,继承 AST),__init__.vp 导出
- stmts.vp 23 个语句类继承 Stmt,exprs.vp 27 个表达式类继承 Expr
- 顶层/辅助/模式/OpNode 保持 AST 直继承(非 Stmt 非 Expr)
|
2026-08-10 21:48:41 +08:00 |
|
TermiNexus
|
d2d319eb21
|
fix(includes): ASan 集成支持 + 越界写封堵 + TypePrint 类型名截断 40→255
1. Phase2Translator 增加 TPC_ASAN 支持(opt asan 插桩+链接 -fsanitize=address),配合 clang64 定位 0xbe 崩溃。2. llvmlite/memhub/viperio/viperlib 多处理无界 strcpy/strcat/下溢/递归守卫/栈数组钳制。3. memhub alloc 块尾 canary(MEMBUDDY_CANARY)+check_alive_blocks 校验+chk_stack realloc 扩容。4. TypePrint Ptr(Struct) 类型名截断上限 40→255:含 sha1 前缀类型名(如 bbdf3bbd4c3bc28c.CONSOLE_SCREEN_BUFFER_INFO=42)被截断产生未定义类型引用(llc undefined type)。
|
2026-08-10 18:09:13 +08:00 |
|
TermiNexus
|
bb0f7049ce
|
fix(includes): MemBuddy chk_stack 满时 realloc 翻倍扩容 - 防 64K 记录栈爆满导致 reset 不回收与 _is_valid_ptr 栈校验退化
|
2026-08-10 06:24:56 +08:00 |
|
TermiNexus
|
fc93a28ec6
|
refactor(llvmlite): P0 对象化 - IRBuilder/LLVMModule 方法化(70 方法+一行委托兼容)
- IRBuilder 新增 62 个实例方法(load/store/gep/call/binop/cast 等), 顶层函数保留为一行委托, 调用方零改动
- LLVMModule 新增 8 个实例方法(add_function/add_global/add_named_type/PrintModule 等)
- 类字段/硬编码 SIZE/逻辑/IR 输出零变化, GetDiagnostics 无错误
- 新增 wiki/14-oo-refactor.md 对象化重构方案(P0-P6)
|
2026-08-09 22:54:01 +08:00 |
|
TermiNexus
|
a6444a4e1f
|
feat(includes): 软关键字 fn/fun/func/function 与 match 语句判定; 解析 fail-fast 错误记录(get_parse_err_*) + 相邻字符串字面量隐式拼接; ord/chr 内置函数; llvmlite build_alloca_aligned; memhub 超块请求返回 NULL; numpy 显式 string./stdio. 前缀; this 数组迭代修复
|
2026-08-09 17:10:34 +08:00 |
|
TermiNexus
|
939f7f2497
|
fix(llvmlite): ConstFloat 浮点常量文本改十六进制位模式(0x%016llx/0x%08x), 消除 llc 科学计数法解析 ±1 ulp 误差(11.0 解析为 11.000000000000002); vipermath modf 用回 c.Set(c.Deref()) 同步注释
|
2026-08-08 21:35:58 +08:00 |
|
TermiNexus
|
9ee519e998
|
fix(includes): 修复浮点常量精度截断与 viperlib %g 小数反转 - ConstFloat 浮点常量文本改 %.17e(全精度+LLVM合法语法, 修复 %e 6位小数截断致 llc 值错与 %.17g 裸整数报错); viperlib %g 小数位改逆序存储(原三变量交换循环在 TPV 编译产物中失效, 小数位反转 456->654); SprintfTest 增加 %g 诊断用例 T1-T10
|
2026-08-08 20:38:25 +08:00 |
|
TermiNexus
|
61e578fe9a
|
fix(includes): atof_out 输出参数版绕开跨模块 double 返回 bug; 浮点节点构造值记录+查询(parser); NEWF/ATOF/LKP 定位插桩; ast 导出查表函数
|
2026-08-08 19:42:55 +08:00 |
|
TermiNexus
|
efb4aada15
|
chore(includes): 添加浮点字面量解析定位插桩 - string.atof 打印长字面量解析中间值(ATOF-DBG); parser._new_const_float 打印构造值/readback/节点覆写监控(NEWF-DBG/OVW-DBG); 用于定位浮点 CDefine 值错误(llc ret i32 0)
|
2026-08-08 18:18:52 +08:00 |
|
TermiNexus
|
29b18af60c
|
refactor(includes): vipersimd c.LLVMIR 改 LOut 模式 + 文档同步新语义
vipersimd.vp 16 处 simd_* 数学 intrinsic 改 c.LLVMIR(f"{c.LOut(out)} = call ...")
+ return out 模式;TestFBProject 2 处同步;c.py stub 与 wiki 文档
更新为"无返回值直接嵌入原始 IR 文本"语义。
|
2026-08-08 16:10:36 +08:00 |
|
TermiNexus
|
44ff0d551f
|
fix(ast): 解析 PEP695 泛型函数类型参数 [T],修复函数体被误提升模块级
- _parse_funcdef 消费并存储 def f[T](...) 的类型参数(与 class 解析器一致)
- FunctionDef 增加 type_params 字段(默认 None,非泛型函数不受影响)
- 修复: 之前 [T] 未消费导致 _expect_op(Colon) 失败、函数体被误提升到模块级,b = Box(42) 被注册为模块级全局,函数内赋值误报需用 global 声明
|
2026-08-08 11:54:43 +08:00 |
|
TermiNexus
|
acc126ce0c
|
基本稳定
|
2026-08-07 19:35:20 +08:00 |
|
TermiNexus
|
02479420e8
|
将 hashlib 英化
|
2026-08-07 18:52:12 +08:00 |
|
TermiNexus
|
c5570dc8b1
|
将 ast 英化
|
2026-08-07 18:49:53 +08:00 |
|
TermiNexus
|
752f3ddb70
|
修正了部分实现
|
2026-08-06 19:50:18 +08:00 |
|
TermiNexus
|
2071486168
|
相对稳定版本
|
2026-08-06 18:04:12 +08:00 |
|
TermiNexus
|
a39b5da0f8
|
基本稳定
|
2026-08-05 20:11:38 +08:00 |
|
TermiNexus
|
0a10b20dde
|
修正了逻辑,使 TPV 能够正常编译
|
2026-08-03 02:00:49 +08:00 |
|
TermiNexus
|
4e17365b76
|
修正了 args 传参问题
|
2026-07-31 17:15:54 +08:00 |
|