TermiNexus
|
735f5d49af
|
chore: 改名同步 TransPyV -> ViperC(源码/配置内的纯替换)
|
2026-10-12 15:06:45 +08:00 |
|
TermiNexus
|
b737bedceb
|
test(lifetime): A2 补“形参位↔实参位映射”双向钉桩(受控用例)
背景:NewLifetimeRetXmodTest 曾漏检 —— ret(borrows=x) 的 pi→实参映射把模块限定函数
`m.f(...)` 误当方法(给 pi=0 加 self 偏移),取到模块名而非实参。
为防同类回归,在正向工程 NewLifetimeRetOkTest 里加两个“错就编译失败”的钉桩:
- (4a) 模块限定函数:retdep.Identity2(fr, hp)(borrows=1)。
实参 0 故意是**本帧**指针、实参 1 是**堆**指针 ⇒ 正确映射取实参 1=堆(可存进堆字段);
若误加 self 偏移 → 取成实参 0(本帧)→ 结果 FRAME → 该行报错。
- (4b) 方法:box.SelfRef(fr)(borrows=self)。
接收者是**堆**对象、用户实参是**本帧**指针 ⇒ 正确映射取接收者=堆(可存进堆字段);
若忘了 self 偏移 → 取成实参 0(本帧)→ 结果 FRAME → 该行报错。
即两个方向任一偏移错都会让本正向工程编译失败(正向工程的“错就报错”比再堆一个负向
工程更能锁死偏移量)。README 的 NewLifetimeRetOkTest 行同步说明。
|
2026-10-10 13:24:27 +08:00 |
|
TermiNexus
|
e8a61473b2
|
test(lifetime): 同步 A2 定义端'声明感知'的措辞
定义端不再'整体移除' return 本帧存储的检查,而是按被调者 @life(ret(...)) 声明
放行/报错(§14.3.2 方案 A)。更新 NewLifetimeRetEscapeTest / NewLifetimeRetOkTest
的注释与 README 描述,去掉'已移除 fail-fast'的旧说法。
|
2026-10-10 09:17:14 +08:00 |
|
TermiNexus
|
66ebd75dec
|
test(lifetime): 补齐 A2 @life(ret(...)) 的正/负向回归工程
新增 3 个工程(均登记进 regression_test.py / SequentialRegressionTest.py /
run_lifetime_negative_tests.py 的 escape/负向清单):
- NewLifetimeRetOkTest(正向):ret(heap)/ret(static)/ret(borrows=none) 的结果
可存进堆对象字段;ret(frame)/ret(borrows=x) 的结果只在本帧内使用;
同模块契约表与跨模块 .vpi(escr=) 两条取用路径都覆盖 → 编译通过 + 退出码 0。
- NewLifetimeRetEscapeTest(负向):同模块 @life(ret(frame)) 的返回值写进堆对象
字段 → LifetimeError(隔离性:FrameRet 摘要为 0,唯一报错源是 ret 契约)。
- NewLifetimeRetXmodTest(负向):跨模块 @life(noescape(x), ret(borrows=x)) 的结果
写进堆对象字段 → LifetimeError(契约经对方 .vpi 的 escr= 传来;noescape 清掉了
实参逃逸路径,判据收敛到 ret 契约)。
README.md 的 escape 测试表与负向清单同步。
|
2026-10-10 09:03:05 +08:00 |
|