From 7ec975cfb4e9ed89eb2829785d2fb4d2ccb60ef7 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Thu, 15 Oct 2026 16:08:30 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20Date=20toPrimitive=20=E5=8D=95=E6=B5=8B?= =?UTF-8?q?=E9=92=89=E6=94=B9=E4=B8=A5=E6=A0=BC=E8=84=9A=E6=9C=AC=E5=B9=B6?= =?UTF-8?q?=E6=8E=A8=E8=BF=9B=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 42 ++++++++++---------- Cargo.toml | 2 +- crates/oxide_vm/tests/builtins_date_tests.rs | 8 ++-- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 93372aa9..16e16962 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1160,7 +1160,7 @@ dependencies = [ [[package]] name = "oxide_builtins" -version = "0.19.17" +version = "0.19.18" dependencies = [ "chrono", "fast-float", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "oxide_bytecode" -version = "0.19.17" +version = "0.19.18" dependencies = [ "num-bigint", "oxide_log", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "oxide_cfg" -version = "0.19.17" +version = "0.19.18" dependencies = [ "oxide_bytecode", "oxide_emit", @@ -1204,7 +1204,7 @@ dependencies = [ [[package]] name = "oxide_cli" -version = "0.19.17" +version = "0.19.18" dependencies = [ "ansi_term", "bumpalo", @@ -1228,7 +1228,7 @@ dependencies = [ [[package]] name = "oxide_code_cache" -version = "0.19.17" +version = "0.19.18" dependencies = [ "lru", "oxide_bytecode", @@ -1237,7 +1237,7 @@ dependencies = [ [[package]] name = "oxide_compiler" -version = "0.19.17" +version = "0.19.18" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1258,7 +1258,7 @@ dependencies = [ [[package]] name = "oxide_dce" -version = "0.19.17" +version = "0.19.18" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1272,7 +1272,7 @@ dependencies = [ [[package]] name = "oxide_emit" -version = "0.19.17" +version = "0.19.18" dependencies = [ "num-bigint", "oxc_allocator", @@ -1288,7 +1288,7 @@ dependencies = [ [[package]] name = "oxide_engine" -version = "0.19.17" +version = "0.19.18" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1300,7 +1300,7 @@ dependencies = [ [[package]] name = "oxide_fold" -version = "0.19.17" +version = "0.19.18" dependencies = [ "num-bigint", "oxide_bytecode", @@ -1312,7 +1312,7 @@ dependencies = [ [[package]] name = "oxide_ir" -version = "0.19.17" +version = "0.19.18" dependencies = [ "oxide_bytecode", "oxide_log", @@ -1321,7 +1321,7 @@ dependencies = [ [[package]] name = "oxide_kernel" -version = "0.19.17" +version = "0.19.18" dependencies = [ "bumpalo", "dashmap", @@ -1335,7 +1335,7 @@ dependencies = [ [[package]] name = "oxide_liveness" -version = "0.19.17" +version = "0.19.18" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1347,7 +1347,7 @@ dependencies = [ [[package]] name = "oxide_log" -version = "0.19.17" +version = "0.19.18" dependencies = [ "tracing", "tracing-appender", @@ -1356,11 +1356,11 @@ dependencies = [ [[package]] name = "oxide_net" -version = "0.19.17" +version = "0.19.18" [[package]] name = "oxide_parser" -version = "0.19.17" +version = "0.19.18" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1375,7 +1375,7 @@ dependencies = [ [[package]] name = "oxide_regalloc" -version = "0.19.17" +version = "0.19.18" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1391,7 +1391,7 @@ dependencies = [ [[package]] name = "oxide_runtime_api" -version = "0.19.17" +version = "0.19.18" dependencies = [ "num-bigint", "num-traits", @@ -1404,7 +1404,7 @@ dependencies = [ [[package]] name = "oxide_test262" -version = "0.19.17" +version = "0.19.18" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1424,7 +1424,7 @@ dependencies = [ [[package]] name = "oxide_types" -version = "0.19.17" +version = "0.19.18" dependencies = [ "bumpalo", "dashmap", @@ -1437,7 +1437,7 @@ dependencies = [ [[package]] name = "oxide_vm" -version = "0.19.17" +version = "0.19.18" dependencies = [ "bumpalo", "chrono", diff --git a/Cargo.toml b/Cargo.toml index ce44781a..16f95766 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ members = [ ] [workspace.package] -version = "0.19.17" +version = "0.19.18" edition = "2021" license = "MIT" rust-version = "1.80" diff --git a/crates/oxide_vm/tests/builtins_date_tests.rs b/crates/oxide_vm/tests/builtins_date_tests.rs index 10c4b6e4..76e31de4 100644 --- a/crates/oxide_vm/tests/builtins_date_tests.rs +++ b/crates/oxide_vm/tests/builtins_date_tests.rs @@ -989,12 +989,14 @@ fn date_to_primitive_user_throw_propagates_original() { } #[test] -fn date_to_primitive_called_as_function_no_strict_this() { +fn date_to_primitive_called_as_function_strict_this() { let mut vm = Vm::new(); - // 顶层函数形态调用(this 为 undefined)抛 TypeError,且不触发 toString/valueOf 查找。 + // 严格脚本顶层函数形态调用(this 为 undefined)抛 TypeError,且不触发 toString/valueOf 查找。 + // 用严格脚本使 this 恒为 undefined(规范保证),不依赖 sloppy 顶层 this 绑定 + // (JS 函数与 native 函数两条路径取值不同,前者替换为全局对象、后者保留 undefined)。 let r = eval( &mut vm, - "var toPrimitive = Date.prototype[Symbol.toPrimitive]; \ + "'use strict'; var toPrimitive = Date.prototype[Symbol.toPrimitive]; \ try { toPrimitive('default'); 'no' } catch (e) { e instanceof TypeError ? 'yes' : 'no' }", ) .unwrap();