Commit Graph
70 Commits
Author SHA1 Message Date
TermiNexus 409296a84c chore: 更新 toast 脚本内容(Vector 隐式泛型推断修复通知) 2026-08-13 08:30:52 +08:00
TermiNexus 97fdc72405 chore: 更新 toast 脚本内容(vpi CArray count 修复通知) 2026-08-13 08:11:49 +08:00
TermiNexus 74d32a166c chore: 清理测试源码 DBG 插桩,.gitignore 忽略 wiki 目录
AstTest/LLvmLiteTest/SysLibTest 移除定位阶段残留的 printf/testcheck 插桩
(DBG1-DBG14),SlotsBugTest 空行清理;.gitignore 追加 /wiki/,TODO 更新。
2026-08-13 07:51:56 +08:00
TermiNexus 921820b26a chore: 纳入 toast 脚本、Sequential 回归测试与诊断产物文件
_toast_gen.py(完成通知 toast 脚本)、Test/SequentialRegressionTest.py
(TPV bootstrap 回归测试脚本)、handles_expr_HEAD.vp 与 output.s
(历史诊断/反汇编产物)入库保存。
2026-08-13 07:51:33 +08:00
TermiNexus 2f0b741d55 fix(gen): TPC 治本——struct opaque 具化、多返回值 fail-fast、with MRO 修复
1. HandlesExprCall: vtable 分派前 _EnsureReceiverStructConcrete 主动具化 struct
   body(stub + class_members 双路径),消除元数据已注册、本体仍 opaque 的
   撕裂状态,失败即 fail-fast 暴露上游 stub 加载时序问题;
2. HandlesImports: stub 加载后仍 opaque 时不保留成功缓存(可重试),
   避免 opaque 状态被固化导致 vtable 分派 GEP 崩溃;
3. HandlesAssign: 跨模块多返回值 CReturnTypes 恢复(LiteralStructType 回退)
   + 解析失败 fail-fast,不再静默跳过致目标变量未初始化触发堆损坏;
4. HandlesWith: MRO 继承方法解析跳过无函数体的 stub declare(Phase1 继承
   包装声明),bitcast 目标改用函数签名参数类型避免 opaque 占位对象。
2026-08-13 07:51:27 +08:00
TermiNexus a99f126cfa feat(parser): 支持 Viper 软关键字 fn/fun/func/function 展开为 def
行首缩进+软关键字+空白+标识符形态的函数定义(fn foo(): / function bar())
展开为 def,行号不变,供 ast.parse 使用;变量名/调用/注解中的 fn 不受影响。
Converter 同步改为 stub 语法错误直接终止(fail-fast),不再生成残缺 vpi
被全局缓存命中后以 undefined symbol 形式爆发。
2026-08-13 07:51:21 +08:00
TermiNexus 6a672037c2 fix(attr): 修复联合类型转换 (X | t.CPtr)(arg) 后属性访问被丢弃
TPC 联合转换对非 CType 类(ast.Name/ast.Call 等类名)目标类型解析失败,
结果退回 Ptr(i8) 或错误类型,_handle_attr_call_result 的
find_struct_by_pointee 失败后返回 None,属性访问被静默丢弃——
((ast.Name|t.CPtr)(ov)).id 编译产物 store 0 次(TPV with 语句 asname
未绑定、pool 未定义根因)。修复:从联合 BinOp 提取真实基础类并
bitcast 到 Ptr(类) 再定位成员偏移;新增 _extract_union_base_class
辅助(跳过 CPtr/存储类/限定符修饰符)。
2026-08-13 07:44:43 +08:00
TermiNexus 4c39db17c6 fix(project): 适配 lld 链接器(clang 22 环境)
- 移除 -Wl,--unresolved-symbols=ignore-in-object-files(GNU ld 专用,lld 报 unknown argument)
- 移除 -latomic(clang64 无 libatomic;x86_64 原子均 lock-free)
- 保留 -Wl,--allow-multiple-definition(lld 支持)
- 47 个 Test project.json 统一更新
2026-08-12 21:45:41 +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 99bf970452 test(ForAndLoopTest): 去除 fakeduck 依赖,list 改用 list[T](bd)+append 构造
移除 str.split/__mbuddy__ 魔法字段扩展依赖,zip/enumerate 输入改为
list[str](bd)+append 构造;保留纯 TPV 内置迭代测试(range/str/zip/enumerate)
2026-08-11 22:10:15 +08:00
TermiNexus f047f90a72 docs(test): 新增 TestsOverview.md 测试总览(按实现难度排序)
68 个测试项目一览 + 8 层实现顺序 + 主题分组索引
2026-08-11 21:21:52 +08:00
TermiNexus 4f59396d5c test(CPythonTest): PyLong_FromLong/AsLong 按 Windows LLP64 long=32 位改用 t.CInt
TPV 恒映射 t.CLong=i64,而 Windows x64 下 C long 为 32 位:PyLong_AsLong
实际返回 EAX 32 位,按 i64 读负数被零扩展(-999 → 4294966297)导致
比较 FAIL;改用 t.CInt(i32)与 ABI 一致,负数由赋值处 sext 正确扩展
2026-08-11 18:42:34 +08:00
TermiNexus f3b16c397c test: AstTest Stmt/Expr 运行时区分测试 + BuddyTest CANARY 断言修正
AstTest main.vp 新增 classify_print/classify_list 递归遍历 parse 树,用 isinstance(vtable 子类集合比较) 区分 STMT/EXPR/OTHER 并附 5 项断言;BuddyTest mbuddytest.vp 按 alloc needed=size+16(8 头+8 哨兵)修正 max_usable 与最小块断言。
2026-08-11 01:34:10 +08:00
TermiNexus d687216772 fix(TPC): 继承链 vtable 状态追溯 + 默认参数检查信息缺失保护
- _resolve_class_flags 沿 class_parent 链追溯 vtable 状态:Stmt/ExprNode 空中间基类(@t.CVTable 无方法)跨模块未注册 class_vtable,子类 IsCVTable 误判为 False → __before_init__ base=0 不写 vtable → 实例 vtable=null → 虚调用段错误。改为沿链查找任一祖先有 vtable 即继承。

