From 6bcd090b06aa2ca32698424bf19517f5cee0932b Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Wed, 12 Aug 2026 03:41:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A1=A5=20BigInt.prototype[Symbol.toS?= =?UTF-8?q?tringTag]=20=E6=95=B0=E6=8D=AE=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补 @@toStringTag 数据属性,writable:false、enumerable:false、configurable:true, 使 Object.prototype.toString 与属性描述符符合规范。剩余 built-ins/BigInt 的 Symbol.toStringTag.js verifyProperty 失败仍受 String(Symbol) 支持阻塞。 --- crates/oxide_vm/src/bindings/bind_bigint.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/crates/oxide_vm/src/bindings/bind_bigint.rs b/crates/oxide_vm/src/bindings/bind_bigint.rs index f8408949..dd9f79e5 100644 --- a/crates/oxide_vm/src/bindings/bind_bigint.rs +++ b/crates/oxide_vm/src/bindings/bind_bigint.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use crate::bindings::{apply_binding_table, bind_global_value, configure_native_constructor}; +use crate::bindings::{apply_binding_table, bind_global_value, bind_well_known_data_property, configure_native_constructor}; use oxide_kernel::kernel::{KernelCore, KernelSession}; use oxide_types::object::{JsObject, PropAttributes}; use oxide_types::value::JsValue; @@ -43,11 +43,20 @@ pub fn bind_bigint(core: &Arc, session: &KernelSession, global: &mut core, &[ ("toString", oxide_builtins::bigint::bigint_to_string:: as *const (), 0), - ("toLocaleString", oxide_builtins::bigint::bigint_to_locale_string:: as *const (), 0), + ( + "toLocaleString", + oxide_builtins::bigint::bigint_to_locale_string:: as *const (), + 0, + ), ("valueOf", oxide_builtins::bigint::bigint_value_of:: as *const (), 0), ], ); + // BigInt.prototype[@@toStringTag] = "BigInt",属性 { writable:false, enumerable:false, configurable:true }。 + let tag_si = core.perm_interner().intern("BigInt").0; + let tag_value = JsValue::perm_string(core.perm_interner().string_ptr(tag_si)); + bind_well_known_data_property(core, proto, 9, tag_value, PropAttributes::new(false, false, true)); + bind_global_value(core, global, "BigInt", JsValue::from_js_object(ctor_ptr)); // 全局 BigInt 属性描述符:{ writable: true, enumerable: false, configurable: true }。 let bigint_si = core.perm_interner().intern("BigInt").0;