TermiNexus
|
64538e08f8
|
feat(descriptor): 注解位置 __attribute__(...) 脱糖为 t.attr.*,并支持 []T 自动推导数组
SymbolUtils 新增 _ExpandAttributeDescriptors:注解位置(冒号后 / 形参 / 返回箭头后,可与 const/volatile 混写)的 __attribute__(a, b(x)) 文本脱糖为 t.attr.a | t.attr.b(x),与 TPV includes/ast/parser.vp 的 _IsMagicAttributeCall/_MakeTAttrMarker 同源;紧跟的 C 风格前置数组前缀 [N]T / []T 在同一次编辑里一并脱糖为 t.CArray[T, N] / t.CArray[T, None](None = TPC 既有长度自动推导数组,见 HandlesAssign.py:1606)。
修 TransPyV/App/main.vp:44 —— V_TPV_VERSION: __attribute__(section('.PRVERSN')) []char = '...' 此前 []char 被 vast 当成 __attribute__ 调用的下标,报 unexpected token OP(']')(与根因脱节);现展开为 t.attr.section('.PRVERSN') | t.CArray[char, None]。
把 _AtAnnotationColon 从 _InArrayAnnotationPosition 抽出,数组前缀与属性描述符共用同一注解位置判据,避免两份副本分叉。回归:306 个 .vp 仅 main.vp:44 一行被改,无意外改动;11 条合成用例与 main.vp 全文件 vast.parse 均通过。
|
2026-09-27 14:06:04 +08:00 |
|
TermiNexus
|
3b5d85ce9d
|
fix(handles): 补指针操作符目标写入与实参解引用,消除静默丢弃
- HandlesAssign: 新增 ast.UnaryOp 赋值目标分支(*p = v 复用 _StoreWithCoerce);Tuple/List 目标合并;删除 Tuple 分支里未绑定的死代码(UnboundLocalError)
- HandlesAugAssign: 新增 ast.UnaryOp 目标分支实现真 *p += v,其余形态 fail-fast
- HandlesExpr: 新增 ast.Starred 分支,值位置 *p 归一为 UnaryOp(Deref)(修 t.CPtr(*((uint64*)(blk))) 恒为 0)
|
2026-09-27 00:19:44 +08:00 |
|
TermiNexus
|
58050a1ab2
|
fix(member_base): base 改由声明类型与 elements 的一致度校准,修整类字段偏移整体差 1
delta 长度启发式只在成员表与布局恰好差 vtable 一项时成立;成员表多/少一个非 vtable 项时 base 判错,整个类字段偏移整体平移:ast.Constant 的 lineno 落到 pool(MemManager*),调用点报形参 lineno: i32 收到指针,把真因掩盖成指针/整数错配
改法:对 b 属于 {0,1,2} 逐项比较成员声明类型与 elements[b+i],取一致度最高者(完全相同 +2),仅在明显更优(至少多对齐 1 个成员)时覆盖启发式;指针槽区分度最高
同时移除上一轮临时加的运行时字段布局探针(_diag_member_layout 及其两处调用)
|
2026-09-26 21:29:28 +08:00 |
|
TermiNexus
|
50cea6c7b3
|
fix(classdef,base,attr): 成员注解解析静默兜底改 fail-fast;新增按需输出的字段布局探针
HandlesBase.CollectAnnAssignMember: 注解解析返回 None / _ctype_to_llvm 得 void / 抛异常三处静默 i32、i8* 兜底改 fail-fast,报错带成员名+注解原文+BaseType/PtrCount 现场
HandlesClassDef: 方法内 self.x: T = ... 的同类三处兜底同样改 fail-fast(带类名/成员名/注解原文)
HandlesExprAttr: 新增 _diag_member_layout(默认静默,仅当 offset 为 None / members[offset] 名不符 / 类型与 elements[offset] 不一致时打一行,上限 15 行)
|
2026-09-26 21:25:52 +08:00 |
|
TermiNexus
|
c83fc752c6
|
fix(sizeof,parse): 尺寸链去静默兜底,解析报错可定位,补 C 解析器缺口
StructGen: _get_struct_size/_get_align 去 opaque→8/ptr_size、未知→4 兜底并补 VectorType;LiteralStructType.fields→.elements(llvmlite 无 fields,必然 AttributeError)
HandlesClassDef: union 载荷尺寸经不存在的 ir.DataLayout 静默退化成 8 字节;HandlesExprCall/ExprBuiltin: sizeof 各静默 0 分支改 fail-fast,数组元素 sizeof 统一走 _get_struct_size
HandlesFor: nonlocal struct/array 堆分配不再退化成 malloc(8)
vast/vast_c: 补一元 * / & 解析,装饰器后 extern/export 分派修复,C 侧报错带 token 与行号;StubGen.Converter: 宏展开丢尾随空行修 .pyi 缩进非法
其余为 rawptr 迁移 / fail-fast 口径等历史改动一并入库
|
2026-09-26 19:27:22 +08:00 |
|
TermiNexus
|
53a345a59a
|
feat(ctrlc-stack): 新增 --ctrlc-stack 编译期开关(按键打印 .vp 调用栈)
Config/Phase2Translator: --ctrlc-stack 自动开 DWARF;缓存失效;链接后 llvm-dwarfdump 导出 <exe>.stackmap(逐条归一化为 RVA——旧的整体判据会被 lld 去重产生的 0 地址行带偏,导致全表差一个 ImageBase);链接参数追加 -ldbghelp;include 也生成 DWARF 并隔离到 includes.binary_ctrlcstack(_asan);llc 追加 -frame-pointer=all。
BaseGen._RegisterDbgStackInstallViaCtor + StructGen.finalize 钩子: 注入 llvm.global_ctors(priority 65535) 在启动期调用 dbgstack.Install(),写盘前核对 global_ctors 否则 fail-fast。
FuncGen._adjust_args: 指针到整数的 fail-fast 补逐项类型诊断。
|
2026-09-25 13:11:13 +08:00 |
|
TermiNexus
|
f7ace9876d
|
fix(vararg): va_arg/arg 类型解析改走注解解析同源并 fail-fast
- _resolve_vararg_type 覆盖 builtins/库/符号表 typedef 与 T* 指针后缀,不再对手抄名单之外的名字(如 uint64)静默回退 i32
- i32 回退会让 Win64 8 字节变参槽被 trunc 丢高 32 位:viperlib vsnprintf 的 %016llx 因此只打印低 32 位,ConstFloat 的浮点常量名(即常量值)退化为真值低 32 位零扩展,double 字面量全变 0.0
- _HandleArgLlvm / _infer_vararg_type_from_context 统一调同一入口,消除三份同源重复解析链
|
2026-09-24 20:41:05 +08:00 |
|
TermiNexus
|
2cc816ac13
|
修复了一些错误
|
2026-09-18 20:00:59 +08:00 |
|
TermiNexus
|
6af2dea917
|
修复了一些问题
|
2026-09-17 14:52:37 +08:00 |
|
TermiNexus
|
43e7cdd2cc
|
feat(tpc): 函数级 DWARF 调试元数据 + 合并 IR 元数据规整
DWARF: 新增 LLVMCG/DebugInfo.py(DebugInfoEmitter)——每模块一个 DIFile/DICompileUnit、每个 define 一个 DISubprogram 并在函数入口首条指令挂 DILocation,模块落盘前补 !llvm.dbg.cu 与 !llvm.module.flags(Debug Info Version 3)。开关:新增 --dwarf(默认关闭),dwarf_enabled = args.dwarf or args.asan,沿 Phase2Translator → _translate_file → Translator.DwarfEnabled → LlvmCodeGenerator.dwarf_enabled 下传。define 之外的 declare 不挂。include 库刻意不给 DI(其 .obj 进跨项目共享的 includes.binary 缓存,注入会污染缓存)
关键约束(踩过的坑,已在探针中实测):DICompileUnit 与 DISubprogram 必须 is_distinct=True;emissionKind 用 FullDebug 而非 Full;spFlags 用 DISPFlagDefinition;DISubprogram 必带 type=DISubroutineType,缺了 llc 会崩 0xC0000005;模块级必须有 !llvm.dbg.cu + Debug Info Version 3
IRMetadataFix: 新增 SanitizeIRMetadata,在 _llc_compile 入口统一规整 IR——BuildCombinedIR 是多模块 IR 文本直接拼接,--dwarf 后每个片段自带 !0..!N 与两份命名元数据,22383 行样本里 !0/!1 各重复 67 次导致 opt/llc 报 Metadata id is already used。实现:按块重编号 !N 并改写 !dbg/命名元数据引用、!llvm.dbg.cu 全量聚合、其它命名元数据全同去重;无元数据文件逐字节 no-op、幂等(1.7MB/0.30s)
顺带修 _AddWeakComdat:函数头正则跨行吞换行,--dwarf 把 !dbg 放到 define 行尾后 comdat 被插到 ! 附着之后,llc 报 expected { in function body(现场 52 个 define 中 36 个中招);改为插在附着之前,无 !dbg 时产物逐字节不变
已自证:llc/opt RC=0、行表含 .vp 文件名与行号、opt -passes=forceattrs,asan 与 llvm-link/always-inline 均不丢 !dbg。已知待办:llc 现报 inlinable function call ... must have a !dbg location ⇒ 需补语句/调用点级 !dbg(否则警告 ignoring invalid debug info 会丢弃整份 DI)
|
2026-09-16 19:29:51 +08:00 |
|
TermiNexus
|
033c0a7771
|
fix(tpc): 修复 t.CVoid 清理暴露的三处类型解析缺口
SymbolTypeResolver: 裸 t.CPtr 作 typedef 值(无联合、无下标)时按 void* 展开。_find_base_type 把 attr==CPtr 归一为小写 ptr,而守卫 _PTR_MODIFIERS 写的是 CPtr 命不中,导致 ptr 被当成类型名存进 OriginalType,最终建成 %"<模块sha>.ptr" 幻影结构体(HANDLE/VOIDPTR/DIR 报 cannot store i8* to ...ptr*)。改前 t.CVoid | t.CPtr 走 BinOp 分支恰好绕过
HandlesExprAttr: 属性访问的成员查找补继承链回退(对齐 HandlesExprUtils._get_var_class 的口径)。字段声明在基类时元素类表的键是声明类,而收件人是子类,原实现只查收件人类自身;方法调用侧早已做 MRO 查询,故 150 处 self.Gen.X.method() 未暴露。修后 self.Gen.TypeGenCType.ImportAliasBuf 可解析(该字段在基类 TypeGenBase),且此前被静默丢弃的 _register_import_alias malloc 分支恢复生效
TypeConvert._base_ctype_to_llvm: 注册表给出完整类型串(CPtr/CArrayPtr/CNeedPtr/CAutoPtr -> i8*)时不再返回 None(_llvm_str_to_ir 只认标量名),改走 _type_str_to_llvm——与同文件 _basic_type_to_llvm 既有口径一致;否则 PtrCount 循环会构造 ir.PointerType(None)(llvmlite opaque 指针,无 .pointee),在 HandlesFunctions._GetFunctionSignatureLlvm 抛 AttributeError(opendir 的 FATAL)。触发集合经全注册表扫描恰好 4 个类
等价性验证: 31614 个符号 + 37527 个真实注解点位逐条对比改前/改后差异 0 条(崩溃输入除外,由 opaque ptr 变为 typed i8**)
|
2026-09-16 18:16:38 +08:00 |
|
TermiNexus
|
8d950f5d43
|
fix(declgen): 联合中 t.CPtr[T] 下标段按 Ptr^N 叠加,与 LLVMTypeMapper 口径对齐
_get_type_str 的 BinOp 段原先在右段非 i8* 时落到 星号在左值则直接返回左值 的启发式,左值已是指针(BYTEPTR=>i8*)时会吞掉右段层数(BYTEPTR | t.CPtr[t.CPtr] 得 i8*,Mapper 得 i8***,同份 stub 自相矛盾)
新增 t.CPtr[T] 分支(两侧对称,置于该启发式之前),复用文件内既有 _ptr_level_of 取层数并按定义侧 TypeGenResolve 口径改为纯外包 N 层(去掉原 struct 吸收半截语义);LLVM 聚合左值显式排除。A/B 实测 135 个 .pyi 输出逐字节相同,现有语料零影响
|
2026-09-16 07:11:23 +08:00 |
|
TermiNexus
|
2427a6e992
|
fix(typecode): 联合类型中 t.CPtr[...] 下标指针按层级合并,与 TPV 对齐
LLVMTypeMapper 只把裸 t.CPtr 认作指针标记,X | t.CPtr[t.CPtr] 会退化为首段 i8(TPV 定义侧与 TPC 声明侧均为 i8**),跨模块调用点 declare 与定义 ABI 错位:实参传 1 字节、被调用方按 8 字节指针写,ZlibTest 由此触发 ASan heap-buffer-overflow
新增 SymbolUtils.IsCPtrSubscriptNode 判据(对齐 TPV _is_cptr_subscript 的 t.CPtr[...] 判定),_resolve_subscript 与 _resolve_bitor 各增分支,层数复用 TypeAnnotationResolver.from_node(...).PtrCount(先例 HandlesTypeMerge 同手法),使 X | t.CPtr[...] => Ptr^N(X);裸标记分支逐字未改
|
2026-09-16 07:09:09 +08:00 |
|
TermiNexus
|
0721568d41
|
fix(codegen): 消除泛型特化静默兜底并修正 sha1 前缀归一
崩溃根因(已由 IR + 符号化确证):MatchGenMixin._handle_renum_match 的 body_list.get(bi) 被分派到 list[int].get,返回 i32 后 inttoptr 成 AST* 造成指针 32 位截断,运行期读 vtable 崩溃(ASan 坏地址 0xc1158310)。
第 1 步 方法分派:删除「ClassName 不含 [ 时按 Gen.structs 迭代顺序任选特化」的静默兜底,改为按接收者 LLVM 值类型的 pointee 用 find_struct_by_pointee 身份匹配反查唯一特化;反查不到时以「基名匹配且存在目标方法」求唯一候选,候选多于一个即 fail-fast,不再任选。
第 2 步 泛型实参:5 处「解析不出类型实参就补 int/CInt」改为 fail-fast。经核对语言与实现(wiki 类型系统/类章节、_generic_class_templates 的 type_params 无默认值机制、list 模板仅 1 参)确认泛型不存在合法缺省实参,5 处均属未知兜底。
第 3 步 注解赋值(真正的污染写入点):HandlesAnnAssign 中 bnm 与 CN 的比较未归一 sha1 模块前缀(注解侧裸名 list 与带前缀键 CN 恒不等),导致恢复特化名分支不命中、把裸泛型基名写入 var_struct_class,从而被第 1 步的兜底按顺序任选成 list[int]。改为与同函数既有 _cn_short 口径比较,构造仍用带前缀 CN。
|
2026-09-14 16:45:26 +08:00 |
|
TermiNexus
|
d0f69eb90a
|
fix(phase2): 热点插桩时强制失效 include 模块的旧目标文件
include 模块同样会被插桩(hotspot_sites_file 经 worker 透传),但 _compile_include_py_files 对预编译缓存 precompiled_obj 与 output 缓存 obj_path 存在即跳过,且没有 hotspot_on 强制重译分支,导致复用上一次未插桩的 .obj,使 include 内热点模块(MemBuddy.alloc、ast.tokens、ast.base、llvmlite 窥孔等)的计数/计时 IR 静默缺失、其耗时被计入调用者 self。
启用热点时先删除这两类旧 .obj(沿用 App 主循环同一写法:用未缓存的 os.path.isfile 判定,避免把已存在写入只写存在性缓存后被删除导致后续判定读到过期值而漏编),删除失败仅告警不中断、不静默吞错。
include 路径本就每次无条件重译 .ll(无跳过逻辑),故只需处理 .obj;.dso.ll/.stub.ll/.text.ll/.vpi/.deps.json 经核对无同类隐患。未启用热点时行为逐字节不变。
|
2026-09-14 14:42:01 +08:00 |
|
TermiNexus
|
ac77287f20
|
fix(phase2): 热点插桩强制重译时同步失效旧目标文件
启用 --hotspot-sites 时会跳过 .ll 与 .stub.ll+.text.ll 两个缓存分支而强制重译,但既有的 {sha1}.obj 未被清理:_compile_ll_files 的三处跳过判定只按 obj 是否存在(收集阶段、_compile_one、need_compile 二次过滤),会复用上一次未插桩的目标文件,导致部分模块的热点计时/计数静默缺失、其耗时被计入调用者 self。
在 App 源文件主循环内,hotspot_on 为真时先删除对应 {sha1}.obj;用未缓存的 os.path.isfile 判定而非 _CachedIsFile,避免把已存在写入只写存在性缓存后被删除、使后续三处判定读到过期值而漏编;删除失败仅告警不中断、不静默吞错。
该循环遍历全部可达源文件且本轮所有文件都进入 need_translate(串行与批处理共享同一列表),故覆盖本轮全部被强制重译的模块。未启用时整块被跳过,行为逐字节不变。
|
2026-09-14 14:40:30 +08:00 |
|
TermiNexus
|
bf4bab093a
|
fix(hotspot): 深度栈改用 common linkage,修复跨模块 self 记账漏扣
症状:--hotspot-sites 下跨模块调用链的调用方 self 约等于 inc(子调用 inc 未被扣除),而同模块链正常,导致所有基于 self 的结论带偏差(实测 _translate_module_level 421.9e9/422.0e9、translate_children 164.5e9/164.9e9 等)。
根因:__fhs_tdepth/__fhs_tstart/__fhs_tchild 原为 internal linkage,Projectrans 多模块模式下每个 .vp 翻译单元各持一份独立深度栈;跨模块调用时被调方读到的深度为 0,slot=0,ret 时 slot>0 判定为假,其 inc 永远写不到调用方的 tchild[slot-1],于是调用方 self = inc - 0 = inc。
修复:三件套改 common linkage,由链接器合并为全程序唯一一份(与本仓库多模块同名全局的既有做法一致);__fhs_tscratch 与每函数计数器仍保持 internal。已用逐指令 Python 模拟验证:同模块各形态均正确、跨模块独立栈必然漏扣、共享栈后全部正确。
仅 --hotspot-sites 启用时生效,未启用路径逐字节不变。旧的 hotspot_time.txt 在跨模块链上的 self 列不可信,需重新测量。
|
2026-09-14 14:35:17 +08:00 |
|
TermiNexus
|
136e9bc33e
|
feat(hotspot): 热点日志在进程退出时也落盘(atexit + 幂等守卫)
此前 --hotspot-sites 仅由 SetConsoleCtrlHandler 在 Ctrl+C 时落盘,导致正常退出与 fail-fast(VLogger.error 走 sys.exit(1),底层是 extern exit() 即 libc exit)都拿不到热点数据。
现把两个 handler 主体抽为 void() 落盘函数(__fhs_dump_sites/__fhs_dump_time),新增 __fhs_dump_all 与每模块 internal i32 __fhs_dumped 幂等守卫,并在 ctor/main 入口同时注册 SetConsoleCtrlHandler 与 atexit;Ctrl+C 处理器仍返回 FALSE(0) 保持原有终止行为。同模块只落盘一次,不产生重复段。
覆盖:正常 return、sys.exit(1) fail-fast、Ctrl+C。不覆盖(已在报告中列明):_exit、abort、崩溃信号、被强杀。不启用开关时 IR 逐字节不变;两个输出文件格式与排序不变。
|
2026-09-14 14:08:55 +08:00 |
|
TermiNexus
|
84d91d53e5
|
perf(hotspot): 计时串行化并改为自身耗时(exclusive)统计
--hotspot-sites 的每函数计时原为裸 rdtsc 的 inclusive 耗时,导致 _parse_* 一条调用链各项数值几乎相同、无法定位自身成本,且短函数测量不可信。
新增 _EmitReadTimestamp:x86_64 用 lfence 加 readcyclecounter 串行化读(业界通行的 lfence;rdtsc),非 x86_64 编译期降级为裸 readcyclecounter;入口与每个 ret 前共用。选 intrinsic 组合而非内联汇编,避免约束串转义与渲染风险。
用深度栈实现自身耗时:全局 __fhs_tdepth 与 [512 x i64] __fhs_tstart/__fhs_tchild,self = inc 减去本帧内被插桩子调用 inc 之和;递归靠每调用独立 slot 与深度索引天然正确;深度溢出或终结指令非 ret 的块明确跳过不记账(仅计进入次数),不伪造数值。入口段用 select 而非条件分支,避免改动 CFG。
hotspot_time.txt 行为 函数名 self inc 进入次数(仍按 self 降序),段头注明单位 tick 与 self 口径;hotspot_sites.txt 格式保持不变;帮助文本同步更新。未插桩的被调方(含 libc)耗时计入调用者 self,属该方法固有性质并已注明。
|
2026-09-14 13:42:14 +08:00 |
|
TermiNexus
|
fc5a6134ca
|
feat(hotspot)!: 下线 --func-hotspot 并为 --hotspot-sites 增加每函数计时器
移除 --func-hotspot 全链路(CLI 解析与绑定、Config argparse 与注入、Translator 属性、LlvmGenerator 收口与透传、BaseGen 专属实现、Phase2Translator 透传、帮助文本);全仓已无 FuncHotspot/func-hotspot 残留引用。
通用截断逻辑保留并改名为 _InstallHotspotTruncate,供 --hotspot-sites 使用(分别清空 hotspot_sites.txt 与 hotspot_time.txt);ctor 注册改为直接新建并接收处理器列表(sites 与 time 两个处理器在同一 ctor 内注册)。
--hotspot-sites 现附带每函数计时:入口读一次 @llvm.readcyclecounter() 存起始 tick,在函数所有 ret 之前再读一次并累加差值到 internal i64 __fhs_ftime_N,同时 __fhs_ftime_enter_N 记录进入次数;单位为 tick(x86_64 即 CPU 周期),语义为 inclusive(包含内层调用)。
计时结果按耗时降序写入同目录 hotspot_time.txt(# time <module_sha1> 分段 + 函数名/累计 tick/进入次数),不改变 hotspot_sites.txt 的既有格式与字段。不传 --hotspot-sites 时零影响。
|
2026-09-14 13:10:06 +08:00 |
|
TermiNexus
|
2021c0edb7
|
feat(hotspot): 新增 --hotspot-sites 逐调用点计数并带源码 file:line
为匹配白名单的直接 call 点插桩 internal i64 __fhs_site_<K>(call 前 +1),计数天然包含循环内放大的真实执行次数,可把热点定位到具体调用点。
新增 --hotspot-callees 覆盖白名单、--hotspot-sites-all 全量;按去 16 位 sha1 前缀后的基名匹配。Ctrl+C 落盘独立文件 hotspot_sites.txt(# sites 分段,含调用方/被调方/计数/源码位置),按计数降序;不破坏既有 hotspot.txt 格式。
在 AST->IR 生成期由 _HotspotSiteBuilder 为每条新生成的 call 指令轻量挂载 _src_file/_src_line,插桩时作为可选尾字段输出;取不到则留空不伪造。开关关闭时改用原生 ir.IRBuilder,零影响。
|
2026-09-13 23:29:32 +08:00 |
|
TermiNexus
|
0ffaadc95e
|
fix(tpc): 注解侧泛型基名方向判定,阻止裸泛型 RHS 覆盖已特化注解类型
HandleAnnAssign 原无条件以 RHS.pointee 重建 alloca,会把注解已解析出的 Base[...] 特化类型覆盖成裸泛型基类,导致后续 .get() 按错误元素类型分派(list[int].get 返回 i32)后 inttoptr 截断。新增注解侧泛型基名结构性识别,仅拦此方向错误。
|
2026-09-13 17:50:02 +08:00 |
|
TermiNexus
|
5680592f37
|
feat(tpc): 新增 --func-hotspot 函数热点统计,Ctrl+C 时落盘
启用后为每个函数定义生成 internal i64 计数器并在入口递增;各模块 Ctrl+C 处理器以追加方式写最终文件(含 main 的模块启动时清空一次),经 llvm.global_ctors 自注册;未传参数时零影响。
|
2026-09-13 17:50:01 +08:00 |
|
TermiNexus
|
355811d64e
|
chore(tpc): 移除属性链/调用分派错误路径的临时诊断打点
- HandlesBase: 删除 _AttrFailDiag 现场诊断(含模块别名链逐跳 dump),恢复精简错误信息
- HandlesExprAttr: 删除 [CHAIN-DBG] stderr 打点与 [attr-diag]/[attr-diag-nested] KeyError 包装
- HandlesExprCall: 删除 Unknown module 异常的 _rc_note 诊断后缀
|
2026-09-12 12:50:35 +08:00 |
|
TermiNexus
|
ed3355202a
|
fix(tpc): Mod.Var 链属性访问补第四条类回退(直读 var_/global_struct_class)
|
2026-09-12 12:42:59 +08:00 |
|
TermiNexus
|
015fbf17cf
|
fix(tpc): 跨模块模块级变量类登记与 Mod.Var.Field 链解析;并停止跟踪 __pycache__/*.pyc
|
2026-09-12 11:51:42 +08:00 |
|
TermiNexus
|
9257dd841f
|
fix(tpc): rowptr[X] 字段 element_class 登记补短名模糊扫描,修 Unknown module 误报
|
2026-09-12 11:24:49 +08:00 |
|
TermiNexus
|
cc2f5d34eb
|
feat(tpc): includes 只认项目配置;ASan 改为显式链接 clang64 运行库
includes 目录不再回退仓库硬编码 TransPyCRoot/includes:Phase2Translator 新增 PROJECT_INCLUDE_DIRS(INCLUDE_DIRS 置空以兼容旧引用),Config.py 从 project.vpj 的 includes 同步;HandlesImports 的模块搜索、TypeAnnotationResolver._builtins_include_dirs 一律只读项目目录。
ASan:mingw64 clang 没有 x86_64-w64-windows-gnu 目标的 ASan runtime,新增 _FindAsanRuntimeDir 定位 clang64 运行库并按 -l: 显式链接(asan_dynamic-x86_64.dll.a + runtime_thunk),定位失败即报错退出。HandlesExprFormat:i32 不再写 'l' 长度修饰符(LP64 下 printf 会按 64 位读实参)。
|
2026-09-11 22:47:21 +08:00 |
|
TermiNexus
|
ab3873b038
|
加了忘记加的东西
|
2026-09-09 14:46:41 +08:00 |
|
TermiNexus
|
a433f79f54
|
基线重置,TransPyC 不再作为直接脚手架主仓库
|
2026-09-09 14:44:44 +08:00 |
|
TermiNexus
|
7ab8bef3b5
|
perf(vipersimd): add/mul 数组内核 ×8 双缓冲(32 doubles/大迭代)压榨访存口
|
2026-09-09 10:38:39 +08:00 |
|
TermiNexus
|
e5d91ae497
|
chore(repo): 解除剩余 Test/*/.tpv_build 构建缓存追踪(.gitignore 已忽略)
|
2026-09-09 08:57:03 +08:00 |
|
TermiNexus
|
0bfbcdd028
|
fix(memhub): MEMDBG 改为运行期开关 _memdbg_enable,BuddyTest 入口关闭
|
2026-09-09 08:55:49 +08:00 |
|
TermiNexus
|
4a8d8f34c0
|
fix(llvmfunc): T2 窥孔槽 load 超过 64 记录上限时放弃转发,避免删 def 留悬空 use
|
2026-09-09 08:55:48 +08:00 |
|
TermiNexus
|
8e2d5b227c
|
chore(repo): 清理并忽略构建缓存与 PROF 性能产物,避免提交临时文件
|
2026-09-08 20:47:36 +08:00 |
|
TermiNexus
|
0bda395ecc
|
fix(translator,peephole): TPC 属性链解析修复与窥孔 T1-T3 收尾
- TPC(lib/core): 泛型父特化形参按声明类登记 var_struct_class; _find_struct_key 键归一支持方括号内嵌 sha 前缀; 字段探测失败不再冒泡 FuncGen fail-fast; cast 局部通用指针槽按静态类 bitcast; 属性解析失败附诊断
- 窥孔(includes/llvmlite/__function.vp): 窥孔移至 Renumber 前使输出 SSA 编号连续; T3 no-op bitcast 消除; T4(数组 bitcast->GEP)验证干扰返回类型收敛已移除
- 附调试打点与 1.log
|
2026-09-08 12:52:48 +08:00 |
|
TermiNexus
|
76d1ee6076
|
fix(compiler,peephole): TPC 属性链解析与窥孔输出瘦身
- TPC(lib/core): 任意级属性链按链前向类解析恢复 stub 退化字段; cast 局部 rowptr[X] 登记回填; 通用指针槽按静态类名 bitcast 兜底; 赋值 RHS 求值失败 fail-fast 防未初始化变量; 报错行按源码文本锚定并附 ATTR-DIAG 现场
- 窥孔(includes/llvmlite/__function.vp): 成员访问单级链模式; 窥孔移至 Renumber 前使 SSA 编号连续; T3 no-op bitcast 消除; 替换缓冲按最坏上界分配
- __builder/__module/string.vp 配套; 清理 Test 构建产物与 PROF 杂项
|
2026-09-08 11:02:37 +08:00 |
|
TermiNexus
|
45e78ad107
|
基线重置,修复了一些 bug
|
2026-09-07 14:46:02 +08:00 |
|
TermiNexus
|
b02bedae9a
|
fix(link): 为 weak/linkonce 函数与全局补 COMDAT,修复 COFF 下跨模块重复符号
COFF 下无 COMDAT 的 weak/linkonce 定义会被 llc 展开成强符号 .weak.<name>.default(weak external 实现副本)。rowptr 新一代 includes 让泛型特化(list[rowptr[AST]].__before_init__)与跨模块共享常量(PYI_BUF_SIZE)在多个模块重复定义 → ld.lld duplicate symbol。
在 Phase2Translator 三处 dso_local 后处理簇后调用 _AddWeakComdat:函数定义补 ' comdat'、全局补 ', comdat'(置于 align/section 前),并在模块头加 comdat any 声明。llc/ld.lld 端到端已验证(双 obj 同符号链接无重复报错)。
|
2026-09-05 12:02:48 +08:00 |
|
TermiNexus
|
cb8eef3316
|
fix(ViperQtProject): 主题切换同步应用 QPalette(修浅色勾选框缺失/深色框缺失)
|
2026-09-03 11:42:28 +08:00 |
|
TermiNexus
|
ebaa939800
|
revert(ViperQtProject): 复选框回归纯原生渲染(移除 indicator 边框实验)
|
2026-09-03 11:38:09 +08:00 |
|
TermiNexus
|
7bf80350d7
|
feat(ViperQtProject): 原生指示器仅改边框色(不设背景/图标) 尝试保留对勾
|
2026-09-03 11:36:41 +08:00 |
|
TermiNexus
|
921a247fe5
|
feat(ViperQtProject): 对勾图标改 base64 data URI 内嵌(免运行时文件)
|
2026-09-03 11:34:49 +08:00 |
|
TermiNexus
|
07f16ae1a6
|
fix(ViperQtProject): indicator 加透明占位背景使 QSS 接管图标绘制
|
2026-09-03 11:33:31 +08:00 |
|
TermiNexus
|
b12873d513
|
feat(ViperQtProject): 复选框改用灰框/蓝勾 PNG 指示器(QUrl 标准路径)
|
2026-09-03 11:30:54 +08:00 |
|
TermiNexus
|
3d98670b74
|
revert(ViperQtProject): 复选框指示器恢复原生对勾渲染,移除自定义图标
|
2026-09-03 11:28:46 +08:00 |
|
TermiNexus
|
93a0babde6
|
feat(ViperQtProject): 复选框指示器改用对勾图标(灰框/蓝勾 PNG)
|
2026-09-03 11:25:11 +08:00 |
|
TermiNexus
|
503d23fc1a
|
fix(ViperQtProject): 浅色主题复选框黑色边框、补界面集成方式等小节标题重刷
|
2026-09-03 11:19:31 +08:00 |
|
TermiNexus
|
07a3ad10fe
|
feat(ViperQtProject): 右上角新增深色/浅色主题切换
|
2026-09-03 11:16:55 +08:00 |
|
TermiNexus
|
7c85fa8ac0
|
feat(ViperQtProject): 许可协议逐份同意、树形组件占满高度、移除点击复选框展开
|
2026-09-03 11:06:35 +08:00 |
|