TermiNexus
|
7f82bec5d1
|
chore: 全仓同步 TPV→VPC 注释改名与 range(int(...)) 显式收窄适配
|
2026-10-12 20:59:35 +08:00 |
|
TermiNexus
|
aa88e46b5d
|
将 w32 库改为 win32
|
2026-10-10 21:58:27 +08:00 |
|
TermiNexus
|
e25e8958f0
|
WIP 快照:includes 现有改动(含 M2.4 new 描述符的语法支持)
语法侧(M2.4):ast/base.vp 枚举尾部追加 ASTKind.New;ast/exprs.vp 新增 NEW_SRC_*/NEW_LIFE_* 与 class New;ast/parser.vp 新增 _is_new_expr/_parse_new_expr(new 为软关键字,不进 Keyword 表,new=1/new.x/new(1) 仍是标识符);ast/__init__.vp 再导出 New 与常量。
其余为既有 WIP 改动一并快照,保持基线一致(39 文件,+312/-237)。
未纳入:ctraits.vpi(已删除)、ctraits.vpnci、tomllib/(均未跟踪)。
|
2026-10-08 17:45:31 +08:00 |
|
TermiNexus
|
587d989dec
|
chore(messages): includes 运行时中文字符串英文化
把 includes 下 11 个文件(memhub 94、mlirlite/__function 71、ast/parser 54、mlirlite/__module 41、mlirlite/__types 28、ast/lexer 8、ast/tokens 4、sys 2、traceback 1、mlirlite/__builder 1、requests/https 1)的运行时诊断/报错字符串(OOM/MEM/FREEFRAME/MLIR 报错/AST 报错/栈转储横幅等)由中文改为英文。
口径:只改字符串字面量内部文字,行数零变化(+307/-307);printf 格式符与转义序列的多重集合逐一校验不变(_strcheck 异常 0)。验证:三重重编 SUCCESS(184.28s)+ 全量 77/77 顺序回归通过 + VET 编译 SUCCESS / --search-paths 7 条 exit 0。
|
2026-10-06 12:23:45 +08:00 |
|
TermiNexus
|
c0d56b127d
|
chore(comments): includes 头注释英文化(R11 收尾)
把 includes 下 64 个 .vp 的文件头注释(含 traceback.vp 第 13-427 行的整块文件级说明)以及 2 处漏网的正文中文注释(ast/lexer.vp、json/__writer.vp)与 1 处中文 docstring(memhub.vp)逐行译为英文;同步把 fltk/gen_ffi.py 的生成模板与其自身注释英文化,使重新生成仍为英文。
只改注释/文档串文字:行数与代码逐字节不变(骨架比对 140 文件漂移 0),运行时中文字符串字面量 305 处保持原样。验证:三重重编 SUCCESS(170.21s)+ 全量 77/77 顺序回归通过 + VET 编译 SUCCESS / --search-paths 7 条 exit 0。
|
2026-10-06 09:42:25 +08:00 |
|
TermiNexus
|
0055ab7ea7
|
refactor: rawptr[T] -> T* 与 t.CConst 前缀迁移(R14/R16)
R14:rawptr[X] -> X*(41 文件 / 2037 行改动),X 含模块限定名与嵌套下标(rawptr[GSList[NameEntry]] -> GSList[NameEntry]*)。保留 6 处 rawptr[t.CPtr](规范例外:存纯裸指针);# 注释与字符串里的 rawptr[...] 属元语法描述,未动。 R16(保守子集):t.CConst | str/bytes -> const str/bytes,t.CConst | char | t.CPtr -> const str;typedef 右值位置豁免(const str 在该处无法注册,与 R1 同源)。 验证:TPC 自举三重重编 SUCCESS;TransPyV.exe 全量 77/77 顺序回归通过。
|
2026-10-05 17:38:21 +08:00 |
|
TermiNexus
|
0ef4ba9634
|
refactor(includes): R12 收尾——再改 48 处可确定安全的计数 while 循环
在 R12 保守判定基础上放宽两处(仍保证语义等价):1) 允许 <= 条件,改写为 range(expr + 1)(while 结束后计数器为 n+1、for range 后为 n,已被「循环后不引用计数器」守卫覆盖);2) 初始化行只要求是「同块内最近一次对计数器的写入」,不再要求紧贴 while(中间不得读写该计数器)。
其余守卫不变:界表达式必须裸(无 and/or/比较)、体内无 continue、体内仅末尾一次 += 1、无嵌套重绑定、无 while-else、循环后同一函数内不再引用计数器。TransPyV 侧同步 12 处。
验证:bootstrap 三重重编 SUCCESS(无 vast_c 解析回退);全量 77/77 顺序回归通过。
|
2026-10-05 16:36:36 +08:00 |
|
TermiNexus
|
e71daeea0e
|
docs(includes): R11 注释英文化——75 个文件的中文注释改写为英文短注释
按规范「注释只讲解作用,不掺杂历史原因,尽量英文」:把 includes 下 75 个 .vp 的中文 # 注释与三引号 docstring 改写为英文,每个注释块压到 2 行以内。
保留要点:作用、约束、危险警告(不得/必须/注意)、ABI 与类型约定(如 BYTEPTR | t.CPtr = i8** 的跨模块坍缩坑)、位宽/长度约定、fail-fast 要求、内存与句柄所有权。
未动:文件头注释(规范豁免,仍是中文)、运行时中文字符串常量(printf / fatal_error / MlirFail 等用户可见消息,属代码字面量)。
验证:独立脚本比对 HEAD 与工作区的代码骨架(剥离 # 注释与三引号 docstring 后的非空行)——75 个文件逐字节一致;行尾 CRLF/LF 未被改动;全文剩余中文仅 547 行头注释、0 条行尾注释。bootstrap 三重重编 SUCCESS;全量 77/77 顺序回归通过。
|
2026-10-05 16:18:44 +08:00 |
|
TermiNexus
|
27121f56a7
|
refactor(includes): R12 下标 while 循环改 for range,R13 c.Set 迁移为赋值
R12(wiki/新规范 L27-39):把「i: int = 0 与 while i < N: … i += 1」形式的下标循环改写为「for i in range(N):」。保守判定:仅当条件为裸 NAME < EXPR、循环体无 continue、NAME 在体内无其它赋值、无嵌套重绑定、循环后同层不再引用 NAME 时才改写。共 269 处 / 48 文件。
R13:c.Set 是正在退化的路径——c.Set(*p, v) 期望写作 *p = v,c.Set(a, b) 等于 a = b。本次把 includes 内 45 处 c.Set 全部迁移为赋值,includes 已无 c.Set 调用。
验证:bootstrap 三重重编 SUCCESS(无 vast_c 解析回退);全量 77/77 顺序回归通过;ZlibTest 内部断言 79 passed / 0 failed。
|
2026-10-05 15:33:52 +08:00 |
|
TermiNexus
|
e80284a6d5
|
refactor: 全量迁移 includes 到新规范语法
按根目录 新规范 迁移 R1/R2/R3/R4/R6/R7/R8/R9:指针 T* 后缀、内建类型短别名、c.Addr/c.Deref 单目化、c.Asm 改 __asm__、t.CDefine 改 define 软关键字、t.CEnum 改 enum。R4 对内建 cast 多参实参保留 c.Deref 原写法(单目化会致 TPC 类型退化)。验证:includes 52/52 编译通过,TransPyV 自举产物顺序回归 77/77 全通过。
|
2026-10-05 09:04:46 +08:00 |
|
TermiNexus
|
677dd13320
|
fix(traceback): 撤掉 caller_ret([RBP+8] 在 .vp 帧里不是返回地址)
实测 _TypePrintDepth:RBP = rsp+0x70(locals base),入参返回地址在 RBP+0x38;[RBP+8] 只是无关局部量(值落在 .data 区),打印它会误导。调用者一律以 .stackmap 走栈结果为准
文档第十四节 C 同步;regs/av_addr 两条保留
|
2026-09-28 12:21:26 +08:00 |
|
TermiNexus
|
1379b8814c
|
feat(traceback): 崩溃转储再补 caller_ret(出错帧 [RBP+8]),可独立反汇编核对走栈首帧真伪
不依赖 .stackmap 的原始返回地址:用来判定 dbghelp 给出的第一个调用者帧是真帧还是 unwind 假帧(本轮 map 与反汇编对不上时唯一能定案的数据);读不到就不打该行,不留假 0
文档第十四节 C 同步
|
2026-09-28 12:14:00 +08:00 |
|
TermiNexus
|
1fabb46e8c
|
feat(traceback): 崩溃转储补出错帧实参寄存器与 AV 数据地址(一次拿全现场)
Trigger 行新增 av_kind/av_addr(EXCEPTION_RECORD 的 ExceptionInformation[0/1]:0=读 1=写 8=执行、数据地址;仅访问违规有效,但崩溃现场就该给原始数字)
新增 regs 行:rcx/rdx/r8/r9/r12(Win64 前 4 个整型实参 + 出错帧解引用用的寄存器),用于区分「实参传错」与「实参对、指针所指内容错」,避免多一轮重编
文档第十四节 C 同步输出形状与这两行的用途
|
2026-09-28 12:13:13 +08:00 |
|
TermiNexus
|
7651da8ac9
|
feat(traceback): 崩溃也要有栈——挂 SetUnhandledExceptionFilter 做未处理异常转储
动机:实测同一处崩溃开 ASan=0x80000003(int3)、关 ASan=0xC0000005(AV),两者都没有任何堆栈(ASan 过了报告窗口就不再输出)
Install 追加注册 SetUnhandledExceptionFilter(CrashHandler)(与 SetConsoleCtrlHandler 并列,均在 _State.Installed=1 之前挂好);CrashHandler/DumpCrashThread 在出错线程上转储:EXCEPTION_POINTERS/EXCEPTION_RECORD 一律经 ReadProcessMemory 读取,OS 的 CONTEXT 先拷进 ContextBuf 再走栈(StackWalk64 会回写它遍历的记录,直接传 OS 的记录会改坏异常上下文)
恒返回 EXCEPTION_CONTINUE_SEARCH:本路径只补栈,绝不吞异常(退出码/WER/ASan 报告行为原样保留);走栈 dbghelp 优先(崩溃点通常在系统 DLL 里)→ RBP 链 → 栈扫描,与 Ctrl+C 转储共用同一把重入锁
抽出 DbgHelpUsable() 与 PrintFrames() 给两条路径共用(DumpMainThread 同步改用,行为不变)
win32process.vp 新增 SetUnhandledExceptionFilter 声明 + EXCEPTION_POINTERS/EXCEPTION_RECORD 布局注释;traceback.vp 新增第十四节,第一/二/六节文档同步
|
2026-09-28 12:03:15 +08:00 |
|
TermiNexus
|
bdf2463dfc
|
fix(traceback): DbgHelp 与 ASan 是状态共享而非互斥,改为探针裁决后启用 StackWalk64
Install:SymInitialize 被拒时(DbgHelp 已被 ASan 运行时占用,进程级状态按句柄唯一)改为调用 SymRefreshModuleList 刷新共享模块表,再由 SymGetModuleBase64(主模块) 探针裁决 SymReady;探针为 0 则回退 0 并打印原因,不静默 0 帧
DumpMainThread:删除 AsanPresent 强制 DbgUsable=0 的一票否决,降级原因串去掉 dbghelp_conflict_with_asan;ASan 探测只保留在诊断行
win32dbghelp.vp:新增 SymRefreshModuleList 声明与用途注释
实测依据:Ctrl+C 现场 RBP=0x0、RIP 在系统 DLL(阻断原因 rbp_zero,不是 ret_out_of_module),帧指针开关救不了这条链;.vp 目标文件已含 .pdata/.xdata,StackWalk64 可穿过系统帧还原真实 .vp 调用链;文档第十一节 B、第十二节 C 同步
|
2026-09-28 00:23:47 +08:00 |
|
TermiNexus
|
ba50433cd5
|
fix(traceback): 补回 RbpFrames 声明(45d9b55 只带上了门槛改动,编译报未定义名称)
dbghelp 门槛已改写为 if RbpFrames <= 1,但 RbpFrames: int = Frames 的声明未随该提交落盘 -> TPV 重编时 NameError: 未定义名称 RbpFrames(traceback.vp:1635)
|
2026-09-27 19:13:32 +08:00 |
|
TermiNexus
|
45d9b55931
|
fix(traceback): 栈扫描挤掉 dbghelp 反走栈 + 系统 RIP 被误查表成假帧
1) dbghelp 门槛 Frames<=1 误用扫描后的帧数:RBP=0 时链只出 RIP 帧、扫描再补 1 帧 -> Frames=2 使 StackWalk64 被静默跳过(唯一能穿过无帧指针的 ntdll/kernel32 帧的路径)。改用 RbpFrames(RBP 链自身产出)作门槛
2) EmitFrame 只判 Addr<Base:线程阻塞在系统 DLL 时 RIP 远在 Base 之上却仍去查表,floor 搜索返回最后一条记录 -> 打印出看似合理的 File/line/函数名(实证假的 line 13)。补上界 Addr>=Base+TRACEBACK_MODULE_MAX(与 WalkRbpChain/ScanStack 同一模块边界),归为 external
3) dbghelp 接管会清空既有帧:改为保存全部已收帧(栈上局部数组),dbghelp 产出为 0 时全量恢复,避免门槛放宽后反而丢帧
|
2026-09-27 19:04:53 +08:00 |
|
TermiNexus
|
fc56f10935
|
fix(traceback): _DumpLock 标记 export 用裸名(@_DumpLock)
AtomicTryEnterDump 的内联汇编把 &_DumpLock 作 AsmInp 内存操作数 [{...}],SHA1 前缀名 45098e5ade6cd73d._DumpLock 以数字开头,LLVM MC 无法在 [...] 内解析(llc Unexpected offset)
裸名导出后符号为 @_DumpLock:_asm_name_is_mangled 判定通过,且与 gdt/gp/idt/_sched_ptr 等既有 asm 互操作全局同口径
依赖 includes f854f7e 新增的 export 变量语法糖(TPC 侧 6fce79d5 同步)
|
2026-09-27 18:31:01 +08:00 |
|
TermiNexus
|
db3be6968f
|
fix(memhub,gzip): 内存池 OOM 归属画像与 free 拒绝现场;gzip 注解 *= 词法粘连
memhub: alloc 失败打印归属 site/ctx 与存活块 order 分布(新增 dump_alive_orders);free 被 _is_valid_ptr 拒绝时首次打印现场;接通 big_alloc_count
gzip: ub: uchar*= buf 补空格(*= 被词法合并为单 OP,注解止于 uchar)
新增 traceback 模块;删除 dbgstack.vp;其余模块随新语法与尺寸口径同步
|
2026-09-26 19:27:24 +08:00 |
|