test: 压帧窗口测试判别力修正:删真空 overlap 锚点补 NEW+arguments 覆盖
原两个嵌套 callee overlap 集成测试在 identity 精确别名几何下(实参区== 形参区,first==param_base 写即自赋值)不触发重叠,缺陷代码上亦绿(真空)。 真实重叠几何无法经编译器自然构造(实参连续区与 identity 形参段系统性 不相交,已穷举验证),重叠判别由 vm 单元测试直接构造承担。删除两例, 改为补 NEW 路径 + 多实参 + arguments 对象集成覆盖(构造路径读 arguments 此前为盲区)。try 分支 catch 存活测试已实证在含 try 函数未跳过窗口编码 时真实 Red,保留。
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user