TermiNexus
|
ecfa47bd3c
|
fix(callgen): 跨模块裸名 CExport 调用精确解析返回类型,依赖未编译时 _deps_pending 重试,修复 malloc 返回截断 i32
|
2026-08-26 22:44:46 +08:00 |
|
TermiNexus
|
53c72ff57a
|
fix(callgen): 包子模块限定调用支持祖先包导入判定,杜绝同名函数劫持
main.vp IR 显示 intr.gdt.init() 解析成 @3b3cc38844ed7ad9.init(serial.vp)、
intr.idt.init() 解析成 @c418c6220a9a9d2a.init(su8250.vp,还带伪造 i16 实参)
——intr 包限定的跨模块调用因 is_module_imported('intr.gdt')=0 跳过校验,
find_func_in_module 后缀匹配劫持最先注册的同名 init → GDT/IDT 从未初始化,
CPU 一直用 OVMF 的 IDT(int 0x20 → OVMF #GP 0xEB6810C,定时中断永不到达)。
新增 ImportsGen.is_module_imported_or_known:已导入 或 全局已登记且任一祖先
包已导入(import intr → intr.gdt 可访问;this.this() 未 import this 仍 fast-fail)。
替换 CallGenMixin 模块限定解析 5 处门控(构造单层/多层、found_func 校验、
跨模块调用 import 检查)。
|
2026-08-26 18:56:37 +08:00 |
|
TermiNexus
|
50a4772a7d
|
fix(gen): 模块限定构造优先于裸名可见性分支,根治 ctor 归属内核同名类
gfx.Scene3D(...) 的 ctor 检测:Scene3D 因 includes 预注册(VKernel gfx
0ae)可见 → is_struct_visible 为真 → 走裸名分支 find_struct_by_module(
func_name, trans.ModuleSha1) 落空 → 裸名回退 find_struct("Scene3D") 命中
先注册的内核版 0ae → ctor 生成 @0ae.Scene3D.__before_init__。上一版只改
了 elif 分支(vis!=0 时是死代码),未生效。
改为模块限定构造优先:在裸名可见性检查之前,识别 Module.Class(...) 且
模块已导入 → _lookup_module_sha1(模块名) 精确解析 SHA1 →
find_struct_by_module 命中 App 版(9aab),锁定后跳过裸名回退。
|
2026-08-26 17:39:25 +08:00 |
|
TermiNexus
|
0a28df0864
|
fix(gen): 模块限定构造按模块名解析 SHA1,修复 ctor 归属内核同名类
gfx.Scene3D(...) 的模块限定构造路径(Name 模块基)误用 trans.ModuleSha1
(当前文件 sha1,类在 gfx 模块)→ find_struct_by_module 落空 → 裸名回退
find_struct("Scene3D") 命中跨模块同名类中先注册的 entry(VKernel gfx 与
App gfx 都定义 Scene3D,0ae 先经 includes 预注册)→ ctor 生成
@0ae.Scene3D.__before_init__ → 链接 undefined symbol(Scene3D 根因)。
改为按模块名 _lookup_module_sha1("gfx") 精确解析 SHA1 后
find_struct_by_module 命中 App 版(9aab),与注解解析路径一致。
|
2026-08-26 17:29:48 +08:00 |
|
TermiNexus
|
a9d71714b3
|
fix(callgenmixin): 字面量 0 改 t.CSizeT(0)——修复 i32 实参与 i64 形参不一致
根因(反汇编实锤):空参数构造走 can==0 分支,字面量 0 是 i32,生成 IR call 实参 i32 与 declare i64 不一致 → llc 按 i32 生成 movl(4 字节写 can 槽)→ i64 形参高 4 字节残留垃圾 → callee 读 can=[垃圾][count]。StringIterTest can=0x2B2_... 崩溃根因。
修复:三处 _translate_struct_ctor(..., cargs, 0, trans) 字面量 0 → t.CSizeT(0)(i64),IR 实参与 declare 一致 → llc movq 写 8 字节。
|
2026-08-25 17:51:21 +08:00 |
|
TermiNexus
|
b3546b05a5
|
feat(callgenmixin): len/调用前/callee 三级 can 断点,定位 4 字节错位
StringIterTest can=0x229_0000_0000=[cargs高32][count低32],IR 显示 len/调用均正确(i64),但运行时 callee 收到垃圾——需三级 printf 断点确定错位发生在 len 计算/调用传参/callee 读取哪一级。
门控(can>=2^32 才打印):①len结果异常(len 后立即)②调用前 can(L352 前)③callee 槽位悬空已打印 can。一次运行锁定。
|
2026-08-25 17:29:33 +08:00 |
|
TermiNexus
|
27f2a53c15
|
diagnose(tpv): Phase A pending 置位点全量 [DEPDBG] 诊断 + 别名解析修复 - 9 处 _deps_pending 置位点加 [DEPDBG] printf(CallGenCall×4/CallGenMixin/CallGenDispatch×2/CallGenProp/ExprGenName),一次构建即可定位 ClassGenVTable 永久 pending 的具体调用点 - StubMergerStore 新增 LookupSha1ByAlias:经 from_imports 别名映射(import X as Y → Y:X)解析模块 SHA1 - LoadDepVpiIntoModule 与 Phase A 依赖探针接入别名解析,HT 等改名别名不再误报未解析
|
2026-08-23 14:21:44 +08:00 |
|
TermiNexus
|
a12dcafed2
|
fix(tpv): 泛型类型参数 SHA1 规范化 + 自举链接修复
- 类型参数统一 "{定义模块SHA1}.{Class}"(ast.AST/AST → f467978339422f32.AST),
消除跨模块特化名分裂导致的 undefined symbol(list[AST|t.CPtr].set 根因)
- TypeGenResolve 新增 _norm_type_arg_name/_is_sha1_prefixed/_concat_sha1_class;
resolve_annotation_type 兼容 "{16hex}.Class" Attribute 形态(跳过
imported_modules 检查,优先完整名命中定义侧 struct)
- CallGenCtor._extract_type_args_from_slice / extract_class_name_from_annotation
新增 from_imports 参数,8 处调用方传 trans._from_imports 保持注册/查找一致
- 修复模块级函数链式调用推断(get_perm_pool() 联合返回 → .alloc() 裸名 alloc)
- 跨模块方法 declare self 改为类指针 %"sha1.Class"*,调用侧按形参 coerce bitcast
- 撤销泛型特化双 SHA1 前缀,恢复单前缀(模板 SHA1)
- 新增 --phase2command xxx.bat:不执行 llc/链接,命令写入 bat
|
2026-08-23 12:00:04 +08:00 |
|
TermiNexus
|
a6e28c71f5
|
将部分 while 简化为 for
|
2026-08-23 00:21:17 +08:00 |
|
TermiNexus
|
ec2feea15b
|
尽可能修补 Gen 的导入
|
2026-08-22 10:53:26 +08:00 |
|
TermiNexus
|
01b45c0630
|
修正了 import 路径,修正了部分代码谬误
|
2026-08-22 02:29:08 +08:00 |
|
TermiNexus
|
82a86761b9
|
feat(tpv): 语言内协程 M1-M7 移植——async/await 状态机 + 异常传播 + 帧池
- M1: async def -> 帧结构体 + create_/resume_ 状态机 + coro.coro_run 内联
- M2: async 参数、嵌套 await 提升 __await_N、If/While 内 await
- M3: For 内 await(range->While)、coro_sleep 轮询挂起、coro_destroy 回池
- M4: raise 存码、await 子帧异常传播、coro_exception、coro_gather
- M5/M6: try/except 链式匹配 + as e 绑定 + 异常类型码
- M7: try/finally、异常消息 msg 槽、自定义异常类、帧池复用
|
2026-08-22 00:34:32 +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
|
fa52fbd4e5
|
fix(gen): REnum 变体检测避免指针减法生成非法 sub i8*
rc_mq_dot - rc_mq_path 两操作数都是 str(i8*),TPC 直接发 sub i8*, i8*
非法 IR,opt ASan 插桩失败。改用 strlen 整数差计算模块前缀长度
(strlen(path) - strlen(cls) - 1),与既有 d_i - d_start 整数减法写法一致。
|
2026-08-19 02:54:08 +08:00 |
|
TermiNexus
|
e700de1055
|
fix(gen): REnum 变体构造支持模块限定形式 mod.Class.Variant
CallGenMixin.translate_call 的 REnum 变体检测只认单层 Name(ClassName.Variant),
llvmlite.LLVMType.Struct(...) 这类嵌套属性漏检 → 误走跨模块函数路径 →
_lookup_module_sha1('llvmlite.LLVMType') 查无 → '跨模块调用找不到模块 SHA1'。
根因修复:扩展检测到嵌套 Attribute,取路径末段为 REnum 类名、前缀为模块,
仅要求最左模块已导入(跨模块任意同名可接受,不做类归属校验),命中后走
_translate_renum_construct 构造变体。对应 TPC HandlesExprCall 静态方法路径。
|
2026-08-19 02:45:10 +08:00 |
|
TermiNexus
|
941ba2feb0
|
fix(call): 模块属性调用不回退局部变量,修同名局部变量劫持 VLogger.fmt_buf
found_func 未命中时仅裸名调用(Name)回退查局部变量(函数指针/闭包);模块属性调用(VLogger.fmt_buf())目标是模块符号,跨模块任意同名可接受(CallGenLeafKit 局部 fmt_buf 曾劫持 VLogger.fmt_buf → 误走函数指针调用报 t.Callable 缺失),仅 from-import 裸名 yyy 重名才冲突
|
2026-08-19 02:30:18 +08:00 |
|
TermiNexus
|
55d4c4102a
|
fix(call): super() void 命中用 hit_box 区分未命中 + CTypedef 预注册修复 mode_t NameError
- CallGenDispatch/CallGenMixin/ExprCallHandle: super() 命中 void 方法返回 None 属预期,用 hit_box 命中标志区分未命中,避免误走裸名调用报 'super 未定义'
- HandlesAnnAssign.Handle + TranslatorGenMixin.handle_module_level_var: CTypedef 按需注册(翻译期表已被 clear_ctypedefs 清空),修复 posix.vp S_ISREG(mode: mode_t) 参数解析 NameError
|
2026-08-19 00:28:48 +08:00 |
|
TermiNexus
|
51ae18a160
|
fix(gen): 编译器生成方法 __before_init__ 跨模块调用放行,修复找不到模块 SHA1
- _tc_h6_method_dispatch 增加 hit_box 命中标记:_translate_method_call 返回 None(void 语义)不再被误判未命中,translate_call 不再把对象名当模块名查 SHA1
- AnnotClassName 回退分支新增编译器特殊方法放行:结构体未注册 + 模块 SHA1 不可查(Phase A 依赖未就绪)时,__before_init__/__init__ 由 _special_method_ret_ty 固定返回类型,走 _translate_method_call 处理并标记 _deps_pending 下遍重试
- ExprCallHandle._tc_h6_method_dispatch 委托透传 hit_box,对齐 c.Asm/c.LLVMIR hit_box 修复(2f3320f)
|
2026-08-17 18:19:15 +08:00 |
|
TermiNexus
|
2f3320ffde
|
fix(gen): c.Asm/c.LLVMIR void 调用 hit_box 命中标记,修复 StringTest 编译报 Asm 外部函数未登记
拆分后 _tc_h2_c_special 以 None 表示未命中,但 translate_c_asm/
translate_c_llvmir 对 void(无输出)asm 返回 None 表示已处理无返回值,
两者混淆导致 translate_call 继续走外部函数路径 → WARN 外部函数返回
类型未登记 Asm/AsmInp + t.ASM_DESCR 被当 CDefine 常量赋值 FATAL。
新增 hit_box(t.CPtr,[0]=1)区分命中,Asm/LLVMIR 分支置位,
translate_call 命中且返回 None 时视为已处理直接返回。
|
2026-08-17 12:43:49 +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
|
9f19bb3666
|
refactor(gen): CallGenMixin 阶段 C 拆 translate_call 检测段(Dispatch 6 helper)+ 辅助方法(Lib),顶层降至 1119 行
|
2026-08-17 06:59:14 +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
|
f2b33f5e9b
|
fix(core): _translate_method_call 沿 MRO 祖先链查返回类型,修复 Module.append
mod.append(Module 继承 AST)中 append 定义在 ast/base.vp(sha1=71b2),
found_func 未命中时 fallback 按 class_name="Module" 查 text.ll/vpi 找不到
(函数名是 {71b2}.AST.append)→ fail-fast。修复:
1. 新增 ret_anc_name/ret_anc_sha1(方法实际定义类),默认 class_name,
MRO fallback 命中祖先类(AST)时更新;
2. text.ll/vpi 均沿 MRO 祖先链用祖先类名 + 祖先类 sha1 重试查询;
3. 调用名也用方法定义类构造({AST_sha1}.AST.append),避免链接 undefined。
|
2026-08-15 00:41:21 +08:00 |
|
TermiNexus
|
f9878e5a63
|
fix(core): 跨模块 CDefine 查找缓存 perm_pool + list 内置方法识别
1. _lookup_cross_module_cdefine:lookup_from_import 返回非 NUL 结尾内部指针,
base_mod 未截断导致 rc_full_mod 每层累积整个 from_imports + ".base"
(dump:ast.base.base.base 无限递归根因)。入口截断模块名 + 缓存查询/写入
key 统一用 base_mod;结果缓存到 perm_pool(XmodCdef 表)跨文件复用,
CONST_INT 递归查找只做一次。
2. translate_call:obj.method 检测将 list[AST|CPtr] 特化 struct 误当普通结构体,
查 append 返回类型(函数/text.ll/vpi 均未命中)fail-fast。新增
_is_list_builtin_method 识别 list 内置方法,在 Ptr(Struct)/Ptr(Ptr)/
AnnotClassName 三条路径跳过,落到 list 内置分支。
3. HandlesType 新增 register/lookup_xmod_cdefine 模块级委托(Mixin 隔离)。
|
2026-08-15 00:15:43 +08:00 |
|
TermiNexus
|
8d5dbeab89
|
feat: 引入 CompilerFactory 永久内存池,1a 每文件 reset 解 NewAstTest OOM
main 创建 512MB perm_pool(MemBuddy 第二实例,永不 reset)并注册
CompilerFactory 工厂(对齐 TPC Translator 装配模式,memhub 保持通用)。
各 Gen Mixin 跨 mark 持久表(struct/枚举/Renum/spec/vtable/全局函数/
闭包/函数指针/Cexport/Reexport/TraceFrames/Doc)全部迁移到 perm_pool,
替代 stdlib.malloc 深拷贝提升速度。
Phase1 1a 主循环(98 includes 全量 parse AST 驻留主 pool → 1GB 耗尽)
改为:StdlibAlloc=1 注册数据进 perm_pool + 每文件翻译完 reset_to(文件级
mark) 回收 AST;1b-pre vpi 预生成循环同样 reset_to(mark1)。同步修 7 处
reset 后悬空隐患:StructTable 表体、add_field DefaultVal、Renum 变体/
别名表内容、vtable full_names 内容、FuncptrRets 深拷贝。
CompilerFactory 类名与模块名同名(合法场景,TPC 已支持模块别名优先)。
|
2026-08-14 04:02:36 +08:00 |
|
TermiNexus
|
c27a1ba347
|
fix(gen): lambda 捕获 str 指针偏移 + 表达式接收者等五组回归修复
- lambda 捕获 cap_slot 改 cap_names + ci*64:TPV 将 (str)(整数) 编译为 itoa,define_var 键名变数字串,lambda body lookup 穿透父函数作用域产生跨函数误读
- StructGenMixin 递归解 Ptr 到 Struct / CallGenMixin self coerce + 表达式接收者方法调用:修 sub Vec3**、ld.lld undefined dot/cross
- TranslatorGenMixin/HandlesAnnAssign 跳过 CTypedef 全局符号:修 duplicate float64_t
- ClassGenMixin 枚举/联合/REnum 基类别名经 lookup_from_import_original 解析:修 Color.Green NameError
- 重载路径 1 对 Ptr(Ptr(Struct)) 先 load 对象指针:修 MultiInheritTest self 误读
- TypeGenMixin 泛型 T 先 resolve_generic_type_name:修 NoVTableTest T 未注册
|
2026-08-13 19:10:50 +08:00 |
|
TermiNexus
|
a0edc3d961
|
fix(gen): 泛型 type_params 生命周期与无注解赋值 annot 推断
- ClassGenMixin: list[str](pool, 8) elem_size 修正(原 4 致 Pair[T1,T2]
重叠写),新增 GenericClassTpParams stdlib 深拷贝表,特化统一取深拷贝
- Generator: 初始化 GenericClassTpParams 防 0xBEBEBEBEBEBEBEBE
- TypeGenMixin: 泛型上下文栈式管理,支持嵌套特化
- CallGenMixin: sz_builtin 补 double/float/char,修复 T.__sizeof__ NameError
- StubMerger: _CommentOutGlobalInBuf 循环注释同名全局,修复 @_mbuddy 重复定义
- HandlesAssign: 无注解赋值按 RHS 推断 AnnotClassName(类实例化/源变量/
运算符重载/字段注解/方法返回注解 vpi),修复联合类型 Ptr(i8) 属性访问失败
|
2026-08-13 17:31:54 +08:00 |
|
TermiNexus
|
19f48eea02
|
fix(gen): struct 返回类型解析 + 变参提升 + 泛型隐式推断三组修复
1. _ParseLLVMRetTyStr 支持 struct 字面量 {T1,T2,...}:"{i8*,i16}" 内含 * 被
误判为 i8*,b2a_hqx tuple[str,u16] 调用侧返回类型退化 → HandlesAssign
tuple 解包静默跳过 → 目标未初始化 → free 垃圾指针崩溃(HashLibTest hqx);
2. 变参提升 is_u_va 失败时 i8 默认 zext:printf("%02x", uint8) 不再 sext 成
0xFFFFFFF3 输出 ffffffXX(对齐 should_zext_widen 无符号字节策略);
3. _infer_generic_ctor_type_arg:Name("CInt")/("CFloat64T") 裸名类型转换补
strstr 匹配(from t import 后 func 是 Name);非类型转换实参(pool 等非
T 参数)返回默认 int 被"过滤纯 int"排除,不再 fail-fast(VectorGenericTest
隐式泛型推断),仅 Call 类型转换识别失败才 fail-fast。
|
2026-08-13 08:30:44 +08:00 |
|
TermiNexus
|
9d0ecf1c5d
|
fix(call): translate_call 无条件查询全局默认参数表,修复未初始化 gd_entry 崩溃
同模块带默认参数函数命中时 gd_entry 仅在 if df_defaults is None 块内
赋值,下方 _build_const_from_snapshot 读到未初始化栈垃圾指针(本次
0x7ead438f),解引用 gd_entry.ConstKinds 触发 ASan access-violation
(翻译 parser.vp 时随机崩溃)。改为与 _translate_method_call 一致,
find_func_defaults 无条件执行,同模块命中时快照优先、AST 回退兜底。
|
2026-08-13 06:54:32 +08:00 |
|
TermiNexus
|
8b8b716523
|
fix(call): 恢复缺参零值兜底,消除默认参数表查不到时的误杀
默认参数表按裸名注册(如 __init__),跨模块 'ClassName.method' 查找常查不到——查不到不等于无默认值(如 Buf.__init__(data, capacity) 缺的 length=0/owned=False 恰为零值)。恢复三处零值兜底(_call_method_on_ptr if/elif、_translate_method_call if、kw 分支),保留快照缺失 fail-fast。
|
2026-08-13 02:46:52 +08:00 |
|
TermiNexus
|
0c94f52f21
|
fix(call): 缺参 fail-fast 误杀参数匹配的构造调用 + 行号修复
- _call_method_on_ptr 的 elif found_func 分支原无条件 fatal,即使实参与形参匹配(如 JsonValue(pool) 构造 __new__(self, pool))也误报;改为数 found_func 形参数量,仅 total_count < fp_count 时缺参报错。
- 构造路径(_translate_struct_ctor/_translate_struct_ctor_kw)的 _call_method_on_ptr 调用补传诊断节点(取首个实参 AST),fatal_error 不再显示 line 0。
|
2026-08-13 02:41:52 +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
|
ea5b17f5fd
|
refactor: 深度 if 守卫化重构(guard continue + 短路合并)
- HandlesAssign/Return/Match、StubMerger、Phase2、Gen/*Mixin、StubGen/* 手写 None 检查链改守卫/短路,全局最深 14→12、>=10 层 26→19
- StubMerger define→declare 剥 linkonce_odr 等 linkage(修复 VectorGenericTest invalid linkage)
- CallGenMixin len() 数组常量长度分支(对齐 TPC _HandleLenLlvm)
- print 参数翻译失败 (null) 兜底改 fail-fast
- 临时诊断日志与死代码(sub_vk)清理
|
2026-08-12 21:13:25 +08:00 |
|
TermiNexus
|
b232c9266c
|
fix(gen): 裸名 CArray 类字段解析 + 跨模块函数返回类型 vpi 解析
- TypeGenMixin/HandlesAnnAssign: 支持 from t import * 后裸名 CArray[...]
(单参→Ptr(elem),双参→Array),修复 T4K3 类字段 CArray[str]=[...]
退化为 list[str] 动态构造 → list[str] 特化/append/_mbuddy 链接 undefined
- CallGenMixin: 跨模块函数调用返回类型按 vpi stub 注解解析
(tuple[T1,T2]→{T1,T2}),修复 b2a_hqx tuple 解包失效
|
2026-08-12 19:12:45 +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
|
4fd331dc08
|
fix(gen): 类字段单参CArray静态数组推断+列表默认值深拷贝;G3泛型循环防护与before_init去重;f-string/ctraits支持
|
2026-08-12 01:27:13 +08:00 |
|
TermiNexus
|
a649e4807d
|
fix: 泛型返回类型短路/数组迭代/非工作区崩溃
- CallGenMixin: 本模块 mangled 调用从当前 IR 取返回类型, 不查自己的 text.ll(未生成误告警)
- HandlesFor: Ptr([N x T]) 数组退化指针 load 后走数组迭代
- Config: 配置字段默认 None/0, 避免垃圾指针通过 is not None 检查
- main: 无 project 配置且无 --src 时 fail-fast 退出(非工作区崩溃)
|
2026-08-11 23:14:27 +08:00 |
|
TermiNexus
|
e7b0fecb99
|
fix(asm): 内联汇编输出约束修复(去重+多输出 struct)
- _asm_add_operand 去重: 模板内嵌 AsmOut/AsmInp 与 out=/inp= 声明同一变量不再重复收集
- ret_ty 多输出: output_count>1 返回匿名 struct, 元素数=输出数
- 输出处理: 多输出 extractvalue 逐元素 store(rdrand*_step 的 val+ok)
- extractvalue SSA 名改字母前缀 %asm.N.e{i} 避免数字 ID 后缀非法
|
2026-08-11 22:20:25 +08:00 |
|
TermiNexus
|
882c78c67a
|
feat(gen): ListTest 联合下标修复 + DocTest docstring 完整保留
- CallGenMixin: 默认参数快照无条件查询、静态类调用识别、len() 走 __len__
- TypeGenMixin/AssignGenMixin: T | t.CPtr 泛型标量元素宽度修复
- ExprGenMixin: / → __truediv__、指针判空走 icmp null、__doc__ 完整保留(登记表+跨模块符号解析)
- BuildPipeline: 翻译后提取模块 docstring(预注册阶段跨模块可用)
- Generator: DocKeys/DocValues/DocCount 登记表字段
|
2026-08-11 21:21:40 +08:00 |
|
TermiNexus
|
83d46dd646
|
fix(gen): 装饰器标记支持 + len 分发 + 跨模块调用修复
- _is_enum_class/_is_union_class/_is_renum_class 支持 @t.CEnum/@t.CUnion/
@t.REnum 装饰器形式(此前只认继承基类,装饰器形式 Color 未注册枚举,
Color.GREEN 落到跨模块 CDefine FATAL)
- forward_declare_functions/translate_function_def 支持 @t.CExport/@t.CExtern/
@t.State 函数存储装饰器(对齐 TPC _extract_decorator_storage_flags);
用 HandlesClassDef._has_decorator 委托(Mixin @t.NoVTable 静态绑定,
self. 跨类调生成不存在的 FuncGenMixin._has_decorator → 链接 undefined)
- len() 内建对结构体对象分发 __len__(此前恒 strlen 读对象首字段垃圾长度)
- 静态调用检测 elif:module.ClassName.static_method 形态;零参 @staticmethod
去掉 head is None 守卫;_translate_property_call 按形参类型 coerce 实参
- translate_compare 指针判空(ptr != 0/== 0)跳过 __eq__/__ne__ 重载走
icmp null;同模块类无此 dunder 干净返回 None 防幽灵 call;/ → __truediv__
|
2026-08-11 18:42:04 +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
|
120a2d7ad7
|
fix(Phase2): Phase A 多遍重试修复同项目依赖翻译顺序
main.vp 先于其 import 的 mbuddytest.vp 翻译(文件系统顺序),跨模块函数返回类型精确解析因依赖 text.ll 未生成而 fail-fast。新增 Translator._deps_pending + text.ll 存在性探测区分依赖未翻译/真错误,Phase A 循环改多遍,依赖就绪后下遍重译命中。
|
2026-08-11 01:33:52 +08:00 |
|
TermiNexus
|
cca468e910
|
feat(gen): 实现 super() 语义(super().__init__ / super().method 静态绑定父类)
- 新增 _translate_super_call:当前类取 self 变量注解类名(Mixin 字段
跨类偏移不一致的替代方案),沿 MRO 跳过自身找父类方法,静态调用
父类实现(不虚分派),this_adjust 字节偏移 + 参数 coerce
- translate_call 拦截 super().method 形态
|
2026-08-10 21:48:42 +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
|
451be82b32
|
fix(gen): 清理 ASan 二分调试检查 + StdlibAlloc 跨 Mixin 委托 + 调试链修复
1. 移除 ClassGenMixin 泛型判断前/模板注册后与 Phase1 五处 gen 完整性二分检查(GlobalFuncs 调试残留,Mixin 方法体访问非自身字段违反块内索引约束)。2. ClassGenMixin._register_struct 读 self.StdlibAlloc(StructGenMixin 字段)改经 HandlesStruct.get_stdlib_alloc 委托,新增 StructGenMixin.get_stdlib_alloc。3. 含 P5 后累积修复(VpiReader ParamCount/越界封堵等)。
|
2026-08-10 18:09:23 +08:00 |
|
TermiNexus
|
ba3f22702e
|
refactor(gen): P5 对象化迁移完成 - FuncGenMixin/ClassGenMixin 全量迁移+委托层; 泛型模板表迁入 gen 字段; stub 方法 ParamCount 不含 self(修复跨模块方法调用默认参数填充错位); 默认参数快照失败 fail-fast(防悬空 AST UAF); HandlesMatch 改委托 gen._lookup_renum_variant
|
2026-08-10 06:24:50 +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 |
|