From 8ac630b4e0629f1c8ae8809b5d212ead0a59c1f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=E7=89=B9=E6=AF=8F=E7=BE=8A=E9=98=9F?= Date: Fri, 7 Aug 2026 19:39:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(string):=20String()=20=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E8=B5=B0=20ToString=20=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=EF=BC=88=E6=95=B0=E7=BB=84=E2=86=92join=20?= =?UTF-8?q?=E7=AD=89=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_builtins/src/string.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/oxide_builtins/src/string.rs b/crates/oxide_builtins/src/string.rs index 860a401..b3f6c41 100644 --- a/crates/oxide_builtins/src/string.rs +++ b/crates/oxide_builtins/src/string.rs @@ -58,7 +58,11 @@ pub fn string_value_of(vm: &mut H, args: &[u8]) -> NativeResult { /// JS `String()` 构造逻辑:把参数转成字符串;new 语义返回 `[[StringData]]` 包装对象。 pub fn string_constructor(vm: &mut H, args: &[u8]) -> NativeResult { let s = if args.len() > 1 { - oxide_runtime_api::to_string(vm.reg(args[1])) + // 对象参数须经 ToPrimitive/ToString 完整转换(数组 → join,对象 → toString)。 + match oxide_runtime_api::to_string_full(vm.reg(args[1]), vm) { + Ok(s) => s, + Err(e) => return NativeResult::Err(crate::error::create_error(vm, &e)), + } } else { String::new() };