TermiNexus
|
81ad712475
|
fix(Handles): 多继承字段展平按继承源去重,消除菱形重复
Generator 同时继承 ClassGenMixin/ClassGenEnum/ClassGenGeneric/ClassGenVTable/ClassGenDef/ClassGenBase,而前 5 个都继承 ClassGenBase → ClassGenBase 41 字段被重复展平 6 次(struct 707 元素),class_members 索引与 struct 布局错位 → 跨 Mixin 方法 this_adjust 失效 → is_exception_name 读错位内存 strcmp 越界(ASAN heap-buffer-overflow)。
修复:HandlesClassDef 与 DeclarationGenerator 的多继承展平改为递归按继承源去重(每类只展平一次,只取自有字段;同名字段如 TempDir 跨非继承 Mixin 仍各自保留,避免 2026-08-10 历史去重缺陷回归)。
|
2026-08-18 13:13:25 +08:00 |
|
TermiNexus
|
2922af79f1
|
fix(LLVMCG): 禁止对 null 指针常量做 load 转 int 字段
_coerce_value 中 target 为 IntType 且 val 为 PointerType 时,若
val 是 null 常量且 pointee.width == target.width,此前直接
builder.load(null) 生成 load i32, i32* null,运行时 ASAN
access-violation。根因场景:Generator.__init__ 里
self.ClassMetaKinds = None(字段注解 t.CInt | t.CPtr,联合类型
退化为 i32 槽位,None 解析为 i32* null)。修复:null 常量赋 int
字段直接返回 0;_store 的 null 分支同步补 IntType 处理。
|
2026-08-18 12:50:31 +08:00 |
|
TermiNexus
|
0e80019033
|
fix(subscript): 泛型 T|t.CPtr 指针槽变量优先走 i8** load,修 8fbba list[str].get 返回类型不匹配
TPC 编译 TPV 时 _list.vp 泛型方法体 elem_ptr: T|t.CPtr = t.CPtr(...):
T 未解析时 var_struct_class[elem_ptr] 误注册 llvmlite.Value →
_HandleSubscriptLlvm 的 elem_class 推断为 Value → cast Value* → 与
get 声明 i8* 不匹配(llc 报错)。修复:
1. _is_struct_ptr_union 放宽——泛型参数 Name(单字母大写)也判定指针槽
联合(标量 T 退化为 Ptr(i32) 不命中 i8 分支,安全)
2. _HandleSubscriptLlvm 的 var_ptr_element 分支提前到 elem_class 推断
之前——T|t.CPtr 指针槽变量优先 i8** load i8*(8 字节)
|
2026-08-18 10:12:06 +08:00 |
|
TermiNexus
|
7917be0fa1
|
perf(handles): stub 索引增量重建 + vtable on-demand pyi 缓存类级化,消除 worker 重复解析
- HandlesImports._build_stub_index:以已扫描文件集合替代文件数签名,无新增文件时仅一次集合比较;新增文件只增量解析,消除每编译完一个文件即全量重扫(prof 847 次全量重建 61s)
- HandlesImports._TryLoadStructFromStub:索引命中直接返回,仅在 miss 时才触发增量扫描
- HandlesExprCall._try_register_vtable_ondemand:函数局部 pyi_cache 提升为类级 _vtable_pyi_cache / _vtable_methods_cache,437 次 open+ast.parse 同批 pyi 降为每 pyi 一次(prof 38.5s)
|
2026-08-18 05:27:53 +08:00 |
|
TermiNexus
|
68d180e718
|
perf(handles): 跨模块类声明分类/节点查找缓存,去重 _EmitExternalClassDeclLlvm
新增类级 _extern_class_classify_cache((sha1,class)->分类元组)与
_extern_class_decl_cache((sha1,class)->pyi ClassDef 节点):bases/
decorator 分类遍历提取为 _ClassifyExternalClass 纯函数并缓存,
_TryLoadClassMembersFromPyi 节点查找改走索引避免跨任务重复线性扫描
pyi_tree.body(8214 次调用热点之一)。Gen 依赖部分(字段/方法/struct
注册)保持每 Gen 执行,不做整体跳过。
|
2026-08-17 23:27:44 +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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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 |
|
TermiNexus
|
fcd4d8a438
|
修复了关于 snprintf 的错误(不支持长度推导)
|
2026-07-31 04:06:57 +08:00 |
|
TermiNexus
|
377b60fd67
|
取消了 i8* == i8* 实际使用 strcmp 的规则
|
2026-07-30 21:56:41 +08:00 |
|
TermiNexus
|
cfc30d735c
|
将 .py 和 .pyi 后缀名改为了 .vp 和 .vpi 后缀名
|
2026-07-30 16:33:56 +08:00 |
|
TermiNexus
|
3633be1995
|
Some simple information syncing
|
2026-07-28 21:08:58 +08:00 |
|
TermiNexus
|
1837339f69
|
修正了一些错误
|
2026-07-26 20:32:26 +08:00 |
|
TermiNexus
|
ca7c2120b8
|
修正了种子编译器的错误
|
2026-07-22 21:55:36 +08:00 |
|
TermiNexus
|
135aa05485
|
尝试进行 Qt 测试,增加了 AI 人机调试工具 _console,以及 TransPyV 进行修正
|
2026-07-21 14:41:22 +08:00 |
|
TermiNexus
|
a277ded8d4
|
修正了 TPC 的一些错误,包括 Test 维护后 TPV 无法重新编译或重编译后越界的部分问题
|
2026-07-20 11:12:30 +08:00 |
|
TermiNexus
|
4e66207ba1
|
重置上传,新增了多个标准库,开始 TransPyV 自举实验
|
2026-07-19 11:38:15 +08:00 |
|
t
|
796222a300
|
snapshot before regression test
|
2026-07-18 19:25:40 +08:00 |
|