TermiNexus
fb365a1707
chore: 改名同步 TransPyV -> ViperC(源码/配置内的纯替换)
2026-10-12 15:06:47 +08:00
TermiNexus
ccd7434c5a
chore: 改名同步 TransPyV -> ViperC(.gitignore/文档/脚本)
2026-10-12 15:02:19 +08:00
TermiNexus
38047cbed1
chore: 引用路径改名 TransPyV -> ViperC
2026-10-12 14:28:40 +08:00
TermiNexus
bca23ffa06
fix(mlirlite): MLIR 间接调用点也过 alias 解析,callee 不再悬空
...
no-op bitcast(含函数指针 bitcast)被 alias 机制省略后,参数用法会改写成别名目标,
但 llvm.call 的 callee 位置原样写出 → 悬空 %N,mlir-opt 报 use of undeclared SSA value /
definition of SSA value has type 'i8' but previously used here with type '!llvm.ptr'。
- _MlirCall:callee 走 _MlirResolve,并用解析后的名字判断直接/间接调用
(别名解析可能把 callee 指到 @符号,那就成了直接调用,不能再写 !llvm.ptr)
2026-10-12 13:18:51 +08:00
TermiNexus
4914311014
fix(mlirlite): 常量表与自动常量名空间(%c<seq>)按需扩容
...
原实现三处都钉死在 MLIR_CONST_CAP(512):常量表满 → MlirFail("constant table overflow")、%c0..%c511 用尽 → MlirFail、_MlirMarkUsedCName 里"更大的后缀不可能冲突"的假设。这些只是资源限制,不该中断编译。
- 新增 _MLIR_ConstCap 活容量与 _MlirConstGrow(池内翻倍扩容常量表 + 已用名表并拷贝旧内容)
- 常量表满、名字空间用尽改为扩容后重试;_MlirMarkUsedCName 记录任意 c<digits> 并先扩容再置位
- _MlirTablesInit 按活容量分配/清零,复用分支保留已扩容容量
2026-10-12 12:40:20 +08:00
TermiNexus
cc7cfdb4af
fix(mlirlite): alias 表按需扩容;工厂改 new memgr;define 位宽/截断配套
...
- mlirlite/__function.vp:_MlirAliasAdd 的 512 条硬上限改为 _MlirAliasGrow 池内翻倍扩容,不再把资源限制当编译错误
- mlirlite 类型工厂改 new memgr(pool) 返回值(消除栈逃逸);__module.vp 补 triple/datalayout
- viperlib.get_digit_count 用 uint(base) 显式声明无符号除法语义(新 AugAssign 符号规则)
- string.vp:strcpy/strcat/strncpy/strncat/memset/memset32/memcpy/memmove 加 @life(noescape(...))
2026-10-12 12:38:15 +08:00
TermiNexus
244179eac7
fix(mlirlite): MLIR 模块头补齐 llvm.target_triple/llvm.data_layout 属性
...
MLIR 路径原先只在模块头写注释、不落 target triple/datalayout;而 mlir-translate
只从 MLIR 模块属性取值,project.vpj 的 llc 也没有 -mtriple 兜底,因此降级出的
LLVM IR 完全没有 target triple。后果是 opt -passes=asan 按非 Windows 目标选择
固定 shadow 偏移 1<<44,与链接的动态 ASan 运行库实际映射的 shadow 基址不一致,
第一个被插桩的访问即踩到未映射的 shadow 页而崩(现场:启动期
__traceback_install_ctor -> Install -> strcpy 读字面量)。
改为输出 module attributes {llvm.target_triple, llvm.data_layout},使 IR 头随
mlir-translate 降级带出(同时让 llc 拿到正确 target,不再依赖宿主默认)。
2026-10-11 21:21:02 +08:00
TermiNexus
6bd5a6e7a4
refactor(mlirlite): 语法迁移(rawptr/novirtual/解引用写入) 并修正 DerefAs 迁移为整对象拷贝
...
REnum 变体构造(*LLVMType.X(...))返回的是栈 alloca 地址,不能跨帧存活;原 c.DerefAs(ptr, LLVMType.X(...)) 是'同帧 load+store 拷贝'。机械迁移成 *ptr = LLVMType.X(...) 会把栈地址写进 pool 缓冲并返回(栈逃逸),导致 SpecTypeBits 读到非变体返回 0(现场: enum 宽度推断失败)。改为 *ptr = *LLVMType.X(...) 恢复同帧整对象拷贝;*result_ty_ptr = *result_ty 同理
2026-10-11 12:47:06 +08:00
TermiNexus
00ddb296ac
fix(narrow): 字节缓冲写 int/算术结果改用 char(...)(sys/_fakeduck)
...
sys.vp cmd 解析 ch:int 写 buf;_fakeduck ch±32 算术提升为 int。目标均为 bytes(i8),RHS 为 32 位,触发 32->8 隐式窄化。其余 for ch in <str> 形态 ch 是 char,同宽不报错
2026-10-11 11:58:57 +08:00
TermiNexus
0f37f2fde9
revert(narrow): 撤销 define 位掩码的显式强转(编译器已按值推断位宽)
...
TPC 已修复 CDefine 常量位宽推断(无符号 32 位高半区不再误判 i64),X | DEFINE 现为 i32;fileio access |= GENERIC_*、tarfile px.mask |= PAX_*、ast/parser node.flags |= FLAG_IS_* 无需再显式强转,恢复原写法
2026-10-11 11:46:38 +08:00
TermiNexus
7e6ed0db2e
fix(narrow): 32 位字段/变量 |= 64 位 CDefine 改用显式窄化转换
...
CDefine 常量按 64 位处理,X | DEFINE 的结果即 64 位;赋回 32 位字段触发隐式窄化(单个常量赋值有豁免,但 OR 表达式没有)。fileio access |= GENERIC_* 用 ULONG(...);tarfile px.mask |= PAX_*、ast/parser node.flags |= FLAG_IS_* 用 int(...)
2026-10-11 11:42:25 +08:00
TermiNexus
e308e6e734
fix(narrow): viperlib vsnprintf 指数符号写字节改用 char(...) 包裹三元
...
ptr[0] = <int字面量> 属常量豁免;A if c else B 是 int 三元表达式,写入 bytes 元素触发窄化。显式 char(...) 包裹 e/E 与 +/-(各 2 处,共 4 处)
2026-10-11 11:38:14 +08:00
TermiNexus
9d5028bc61
fix(narrow): byte 缓冲写 32 位掩码结果改用 uint8(...)
...
base64 解码输出、zipfile zf_w16le/zf_win32le、zlib adler/gzip 尾写:目标为 bytes/uint8*/BYTE*(8 位),RHS 为 32 位表达式,触发隐式窄化;统一加 uint8(...)
2026-10-11 11:06:02 +08:00
TermiNexus
3dd5bca28e
fix(narrow): hashlib 摘要写字节改用 uint8(...)
...
sha256/sha1/md5 的 digest 阶段把 32/64 位掩码结果写入 bytes 元素(i8),触发隐式窄化;统一加 uint8(...)(与 __sha512 一致)
2026-10-11 11:05:05 +08:00
TermiNexus
19e4ef26a2
refactor(fileio): File/FileW.write 长度形参 ULONG 改为 sizet
...
与 read_all 保持一致:长度来源多为 sizet/strlen,形参用 sizet 可避免 64->32 隐式窄化;内部对 count>0xFFFFFFFF 返回 ERR,仅在 WriteFile 处显式 ULONG(count)
2026-10-10 22:15:47 +08:00
TermiNexus
705de51459
fix(includes): 消除隐式窄化(string.strlen → int)
...
规则收紧后,6 处 string.strlen()(sizet/64 位)隐式落进 int 会报隐式窄化:argparse.vp:204/332、ast/parser.vp:3202/3203/3255/3256 改为显式 int(...);另 gzip.vp:62 的 read_all 容量去掉多余 ULONG(...)(形参已是 sizet)。
2026-10-10 22:09:59 +08:00
TermiNexus
aa88e46b5d
将 w32 库改为 win32
2026-10-10 21:58:27 +08:00
TermiNexus
1c9447dc82
refactor(fileio): read_all 容量形参 ULONG → sizet(File/FileW)
...
与 f.size()(LONGLONG)同宽,消除'64 位尺寸进 32 位形参'的隐式窄化诱因;内部 min(file_size, cap-1) 全程用 sizet,只在交给 ReadFile(ULONG) 处显式窄化,且 cap-1 > 4GiB-1 直接返回失败(单次读上限 DWORD),不再静默回绕。
2026-10-10 21:57:39 +08:00
TermiNexus
466c777f34
feat(mlirlite): 常量渲染失败时报出 (类型, 值),便于定位 unsupported constant operand form
...
MlirFail 无栈回溯,原报文只有 'unsupported constant operand form',无法判断是哪种非常量形态(指针/聚合类型字面量或常量表达式)。新增 _MlirConstFail:把 MLIR 类型文本与常量文本一并打印。
2026-10-10 20:07:03 +08:00
TermiNexus
0d677bc6f8
将 w32 库进行完整的清理
2026-10-10 18:03:44 +08:00
TermiNexus
7f32042c21
feat(parser): new 的类型改按注解规则解析,认 [N]T 前导数组声明符与 T* 后缀
2026-10-09 18:44:42 +08:00
TermiNexus
17b1d6bb60
feat(tarfile): 纳入 tar 归档读写模块
...
- 读:ustar 头(含 prefix 字段)、GNU L/K 长名与长链接头、PAX x/g 扩展头(path/linkpath/size/mtime/uid/gid/uname/gname)、GNU base-256 数值字段;归档整体读入内存,.tar.gz 先解压
- 写:ustar 头;路径或链接目标超长时补一条 PAX x 记录
- 用法:tarfile.TarFile(path, mode);tarfile.error() 携带失败原因
2026-10-09 15:01:02 +08:00
TermiNexus
be62587521
feat(parser): new 接受无实参括号的类型原子;回收 '*' 伪错时同步回退错误位置
...
- _parse_new_expr:类型原子(Name/Attribute/Subscript)与 T(args) 都接受,New.args 可为 None;非类型原子仍在原地 fail-fast(不让错误漂到 class 未注册那种远处)
- _parse_type_ann 的 ptr_level 回收只还了 error_count,没还 _g_parse_err_line/_col/_msg;而 _record_parse_err 只记第一条,于是 : char*(行尾 '*' 被当乘法、右操作数缺失)留下的过期位置会顶掉后面真正的语法错误(现场:EscapeTest 第 13 行 new stack char 被报成第 6 行)
- 回退判据用记录是否在本次解析中改变:快照已非 0(更早的真错误)时回退是空操作
2026-10-09 14:55:43 +08:00
TermiNexus
bfc773787d
feat(lifetime): stdlib.free 标注 @life(willFree(p)),声明实参在调用后失效
...
P2 标注驱动:编译器据此把调用点对应实参变量标为已失效,其后读/传/再 free 报 LifetimeError。
2026-10-08 21:28:55 +08:00
TermiNexus
770e389360
fix(argparse): 字符串参数的 NULL 默认值不再写入
...
NULL 默认值写进结果会让键存在但值为 NULL:has() 误报参数已给出,函数末尾的 required 检查对字符串参数永远不触发。改为 default_str 为 None 时跳过写入。
2026-10-08 20:35:17 +08:00
TermiNexus
788c52b749
fix(tomllib): 单引号处误用双引号字符串,改为字符字面量
...
char 形参与 char 比较位置写成「双引号包单引号」(实为 i8* 字符串):形参处报 CastError(implicit pointer-to-integer),比较处被 C 哨兵规则静默 ptrtoint 成恒假(TOML 单引号字面量字符串根本解析不出来)。7 处统一改成字符字面量,与 lexer.vp 同款写法一致。
2026-10-08 20:03:34 +08:00
TermiNexus
76deaa27bf
feat(mlirlite): 新增 IRBuilder.build_store_at_entry,支持在入口块写入以建立支配关系
...
M3 owned slife 的所有权影子标志必须在函数入口块置 0:赋值语句可能落在 if/while 里而运行期不执行,那种路径上出口 free 的是未初始化栈垃圾。实现照搬 build_alloca_at_entry:文本插到入口终止符之前,保证支配所有路径。
2026-10-08 20:03:33 +08:00
TermiNexus
77c8d4f9e4
chore: 纳入 ctraits.vpnci 与 tomllib/(与已删除的 ctraits.vpi 配套)
2026-10-08 17:50:26 +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
e3cdb190dc
fix(os): _posix._stat 改为 _mbuddy 堆分配,消除返回栈地址的悬垂
...
_stat 原在栈上构造 posix.Stat 并返回其地址,函数返回后指针悬垂(与其 docstring 声明的 '_mbuddy 分配、调用方 free' 不一致)。改为按契约堆分配,失败时 free。
2026-10-08 12:10:30 +08:00
TermiNexus
05b2b7162d
feat(stdarg): arg 声明补返回类型;viperlib 改用 arg(T) 读转发 va_list
...
stdarg.vp 的 arg 原本缺返回类型(与 va_arg 不对称,存根拿不到可用返回类型),补 -> t.CPtr 并注明它是编译器拦截的糖;viperlib 的 vsnprintf 第 4 个形参 ap 改名 args(vprintf 式转发的 va_list 是「按名 args 解析」的约定),内部 24 处 va_arg(ap, ...) / va_arg(ap) 全部改为 arg(...) / arg(),import 收敛为 from stdarg import arg。
2026-10-07 20:15:25 +08:00
TermiNexus
344ea5c3cd
docs(ctraits): 注解与示例改用 cif 语句,去掉已删除的 c.CIf
...
ctraits.vpi 的模块/函数 docstring 与示例仍写 c.CIf(...);条件编译已改为原生 cif/celif/celse,示例同步为 cif ctraits.isptr(x):。
2026-10-07 19:09:54 +08:00
TermiNexus
18136d898f
feat(lang): ast 解析器支持 cif 三件套与值引用注解,通用槽改 &temp void
...
ast/parser.vp:新增 cif/celif/celse 语句解析(必要时软关键字判据)与 &T / &temp T 参数注解(内部标记 t.CRef / t.CTempRef);_variant.vp / hashtable.vp / _dict.vp 的通用存储槽形参由裸指针改为 &temp void(即 i8**),避免 rawptr 的 ABI 歧义;testcheck.vp 的 check 调整为 check(cond, ok_msg, fail_msg),条件成立时静默。
2026-10-07 19:02:48 +08:00
TermiNexus
92c2c324cb
fix(mlir): 数组包裹的具名结构体回查登记表以补回 packed
...
build 期的 TypePrint 在具名结构体登记表发布前渲染类型文本,内嵌的具名结构体体
没有 packed;打印期 MlirTypeText 只对扁平 !llvm.struct<" 前缀回查登记表,
!llvm.array< 整段直通,于是同一个 identified type 在模块内出现 packed 与非 packed
两种体,mlir-opt 报 identified type already used with a different body
(现场 Elf64_Phdr:数组元素体无 packed、llvm.load 结果体有 packed,两处字段表
逐字符比对完全相同,只差 packed 关键字)。
新增 _MlirArrayMlirText,只重新转换数组元素类型,使其与其余位置一样回查登记表;
抽出共用的 _MlirArrayXPos / _MlirArrayBody,_MlirArrayText 改为委托(行为不变)。
2026-10-07 15:41:52 +08:00
TermiNexus
a8403ee550
chore(detsite): MLIR 类型文本与区域渲染路径补插桩
...
--detection 的 [FREEFRAME] 取证原先报 site=?:已注册的 17 个 DETSITE 标签全在
结构体/表类分配上,类型文本路径一个都没插。本次新增 34 个标签(18..51):
- mlirlite:_type_str 类型文本、build_call 参数/函数类型文本、常量值类型文本、
区域渲染 scratch(tb/la/pr/r1/r2/nm/vl/tyb/nb/ps)
- 与之配套的 pool.alloc 全部改用 alloc_tagged,detection==0 时无额外开销。
据此定位到 [FREEFRAME] 写者:TranslatorGenMixin._stg_field_zero_text 的 160B 缓冲。
2026-10-07 15:16:40 +08:00
TermiNexus
825cd2b027
fix(mlir): 全局初始化器区域缓冲溢出不再误报为模块缓冲溢出
...
- GV_REGION_BUF_SIZE 由 32KB 提升到 4MB,并改用 malloc 分配(原走模块子池,容量受限)
- 新增 _MlirGvOutTrunc 与 _append_gv:区域缓冲溢出独立上报,不再置位模块截断标志
- MlirGvResetScratch 负责释放这两块 malloc 缓冲
复现:font 这类嵌套聚合全局初始化器超过 23 行(368 元素)即误报
module text exceeds output buffer,实际模块缓冲 8MB 远未写满。
2026-10-07 14:24:06 +08:00
TermiNexus
825919b202
fix(compiler): 修复 ViperApps 暴露的 3 处缺陷(vqt6 返回注解 / MLIR 常量命名 / scratch 复用)
...
1) vqt6/__init__.vp:6 处类实例返回注解由引号前向引用(QAction/QMenu/QTreeWidgetItem)改为 T*——引号前向引用解析为结构体值类型,而实例是指针,致 QAction Foo*→Foo CastError(4 个 Qt 系工程失败)。
2) mlirlite/__function.vp:常量自动 SSA 名 %cN 避让用户同名标识符(形参 c1/c2 与常量 %c1 冲突 => mlir-opt redefinition of SSA value,致 ViperMNIST 失败)。
3) mlirlite/__function.vp + __module.vp:新增 MlirTablesReset,使打印窗口内的表/scratch 跨函数复用(原每函数分配约 153KiB 且窗口内不回收 => 1GiB 主池被榨干,致 ViperFLProject parse scratch allocation failed)。
2026-10-07 08:48:03 +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
14ba84db8e
chore(syntax): R1 typedef 右值改用 T*(21 处)
...
编译器已支持 typedef 右值类型位(305242aa),故解除 R1 的 typedef 右值例外:stdint.vp 19 处(INTPTR/BYTEPTR/CHARPTR/WCHARPTR/*PTR 等)、stdarg.vp 1 处(va_list)改为 T*,AST 与 T | t.CPtr 逐字段同形。
2026-10-05 20:58:38 +08:00
TermiNexus
af59a752cd
chore(syntax): R16 完整 C 式 const/volatile 迁移
...
把剩余 t.CConst | X 全部改写为前缀描述符 const X(AST 逐字段同形):
- t.CConst | VOIDPTR -> const VOIDPTR(win32console/win32file/win32memory 共 7 处);
- char | t.CConst* -> const str(winsock2 x2);t.CConst | BYTEPTR -> const BYTEPTR(zinflate);
- typedef 右值:LPCSTR = const str、LPCWSTR = const uint16*(stdint/win32base);
- parser.vp:typedef 右值按类型位解析(_IsCTypedefAnnotation),typedef X = T 语法糖同一条。
2026-10-05 20:36:35 +08:00
TermiNexus
03450a71ff
fix(mlirlite): 局部窥孔优化每个函数体只执行一次
...
PrintModule 会按 STUB/TEXT/FULL 三次 dump 同一模块,而 FunctionPrint 每次都跑 _peephole_opt;T2(entry-slot store→load 转发)不是幂等变换,第二遍会误删仍有 load 指向的 entry alloca,留下悬空 SSA 名(mlir-opt: op using value defined outside the region)。给 Function 加 PeepDone 守卫,优化只作用于 builder 产出的原始文本。
2026-10-05 19:58:39 +08:00
TermiNexus
c4170871c2
refactor: 去 t.CPtr(&a) 冗余包装(R15)
...
规范第 15 行:&a 已返回 T*,无需再 t.CPtr 强转。仅改单参且操作数为普通变量名的形态(t.CPtr(v) / t.CPtr(0) 等非取地址形态保留)。includes 5 文件 / 23 行:w32/fileio.vp、os/_posix.vp、os/_win32.vp、shutil.vp、subprocess.vp。验证:TPC 自举三重重编 SUCCESS;全量 77 项顺序回归通过。
2026-10-05 17:55:43 +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
3e1ed0992b
fix(ast): 修正实参位前导 * 的优先级,*p + n 解析为 (*p) + n
...
规范 rule 5 允许把 c.Deref(x) 写作 *x,但语法分析器在实参位置对前导 * 取整条表达式作为操作数:*buf + *length 被解析成 *(buf + *length),*length + data_len 成 *(length + data_len),多解引用一层。表现为 zlib decompressobj 全部失效(decompress 返回 0 字节、eof 恒 0、unused_data 取不到),requests/download 同类语句亦受影响。
改为:实参位 *expr 只按 _parse_factor 取紧绑定操作数,经新增 Parser.starred_seed 挂起,由 _parse_factor 顶部接手,再交由上层续接二元运算。*p[0](即 *(p[0]))、*p**2(即 *(p**2))等结合性保持原 C/Python 语义。
验证:全量 77/77 顺序回归一次通过;ZlibTest 内部断言由 74 passed / 6 failed 变为 79 passed / 0 failed。
2026-10-05 15:04:01 +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
aecdf27132
feat(mlirlite): 新增调用点记录 API 供 --traceback 旁文件(关闭时零开销)
...
新增 DebugSetEnabled / DebugNoteFunc / DebugClearFunc / DebugNoteLine /
DebugResetFunc / DebugTakeText 与内部 _DebugNoteCall;build_call 在启用时把
(调用方, 被调方, 当前源行) 追加到可增长文本缓冲,供每模块 DebugTakeText 取出
写 .vpcall。默认(未开 --traceback)不启用,输出不变。
2026-10-04 22:38:07 +08:00