TermiNexus
748eda9c69
修正 Stub 的 define 导入
2026-08-22 10:36:05 +08:00
TermiNexus
89995dffde
refactor(gen): 去除 Handles 委托层——链式化 + GenTypes/GenApi 迁移
...
- Gen 内部 1742 处 HandlesX.func() 改 self.Gen.Y.method() 链式调用
- 数据类/常量迁移 GenTypes.vp(10 类 + CLASS_META_*/META_*/SEQ_KIND_*/FIELD_MAX 等)
- 管线/保留文件经 GenApi.vp 模块级入口(48 函数带类型注解,从 Gen 方法签名自动生成)
- 删除 26 个纯委托 Handles 文件,仅留 5 个实体文件(Base/Translator/Expr/ExprCall/ExprCallTable)
- 修复字段分裂:TypeGenErr CurrentFile/TraceCount 链式化;CallGenBase TempDir/Cexport 真源化
2026-08-21 06:32:40 +08:00
TermiNexus
e07ea491a5
chore(gen): 全量备份——Handles 委托壳瘦身与单例注入统一
...
- 删除 Handles 各模块已迁移至 Gen 的旧函数体,保留一行委托壳(25 文件 -798 行)
- main.vp / BuildPipeline.vp 全局单例注入改为 _g_gen 直接赋值
- 机械化迁移测试前的基线备份
2026-08-20 05:33:59 +08:00
TermiNexus
0a98890d5b
fix(handles): HandlesExprCall 补回 set_global_gen 与 12 个顶层常量
...
拆分脚本 del 逻辑未过滤分组,误删了保留的 set_global_gen 与
顶层常量(_CEXPORT_MAX/ASM_*/LLVMIR_*/MAX_*/GLOBAL_*)→ 链接报
undefined symbol: {sha1}.set_global_gen。已补回,全 App 语法验证通过。
2026-08-17 08:32:54 +08:00
TermiNexus
285f4c25e2
fix(handles): ExprCallHandle 类方法裸调用补模块前缀(translate_call/printf/print)
...
拆分后主文件保留的 ExprCallHandle.HandleCall/HandlePrintfCall/
HandlePrintCall 仍裸调 translate_call/translate_printf_call/
translate_print_call → TPC 报 Undefined function: 'translate_call'。
改为 ExprCallCall. 前缀并补 import;ExprGenName.find_func_in_module
裸调用同步补 ExprCallBase. 前缀。全 App 裸调用扫描清零。
2026-08-17 08:27:07 +08:00
TermiNexus
2cb974ae5a
refactor(handles): HandlesExprCall 拆 6 组(Base/Deref/Ctor/Call/Table/Handle,2041→241 行)
...
直接移动+改调用方:~100 个委托函数按功能移至 6 个子模块,主文件
保留 _g_gen/set_global_gen/顶层常量/4 个类(AsmOperand、FuncEntry、
FuncDefaultsEntry、ExprCallHandle——CallGenLeafKit/HandlesTranslator
仍以 HandlesExprCall.类名 引用)。
- 子模块函数体内 _g_gen/常量/类裸引用 → HandlesExprCall.xxx 跨模块访问
- 28 个调用方 HandlesExprCall.func( → 子模块前缀并补 import
- 全 App 语法/引用/import 验证通过
2026-08-17 08:10:55 +08:00
TermiNexus
65cf71ff7e
refactor(gen): FuncGenMixin 拆 Base/Def(2683→1178 行),补 5 个跨 Mixin 委托
2026-08-17 07:17:03 +08:00
TermiNexus
9f19bb3666
refactor(gen): CallGenMixin 阶段 C 拆 translate_call 检测段(Dispatch 6 helper)+ 辅助方法(Lib),顶层降至 1119 行
2026-08-17 06:59:14 +08:00
TermiNexus
38e32fdeb1
fix(gen): 修复 HandlesExprCall 委托签名缺参数(_infer_generic_ctor_type_arg/_LookupMethodRetTyFromTextLL)
2026-08-17 06:38:00 +08:00
TermiNexus
1718738a19
refactor(gen): CallGenMixin 阶段 B 拆出 6 组(Ctor/Call/Prop/Fd/Vt/Va),顶层剩 translate_call 中枢
2026-08-17 06:34:33 +08:00
TermiNexus
8d9ff96f61
refactor(gen): 修复 CallGen 拆分后 undefined symbol(顶层改 1 级继承 + 跨 Mixin 走 HandlesExprCall 委托)
2026-08-17 06:17:15 +08:00
TermiNexus
593332636f
全部整理上传
2026-08-17 04:27:29 +08:00
TermiNexus
9d3483e97e
refactor: 全面 fail-fast 化(去兜底)+ 泛型补译/解引用宽度修复
...
- 全量降级点改 fail-fast:23 文件约 140+ 处静默 i32/i8*/void/continue 兜底改为 HandlesType.fatal_error(python traceback 风格)或 VLogger.error 终止,暴露上游根因;保留语言语义默认(无注解 i32/infer 链/CIf/star 回退)
- 泛型特化 Phase B 补译 reemit 强制发射方法体(修复 list[...] define 缺失)
- c.Deref 读取宽度仅按赋值直接 RHS 推断(修复 CurAssignAnnot 残留误判 i32)
- 类型别名清理:t.CChar|t.CPtr→str、t.CInt→int 等
2026-08-13 02:11:49 +08:00
TermiNexus
304bece6fa
feat(TPV): CArray 形参衰减/tuple 多返回/dict 迭代/ASan 模式等
...
- CArray 形参按 C 语义衰减为元素指针(FuncGenMixin/ClassGenMixin/VpiReader 多处)
- 跨模块调用 found_func=None 时数组实参衰减,修复 md5.final 实参 [16 x i8]* 与
定义 i8* 类型不匹配
- VpiReader 返回注解支持 tuple[T1,T2] -> 匿名结构体(b2a_hqx -> {i8*,i16})
- 变参 i8/i16 提升按无符号性 zext/sext(print_hex %02x 不再 ffffff 前缀)
- dict 容器可见性/迭代、c.Deref 赋值注解宽度推断、错误定位日志
- HandlesExprCall._check_and_promote_variadic_call 委托同步 9 参
- BuildPipeline/main 支持 --asan 模式(opt -passes=asan + -fsanitize=address)
2026-08-12 18:17:52 +08:00
TermiNexus
c472ea9798
feat(gen): 支持 lambda 与 nonlocal 运行时 env 链式共享
...
- translate_lambda 提升 __lambda_{id}(i8* env, args...) + 捕获变量堆存储
- _lambda_scan_body 递归收集捕获变量;HandlesAssign 注册 lambda 闭包名
- translate_closure_call 支持带参(实参链表 + 函数类型 i32(i8*, args...)*)
- 嵌套函数参数支持(提升函数签名 + 参数 alloca)
- nonlocal 改为运行时 env 链式共享:父函数局部新建堆+重定向 VarEntry;
父函数中为 nonlocal 时从父函数 env 读堆地址(_load_raw_var_ptr)
- 全局数组 initializer 按声明长度补齐补零
- LambdaCount 计数器迁移到 trans._lambda_count(修复 TPC 编译崩溃)
2026-08-11 16:10:05 +08:00
TermiNexus
45ba3a4b5a
fix(gen): TPV isinstance 运行链路修复(构造 vtable 槽/this_adjust/虚分派/NoVTable)
...
- 构造展开跳过 __vtable__ 字段,修复 Dog("dog") 覆盖 vtable 导致 isinstance 全失败
- this_adjust 改字节偏移法(delta=子类偏移-父类偏移),覆盖 vtable 父类
- _do_virtual_call 新增 vtable_base:读 vtable 用对象头,调用用调整后 self
- NoVTable 类无参构造分配内存而非返回 ConstZero
- ClassGenMixin:类体 CDefine 兜底注册 + vtable linkage 默认 external
2026-08-10 21:15:43 +08:00
TermiNexus
0e4f00baf4
refactor(gen): P4 CallGenMixin - HandlesExprCall 86 函数迁移 + 委托层
...
HandlesExprCall(7043 行, 本仓库最大文件)全部模块级函数迁移为
CallGenMixin 方法(含 translate_call 1408 行整体迁移),全局表
(cexport/LLVMIR 序号/temp_dir/闭包/funcptr/全局函数表/默认参数表)
迁入 gen 字段;旧函数保留为 _g_gen 单例委托,4 类保留。Generator
多继承追加 CallGenMixin(现为 5 Mixin 组合)。
修复 P4 迁移引入的两处缺陷:
1. HandlesTranslator 引用已删除的 HandlesExprCall._g_temp_dir → None
导致跨模块 .vpi 注入全局失效(json 翻译崩溃),改用
HandlesType.get_temp_dir()
2. Generator 50 字段突破 FIELD_MAX=48 硬上限导致字段截断丢失,
字段槽位上限提升至 64(HandlesStruct/StructGenMixin/HandlesClassDef)
2026-08-10 03:31:10 +08:00
TermiNexus
b3170ba823
feat(handles): Viper 多继承支持 M1-M4 - 父类数组+MRO/字段展平/vtable合并/this调整
...
HandlesStruct: StructEntry 增加 ParentNames/ParentCount + get_mro_chain
(深度优先+声明顺序+去重, 含自身, mro[0]=自身)
HandlesClassDef: 多父字段展平去重 + vtable 合并(方法短名去重+探测实际定义类)
+ 继承链统一 vtable 判定 + 无字段类(接口/标记类)支持 + 空 struct 跳过 zeroinitializer
HandlesExprCall: 方法调用沿 MRO 回退 + 继承方法 this 调整(GEP 定位+bitcast 成父类指针)
HandlesExprOps: 运算符重载 MRO 链查找
2026-08-10 00:28:58 +08:00
TermiNexus
f63dcd7fed
fix(handles): 对象化前的最后稳定版本
...
- 修复 t.CVoid(x, CPtr) 裸名 CPtr 识别失败导致方法体 ret null(scale/move/__new__/take_damage 链式调用对 NULL 解引用崩溃)
- c.Addr(self) 返回对象指针(load 一层 Ptr(Struct)), 与 c.Addr(self.field) 语义一致
- return 语句指针→指针元素类型不匹配(i8* → 类指针)自动 bitcast, 避免 llc 类型不匹配
- 多层继承 vtable 槽沿父类链用 find_func_global 定位实际定义类(修复 ElectricCar.is_running=null)
- 新增一元运算符重载(__neg__/__pos__/__invert__)
- 新增表达式接收者方法调用 (expr).method(args)
- map_t_type 补 CFloat8/16/32/64/128T 精确宽度浮点映射
2026-08-09 22:19:21 +08:00
TermiNexus
da23160ca6
fix(handles): 变参调用按 Win64 8 字节槽位提升(整数 sext 到 i64, f32 提升 f64)
...
根因: 变参按窄类型(i32)传入, LLVM 只写 4 字节进 8 字节栈槽, 高 4 字节残留旧数据;
viperlib %d 强制 va_arg 读 i64 暴露残留高位(如 0x400921FB00001000, 高位是 PI 残留)。
修复: found_func.IsVarArg==1 且参数在变参位时提升, 对齐 TPC/Python-llvmlite ABI 自动提升。
SprintfTest R1-R4 PASS, DefineTest PAGE=4096 验证通过。
2026-08-09 04:06:17 +08:00
TermiNexus
e5a99abb63
fix(handles): 本轮修复集 - StructTest/TypeCastTest/StringIterTest/va_list
...
- t.Struct 纳入标记基类: 消除幻影父类虚假 vtable + Phase A-pre 延迟注册, 修复 point_sum 参数退化为 i32(签名与函数体 Ptr 不一致, llc 报错)
- 指针算术改 GEP 元素缩放(对齐 TPC): ptrtoint+add 字节语义致 i32*/struct* 偏移错误(StringIterTest Test4/8)
- 右移按操作数符号性选 lshr/ashr + t.XXX 注解 AnnotClassName 提取 attr + _node_type_unsigned Name 分支查变量无符号性(TypeCastTest)
- 显式类型转换按符号性 sext/zext; _call_method_on_ptr 传 node 修复 line 0 报错; __getitem__/__setitem__ stub 守卫 + 结构体字段 bitcast 条件化
- va_list 24 字节对齐 + build_alloca_aligned; CIf 运行时回退(CIf 真值/CIfdef 恒真); parse traceback; builtins 关联
2026-08-09 03:39:26 +08:00
TermiNexus
57d6ffefad
fix(TPV): c.Set 实现赋值语义 a=b(三形态: c.Deref左值/Name/Attribute), 修复 undefined reference to Set; 函数默认返回/裸return按返回类型生成浮点零值(ConstFloat 0.0, 修复 llc value doesn't match)
2026-08-08 21:35:59 +08:00
TermiNexus
94b84c7dc1
refactor(compiler): c.LLVMIR 改无返回值直接嵌入 IR 文本(不做指令解析)
...
translate_c_llvmir 重写:LInp 替换为值引用文本、LOut 分配唯一 SSA
寄存器 %llvmirN 并自动 store 写回变量 alloca;模板经 block_append_text
直接嵌入当前基本块;返回 None(ret_ty 废弃)。删除 9 个旧指令解析
辅助函数。
2026-08-08 16:10:29 +08:00
TermiNexus
3a6296d638
fix(compiler): 支持裸名 float/double 映射 + 前向声明时序 + 类型解析 fast-fail traceback
...
- resolve_annotation_type Name 分支与 map_t_type 补小写 float(→f32)/double(→f64),
float(0.0) 转换原误映射 f64 改为 f32(vipermath fmodf result: float 修复)
- forward_declare_functions 解析签名期间临时切 declare_only=1,
签名触发的泛型特化只注册结构体,方法体延迟补译(numpy _empty_like 前向引用修复)
- HandlesAnnAssign 变量类型注解解析失败改 fatal_error(Python traceback)
- c.LLVMIR 未识别指令改 fatal_error 立即终止(原静默返回 None)
2026-08-08 15:59:08 +08:00
TermiNexus
ee8f532dc5
fix(compiler): 泛型注解收集类型实参时替换泛型参数 T + 属性访问 fail-fast traceback
...
- _get_type_name_from_annotation Name 分支应用 resolve_generic_type_name,
修复 ndarray[T] 二次递归特化崩溃(SimdTest numpy)
- _specialize_generic_class 入口防御性替换残留类型参数名
- translate_attribute/get_attribute_ptr 非指针属性访问改 fatal_error(Python traceback 风格)
- c.Deref(ptr).attr 属性访问 base 取指针本身不做 load
- list[str] 容器 elem_size 4→8 修复(str 是指针 8 字节)
- 泛型函数显式类型参数 xxx[T](x) 回退普通函数调用;T(v) 转换走 resolve_annotation_type
2026-08-08 15:23:48 +08:00
TermiNexus
ba6beb439c
feat(compiler): __sizeof__ 支持实例接收者与泛型类引用(self/obj 实际类型 + Stack[T] 特化)
2026-08-08 12:26:44 +08:00
TermiNexus
51d0ef2c18
fix(compiler): __sizeof__ fast-fail 改为 Python traceback 风格
...
- __sizeof__ 处理器两个错误分支(已注册但大小 0 / 类型未注册)从 VLogger.critical(╠ 树形格式)改为 HandlesType.fatal_error(TypeError + File/line + 源码行 + 立即终止)
- 修复: 原 CRITICAL 不退出,会继续走到 _fail_method_ret_ty 二次报错,掩盖根因
2026-08-08 12:00:39 +08:00
TermiNexus
e0303c46f6
fix(compiler): 裸类形参按引用传参 + 同名类优先本模块 + 裸名泛型构造/类型参数转换
...
- 裸类形参(方法+函数)解析为 Ptr(struct),修复 GSList[T].append 按值传参悬垂(G5 Test4 head.Value 读到垃圾)
- resolve_annotation_type 裸类名优先 find_struct_by_module 命中本模块,避免跨模块同名类(main.vp G5Node vs g5container.vp)类型混用
- translate_call 新增裸名泛型类模板构造:Box(42)→从实参推断→特化→构造(GenericTest Test4/5/10、GenericTest2 Stack/Range 等)
- 类型转换路径先 resolve_generic_type_name:类特化/泛型函数中的 T(x) 解析为 int/str/bool/double 转换
- 泛型函数翻译时设泛型上下文 T→int(TPV 泛型函数按普通 i32 函数编译,退出作用域前清除)
2026-08-08 11:54:32 +08:00
TermiNexus
ea8bb0b3a4
fix(compiler): 方法返回类型三级来源重构(移除 _infer_method_ret_ty 按名推断)
...
方法返回类型改为:当前模块函数 → text.ll define → vpi stub 返回注解缓存,全部未命中 fail-fast 终止(无白名单、无 hook 编译器)。
1. VpiReader 文本提取缓存 + 按需加载 + 动态扩容 + 无注解默认 i32
2. 类名解析修复(继承括号不入类名、模块级函数清空类名)
3. SetTempDir 提前到 Phase1(json 在 Phase1 翻译,Phase2 太晚)
4. 内置方法 __before_init__/__init__/__new__ 固定返回类型
5. 泛型归一化匹配 + _subst_template_arg 模板参数替换
6. 调试插桩 VPI_DEBUG_ENABLE 开关(默认关闭)
2026-08-08 09:43:15 +08:00
TermiNexus
a9ebb20790
"fix(compiler): vpi 返回注解缓存按需加载 + 动态扩容
...
1. _lookup_method_ret_ty_via_vpi 查缓存前按需读取
{temp_dir}/{sha1[0:2]}/{sha1}.vpi 填充缓存,覆盖模块自身翻译时
(同模块方法调用、定义在后)stub 尚未注入的场景
2. 缓存容量由固定 4096 改为 stdlib.realloc 翻倍动态扩容(上限 1M),
根治写满后条目静默丢弃导致 JsonValue._pool_alloc 等查不到"
2026-08-08 02:24:12 +08:00
TermiNexus
09833a80eb
feat: 支持 t.Callable 函数指针类型注解、赋值与间接调用(含返回类型签名缓存)
2026-08-08 01:12:40 +08:00
TermiNexus
94ae2aee52
refactor: 提取 _lookup_sha1_from_modname_raw,消除 HandlesExpr 重复的模块 SHA1 查找段
2026-08-08 00:02:39 +08:00
TermiNexus
e2bdfc1c4e
chore: 移除 DDEBUG/MATCHDBG 调试日志残留
2026-08-07 23:29:39 +08:00
TermiNexus
adff2f35c4
fix(core): print 类型感知格式化,跨模块未导入 fast-fail,报错行号防御
2026-08-07 22:36:16 +08:00
TermiNexus
89cc30c757
基本稳定
2026-08-07 19:32:46 +08:00
TermiNexus
987088fdff
'fix(core): support keyword args in method calls
...
_translate_method_call ignored cl.keywords, so keyword-style calls
like add_argument("--count", short="-c", arg_type=INT) lost all
keyword values (short_name/arg_type stayed default), breaking
Test 4. Match keywords against function params by name, fill
missing params with zero values to keep call arity consistent.'
2026-08-07 17:30:41 +08:00
TermiNexus
f7cc0f84d1
解决了_parse_type_string 节点损坏,改用字符串直接解析
2026-08-07 01:44:34 +08:00
TermiNexus
f440bda421
清理 __new__/__init__/add_argument 中的 [DBG-argparse] 运行时打印,
...
还原标准库为静默实现。
2026-08-06 21:21:41 +08:00
TermiNexus
6d3fc4569c
通过了 Memhub BuddyTest 测试
2026-08-06 19:50:46 +08:00
TermiNexus
f8436c74d2
提交新的建议忽略
2026-08-06 18:08:09 +08:00
TermiNexus
8ad500c4da
基本稳定可以编译 Test
2026-08-05 20:12:08 +08:00
TermiNexus
a3b9bdc409
修正了逻辑,使 TPV 可以编译 Test,但自举还有一段距离
2026-08-03 02:01:20 +08:00
TermiNexus
9dcf34599d
升级了仿 Python 错误堆栈提示,修复了 bool 不存在的问题,将 bool 改为 i1 而非 i8,实现了 bool 的归一化
2026-07-31 04:12:12 +08:00
TermiNexus
bfb55d68f4
取消了 i8* == i8* 实际使用 strcmp 的规则,修复了诸多 Bug
2026-07-30 21:56:19 +08:00
TermiNexus
d227bee139
将 .py 和 .pyi 后缀名改为了 .vp 和 .vpi 后缀名
2026-07-30 16:34:50 +08:00