From ce60df0212f3e3d375919e0e3cd6bd9c1d3cc738 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Sat, 15 Aug 2026 12:13:47 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E5=8E=8B=E5=B8=A7=E7=AA=97=E5=8F=A3?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=88=A4=E5=88=AB=E5=8A=9B=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=EF=BC=9A=E5=88=A0=E7=9C=9F=E7=A9=BA=20overlap=20=E9=94=9A?= =?UTF-8?q?=E7=82=B9=E8=A1=A5=20NEW+arguments=20=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原两个嵌套 callee overlap 集成测试在 identity 精确别名几何下(实参区== 形参区,first==param_base 写即自赋值)不触发重叠,缺陷代码上亦绿(真空)。 真实重叠几何无法经编译器自然构造(实参连续区与 identity 形参段系统性 不相交,已穷举验证),重叠判别由 vm 单元测试直接构造承担。删除两例, 改为补 NEW 路径 + 多实参 + arguments 对象集成覆盖(构造路径读 arguments 此前为盲区)。try 分支 catch 存活测试已实证在含 try 函数未跳过窗口编码 时真实 Red,保留。 --- .../oxide_vm/tests/call_frame_window_tests.rs | 32 +++++++------------ 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/crates/oxide_vm/tests/call_frame_window_tests.rs b/crates/oxide_vm/tests/call_frame_window_tests.rs index 2da601fe..78953a21 100644 --- a/crates/oxide_vm/tests/call_frame_window_tests.rs +++ b/crates/oxide_vm/tests/call_frame_window_tests.rs @@ -258,27 +258,19 @@ fn call_window_try_branch_call_finally_preserves_live_vars() { } #[test] -fn call_window_nested_callee_param_overlap_arguments() { - // 回归锚点:嵌套 callee 调用路径(含 arguments 实参区)在压帧拷贝顺序调整后 - // 值保持正确。真 bug(实参区与形参写入区重叠串值)由 vm 单元测试 - // push_bytecode_frame_param_overlap_reads_spill_first 直接构造验证。 - let src = "function outer(){ \ - var x = 5; \ - function inner(a, b){ return a*10 + b; } \ - var r = inner(x, 7); \ - return r; } \ - outer()"; - assert_eq!(eval(src), "57"); +fn call_window_new_expression_with_arguments() { + // NEW 路径 + 多实参 + arguments 对象:压帧 RegRange 实参进 spill 实参区、 + // arguments 对象取值正确。该组合(构造路径读 arguments)此前无覆盖。 + let src = "function P(a,b,c,d){ this.s = a+b+c+d + arguments[3]; } \ + var p = new P(1,2,3,4); p.s"; + assert_eq!(eval(src), "14"); } #[test] -fn call_window_nested_callee_param_overlap_with_arguments_object() { - // 同回归锚点,加 arguments 对象:spill 实参区构建的 arguments 对象值正确。 - let src = "function outer(){ \ - var x = 5; \ - function inner(a, b){ return a*10 + b + arguments[1]; } \ - var r = inner(x, 7); \ - return r; } \ - outer()"; - assert_eq!(eval(src), "64"); +fn call_window_new_expression_many_args_arguments() { + // NEW 宽实参窗口(8 实参)+ arguments:spill 实参区构建的 arguments 对象 + // 逐槽取值正确,形参与 arguments 不因窗口截断/重叠错值。 + let src = "function P(a,b,c,d,e,f,g,h){ this.s = a+b+c+d+e+f+g+h + arguments[7]; } \ + var p = new P(1,2,3,4,5,6,7,8); p.s"; + assert_eq!(eval(src), "44"); }