- 函数调用严格参数检查:默认参数信息缺失(跨模块 stub 加载/并行编译时序未同步)时跳过检查,避免 fatal_error 误报缺少必需参数。
2026-08-10 23:01:43 +08:00
TermiNexus a941179826 test: 新增 SuperTest 专项测试 + 删除 TpvIsinstanceTest
- Test/SuperTest:super() 语义 9 断言(构造链/静态绑定/三层继承/MRO)
- TpvIsinstanceTest 移除(isinstance 回归统一用 IsinstanceTest)
2026-08-10 21:48:41 +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 9c2dc45c03 fix(Translator): 类体 CDefine 预扫描扩展 + CDefine 类型修复(i32)
- GenerateLlvmDirect 预扫描扩展到类体 AnnAssign,注册类体 CDefine 常量
  (方法内裸名如 ISINSTANCE_CLASS_MAX 不再解析为 0)
- t.py CDefine Size/IsSigned 覆盖为 32 位有符号,修复 stub 生成 void 类型
- 新增 Test/TpvIsinstanceTest(TPV 侧 isinstance 回归测试)
2026-08-10 21:15:42 +08:00
TermiNexus 1b89225130 feat(TPC): 拓展 isinstance 跨模块支持
vtable linkage 改默认外部强定义(含 initializer 自动归一为空),跨模块可引用 sha1.Class_Vtable;外部引用声明为 i8* 避免 array 类型不匹配;_ResolveVtableAddr 增加 CVTable 状态检查,NoVTable 类回退编译时静态判断避免坏引用。新增 geom_lib.vp 跨模块测试库,main.vp 增加跨模块继承/运行时多态/NoVTable 场景。
2026-08-10 19:16:27 +08:00
TermiNexus 8783340385 feat(TPC): 实现 isinstance 内建 + 多继承 this_adjust 字节偏移修复
isinstance 沿 class_parents 反向 BFS 收集目标类全部子类 vtable,运行时比较对象头部 vtable 指针,修复"目标是实际类祖先"场景误判;this_adjust 改用字节偏移(字段在子类与父类自身布局的字节差)修正第二父类方法体内二次 GEP 越界读。新增 Test/IsinstanceTest 覆盖 5 大场景 14 断言。
2026-08-10 19:11:18 +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 cb557c84ce fix(TPC): _get_member_offset 短名规范化+跨模块懒加载+fast-fail
class_members/class_vtable/class_parent 以短名注册而调用方可能传 sha1 全名,且 class_members 未随 struct 就绪,导致查表全 miss 静默返回 None → 变量 alloca 未初始化 → 运行期读 0xffffffffffffffff 崩溃(HandlesImports.HandleImport imp.names)。修复:统一短名解析、主动懒加载 class_members、找不到字段改为 fast-fail raise 暴露 class_members/struct 真实状态。
2026-08-10 18:09:05 +08:00
TermiNexus 2129430446 fix(TPC): 跨模块多继承布局统一 - 字段整体前置/方法表合并/父类防重复
1. 定义模块多继承字段展平 prepend(反序) 改 append(正序),与 DeclarationGenerator stub 一致,修复 ASan 定位的 Generator 字段运行时错位(0xbe)。2. 跨模块加载 class_members 已含子类自身字段,父类字段必须整体前置(prepend),否则 Value.Next 命中 FloatVal(double) 导致 store 类型错乱。3. 跨模块补充与定义模块一致的方法合并(父类槽位前置、子类覆盖放父类位置),修复 vtable 槽错位(MemBuddy.alloc→_fl_find_and_remove)。4. 父类前置按字段名过滤已存在字段,防 _EmitExternalClassDeclLlvm 多加载路径重复调用导致 class_members 重复(BasicBlock:[Next,Next,...])。
2026-08-10 18:08:58 +08:00
TermiNexus bb0f7049ce fix(includes): MemBuddy chk_stack 满时 realloc 翻倍扩容 - 防 64K 记录栈爆满导致 reset 不回收与 _is_valid_ptr 栈校验退化 2026-08-10 06:24:56 +08:00
TermiNexus b2fa70ae4b fix(core): 方法注册去重 + 跨模块多继承 MRO 按需加载
_HandleMethodCallLlvm fallback 创建函数前复用已有声明(vpi 合并)
避免 DuplicatedNameError;新增 _EnsureClassParentsLoaded 从 .vpi
按需加载 class_parents,使跨模块多继承类(如 Generator)的 MRO
回退能定位定义类(如 TypeGenMixin),修复 bootstrap 链接 undefined
reference。
2026-08-10 01:46:37 +08:00
TermiNexus f6f8c4183c test: 新增 MultiInheritTest 多继承专项测试 + wiki 方案
4 组用例: 字段合并 C(A,B) / 菱形去重最左优先(Diamond) /
虚方法 vtable 多继承(ColoredCircle) / 运算符重载 MRO 链(Vec2Both)。
wiki/15-multiple-inheritance.md: Viper 多继承方案(M1-M6)设计文档。
2026-08-10 00:29:13 +08:00
TermiNexus 87b9dec1ef feat(core): TPC 多继承同步 M5 - MRO 查找/字段展平/vtable合并/this调整
BaseGen: 新增 class_parents + _get_mro_chain(与 TPV 语义一致: 深度优先
+声明顺序+去重) 与 _get_parent_classes 兼容旧单链
HandlesClassDef: 停用 is_base_of_any 自动 vtable; 多父字段展平去重;
方法合并用定义类名; vtable 槽沿 MRO 取定义类
HandlesExprCall: 方法调用沿 MRO 回退 + stub(无函数体)判定修复
undefined reference; 继承方法 this 调整(GEP+bitcast 成父类指针)
HandlesExprUtils/HandlesImports/HandlesWith/StructGen: MRO 查找同步
2026-08-10 00:29:05 +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 e1cb560df0 test: 对象化前的最后稳定版本
- OopInheritTest 全部类补类体字段声明(x/y/r/w/h/health/battery 等), 保证父类字段展平与 GEP 偏移正确
- 多个测试适配 i8* 指针比较语义(== 指针地址比较改 string.strcmp)
- 删除 ZlibTest/__zlib 旧实现与 find.py 调试脚本
- 更新 TODO 与 TestProject
2026-08-09 22:19:29 +08:00
TermiNexus cd1f662e17 test: 删除 TestProject/2/3 聚合项目(已拆分覆盖); HashLibTest 并入 binascii/base64/hashlib 全套测试 2026-08-09 20:02:57 +08:00
TermiNexus 19214c269c test: ZlibTest 移除 __zlib 改用标准 zlib 库; test_pyzlib 迁移 App/ 并适配 pool 参数, 裸内存调用改 string./stdlib. 命名空间, 修复同名变量覆盖 2026-08-09 20:02:52 +08:00
TermiNexus d4abdd4042 test: 新增 ExpandKeywordsTest(fn/fun/func/function 专项); test_zlib 打印条件修复; WebTest 补 global 声明 2026-08-09 17:10:38 +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 dd5a639437 test: 拆分独立 OopInheritTest(OOP继承/虚方法/运算符重载/多层继承), GenericOopTest 精简为纯泛型 2026-08-09 16:59:05 +08:00
TermiNexus 6644d6ce3b test: TestProject/2/3 拆分为 10 个具体测试项目; ZlibTest 并入标准 zlib 库
新项目(各含 project.json + App/main.vp):
- LoopMathTest/LogicFlowTest/ClassArrayTest/NumpyTest (原 TestProject)
- HashLibTest (原 TestProject2 去 zlib)
- GenericOopTest/EnumTest/MpoolOopTest/VectorGenericTest/FileIoTest (原 TestProject3)
ZlibTest 增加"标准 zlib 库(zlib.pyzlib)" section 与 __zlib 并存验证。
2026-08-09 04:06:26 +08:00
TermiNexus 61f07d4f9b test: 新增 DefineTest 独立宏测试项目 + SprintfTest 多整数变参复现
- DefineTest: 从 TestProject3/definetest.vp 提取为独立项目(CDefine/c.CIf/c.CIfdef/c.CIfndef/platmacro, testcheck 分节), TestProject3 移除 definetest 引用
- SprintfTest: 增加 multi-int varargs repro R1-R4(带 check), 复现 viperlib.snprintf 第 2+ 个 int 变参读垃圾(va_arg 8 字节槽位 vs 调用点 i32 未扩展)
2026-08-09 03:39:33 +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 2fb386a4ff chore(core): 移除 Phase1.vp 遗留的 DBG-MC 调试输出 2026-08-07 19:57:51 +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 2270c3b56d 提交新的建议忽略 2026-08-06 18:07:04 +08:00
TermiNexus 2071486168 相对稳定版本 2026-08-06 18:04:12 +08:00