From 77a11f5f5de254e27d488be574416b0b39fef6f5 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Sun, 18 Oct 2026 03:26:36 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A1=A5=E9=BD=90=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E5=88=86=E6=94=AF=20IC=20=E6=89=A9=E5=B1=95=E5=AD=97=E6=B6=88?= =?UTF-8?q?=E8=B4=B9=E4=B8=8E=20spread=20=E8=B0=83=E7=94=A8=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 42 ++++++++++++------------ Cargo.toml | 2 +- crates/oxide_vm/src/dispatch/call.rs | 14 ++++++++ crates/oxide_vm/src/dispatch/property.rs | 1 + 4 files changed, 37 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ee7eea6c..69ba4416 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1160,7 +1160,7 @@ dependencies = [ [[package]] name = "oxide_builtins" -version = "0.20.7" +version = "0.20.8" dependencies = [ "chrono", "fast-float", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "oxide_bytecode" -version = "0.20.7" +version = "0.20.8" dependencies = [ "num-bigint", "oxide_log", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "oxide_cfg" -version = "0.20.7" +version = "0.20.8" dependencies = [ "oxide_bytecode", "oxide_emit", @@ -1204,7 +1204,7 @@ dependencies = [ [[package]] name = "oxide_cli" -version = "0.20.7" +version = "0.20.8" dependencies = [ "ansi_term", "bumpalo", @@ -1228,7 +1228,7 @@ dependencies = [ [[package]] name = "oxide_code_cache" -version = "0.20.7" +version = "0.20.8" dependencies = [ "lru", "oxide_bytecode", @@ -1237,7 +1237,7 @@ dependencies = [ [[package]] name = "oxide_compiler" -version = "0.20.7" +version = "0.20.8" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1258,7 +1258,7 @@ dependencies = [ [[package]] name = "oxide_dce" -version = "0.20.7" +version = "0.20.8" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1272,7 +1272,7 @@ dependencies = [ [[package]] name = "oxide_emit" -version = "0.20.7" +version = "0.20.8" dependencies = [ "num-bigint", "oxc_allocator", @@ -1288,7 +1288,7 @@ dependencies = [ [[package]] name = "oxide_engine" -version = "0.20.7" +version = "0.20.8" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1300,7 +1300,7 @@ dependencies = [ [[package]] name = "oxide_fold" -version = "0.20.7" +version = "0.20.8" dependencies = [ "num-bigint", "oxide_bytecode", @@ -1312,7 +1312,7 @@ dependencies = [ [[package]] name = "oxide_ir" -version = "0.20.7" +version = "0.20.8" dependencies = [ "oxide_bytecode", "oxide_log", @@ -1321,7 +1321,7 @@ dependencies = [ [[package]] name = "oxide_kernel" -version = "0.20.7" +version = "0.20.8" dependencies = [ "bumpalo", "dashmap", @@ -1335,7 +1335,7 @@ dependencies = [ [[package]] name = "oxide_liveness" -version = "0.20.7" +version = "0.20.8" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1347,7 +1347,7 @@ dependencies = [ [[package]] name = "oxide_log" -version = "0.20.7" +version = "0.20.8" dependencies = [ "tracing", "tracing-appender", @@ -1356,11 +1356,11 @@ dependencies = [ [[package]] name = "oxide_net" -version = "0.20.7" +version = "0.20.8" [[package]] name = "oxide_parser" -version = "0.20.7" +version = "0.20.8" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1375,7 +1375,7 @@ dependencies = [ [[package]] name = "oxide_regalloc" -version = "0.20.7" +version = "0.20.8" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1391,7 +1391,7 @@ dependencies = [ [[package]] name = "oxide_runtime_api" -version = "0.20.7" +version = "0.20.8" dependencies = [ "num-bigint", "num-traits", @@ -1404,7 +1404,7 @@ dependencies = [ [[package]] name = "oxide_test262" -version = "0.20.7" +version = "0.20.8" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1424,7 +1424,7 @@ dependencies = [ [[package]] name = "oxide_types" -version = "0.20.7" +version = "0.20.8" dependencies = [ "bumpalo", "dashmap", @@ -1437,7 +1437,7 @@ dependencies = [ [[package]] name = "oxide_vm" -version = "0.20.7" +version = "0.20.8" dependencies = [ "bumpalo", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 41b04b6a..7810ebf6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ members = [ ] [workspace.package] -version = "0.20.7" +version = "0.20.8" edition = "2021" license = "MIT" rust-version = "1.80" diff --git a/crates/oxide_vm/src/dispatch/call.rs b/crates/oxide_vm/src/dispatch/call.rs index 357db420..9e66114d 100644 --- a/crates/oxide_vm/src/dispatch/call.rs +++ b/crates/oxide_vm/src/dispatch/call.rs @@ -974,6 +974,20 @@ impl Vm { .raise_type_error("class constructor cannot be invoked without 'new'") .map(|_| true); } + // Proxy [[Call]]:apply trap 权威(target, thisArgument, + // argumentsList);trap 缺失落穿 target 的普通调用路径。 + if obj.is_proxy_obj() { + match crate::proxy::proxy_apply_call(self, obj, this_value, &args) { + Ok(v) => { + self.regs[0] = v; + return Ok(false); + } + Err(msg) => { + self.raise_call_error(&msg)?; + return Ok(true); + } + } + } // 无本体函数对象(Function.prototype):[[Call]] 接受任意实参 // 返回 undefined,不执行函数体。 if obj.native_fn().is_none() && obj.sub_module_index() == 0 { diff --git a/crates/oxide_vm/src/dispatch/property.rs b/crates/oxide_vm/src/dispatch/property.rs index 1d4411ca..6178551a 100644 --- a/crates/oxide_vm/src/dispatch/property.rs +++ b/crates/oxide_vm/src/dispatch/property.rs @@ -374,6 +374,7 @@ impl Vm { if self.accessor_frame_target_reg.take().is_none() { self.regs[a] = val; } + self.pc += IC_EXT_WORDS; return Ok(()); } // 入口快判:键寄存器恒为 perm 串,指针相等即键为 "length";