From 0eb44413b1eb53b950096419076086933006a3cf Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Tue, 22 Sep 2026 00:16:03 +0000 Subject: [PATCH] =?UTF-8?q?style:=20=E6=A0=BC=E5=BC=8F=E5=8C=96=20oxide=5F?= =?UTF-8?q?builtins=20=E5=85=AD=E6=96=87=E4=BB=B6=E6=B6=88=E9=99=A4=20fmt?= =?UTF-8?q?=20=E6=BC=82=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_builtins/src/data_view.rs | 4 +- crates/oxide_builtins/src/object.rs | 40 +++++++++++-------- crates/oxide_builtins/src/regexp.rs | 9 +---- crates/oxide_builtins/src/string/regex.rs | 27 ++++++------- .../oxide_builtins/src/temporal/plain_time.rs | 40 ++++++++----------- crates/oxide_builtins/src/typed_array.rs | 4 +- 6 files changed, 57 insertions(+), 67 deletions(-) diff --git a/crates/oxide_builtins/src/data_view.rs b/crates/oxide_builtins/src/data_view.rs index cdb1b41e..6bd33e89 100644 --- a/crates/oxide_builtins/src/data_view.rs +++ b/crates/oxide_builtins/src/data_view.rs @@ -509,9 +509,7 @@ pub fn data_view_set_big_uint64(vm: &mut H, args: &[u8]) -> NativeRes /// 取 BigInt 值低 64 位位模式:与 2^64-1 掩码后恒非负且可转 u64。 fn low64(vm: &mut H, val: JsValue) -> u64 { let v = vm.bigint_value(val); - (v & (BigInt::from(u64::MAX))) - .to_u64() - .unwrap_or(u64::MAX) + (v & (BigInt::from(u64::MAX))).to_u64().unwrap_or(u64::MAX) } /// `DataView.prototype.toString`:校验 receiver 后返回 `[object DataView]`。 diff --git a/crates/oxide_builtins/src/object.rs b/crates/oxide_builtins/src/object.rs index 73da09a2..9b269e58 100644 --- a/crates/oxide_builtins/src/object.rs +++ b/crates/oxide_builtins/src/object.rs @@ -55,9 +55,7 @@ pub fn walk_own_keys(vm: &H, obj: &JsObject) -> Vec<(u32, u32)> { } for id in shape_ids.iter().rev() { if let Some(shape) = vm.kernel_core().shape_forge().get_shape(*id) { - if !is_symbol_key(shape.property_name) - && !is_private_name_key(shape.property_name) - { + if !is_symbol_key(shape.property_name) && !is_private_name_key(shape.property_name) { // 绝对存储索引:数组命名属性位于元素区之后。 let store = if obj.is_array() { obj.array_prop_count + pos } else { pos }; keys.push((shape.property_name, store)); @@ -1092,9 +1090,7 @@ pub fn object_get_own_property_descriptors(vm: &mut H, args: &[u8]) - /// # 边界与前提 /// - 空串:仅返回 length 描述符 /// - 非字符串被包值:退化为零键 -fn string_exotic_get_own_property_descriptors( - vm: &mut H, obj_ptr: *mut JsObject, -) -> NativeResult { +fn string_exotic_get_own_property_descriptors(vm: &mut H, obj_ptr: *mut JsObject) -> NativeResult { let obj = unsafe { &*obj_ptr }; // 取被包字符串值:优先 boxed_value,回退 hash_props[0]。 let raw = obj.boxed_value(); @@ -1123,11 +1119,17 @@ fn string_exotic_get_own_property_descriptors( let desc_obj = unsafe { &mut *desc }; let desc_obj_ptr = JsValue::from_js_object(desc); // 构造描述符对象:value + writable/enumerable/configurable。 - vm.define_data_property(desc_obj, value_si, char_val, PropAttributes::DEFAULT_DATA).ok(); - vm.define_data_property(desc_obj, writable_si, JsValue::bool(false), PropAttributes::DEFAULT_DATA).ok(); - vm.define_data_property(desc_obj, enumerable_si, JsValue::bool(true), PropAttributes::DEFAULT_DATA).ok(); - vm.define_data_property(desc_obj, configurable_si, JsValue::bool(false), PropAttributes::DEFAULT_DATA).ok(); - if let Err(err) = vm.define_data_property(unsafe { &mut *result }, si, desc_obj_ptr, PropAttributes::DEFAULT_DATA) { + vm.define_data_property(desc_obj, value_si, char_val, PropAttributes::DEFAULT_DATA) + .ok(); + vm.define_data_property(desc_obj, writable_si, JsValue::bool(false), PropAttributes::DEFAULT_DATA) + .ok(); + vm.define_data_property(desc_obj, enumerable_si, JsValue::bool(true), PropAttributes::DEFAULT_DATA) + .ok(); + vm.define_data_property(desc_obj, configurable_si, JsValue::bool(false), PropAttributes::DEFAULT_DATA) + .ok(); + if let Err(err) = + vm.define_data_property(unsafe { &mut *result }, si, desc_obj_ptr, PropAttributes::DEFAULT_DATA) + { return NativeResult::Err(crate::error::create_type_error(vm, &err)); } } @@ -1136,11 +1138,17 @@ fn string_exotic_get_own_property_descriptors( let desc = alloc_desc_object(vm); let desc_obj = unsafe { &mut *desc }; let desc_obj_ptr = JsValue::from_js_object(desc); - vm.define_data_property(desc_obj, value_si, JsValue::int(len as i32), PropAttributes::DEFAULT_DATA).ok(); - vm.define_data_property(desc_obj, writable_si, JsValue::bool(false), PropAttributes::DEFAULT_DATA).ok(); - vm.define_data_property(desc_obj, enumerable_si, JsValue::bool(false), PropAttributes::DEFAULT_DATA).ok(); - vm.define_data_property(desc_obj, configurable_si, JsValue::bool(false), PropAttributes::DEFAULT_DATA).ok(); - if let Err(err) = vm.define_data_property(unsafe { &mut *result }, length_si, desc_obj_ptr, PropAttributes::DEFAULT_DATA) { + vm.define_data_property(desc_obj, value_si, JsValue::int(len as i32), PropAttributes::DEFAULT_DATA) + .ok(); + vm.define_data_property(desc_obj, writable_si, JsValue::bool(false), PropAttributes::DEFAULT_DATA) + .ok(); + vm.define_data_property(desc_obj, enumerable_si, JsValue::bool(false), PropAttributes::DEFAULT_DATA) + .ok(); + vm.define_data_property(desc_obj, configurable_si, JsValue::bool(false), PropAttributes::DEFAULT_DATA) + .ok(); + if let Err(err) = + vm.define_data_property(unsafe { &mut *result }, length_si, desc_obj_ptr, PropAttributes::DEFAULT_DATA) + { return NativeResult::Err(crate::error::create_type_error(vm, &err)); } diff --git a/crates/oxide_builtins/src/regexp.rs b/crates/oxide_builtins/src/regexp.rs index 99b81b1e..7b95e966 100644 --- a/crates/oxide_builtins/src/regexp.rs +++ b/crates/oxide_builtins/src/regexp.rs @@ -210,13 +210,8 @@ fn advance_string_index(units: &[u16], p: usize, unicode: bool) -> usize { /// `$n` 越界(含 $0 与两位回退后仍越界)或未匹配组(None)按字面输出。 /// `$` 从 named_captures 对象读取;不存在时字面输出 `$<` 开头部分。 fn get_substitution_units( - vm: &mut H, - matched: &[u16], - s: &[u16], - position: usize, - captured: &[Option>], - named_captures: Option<&JsObject>, - replacement: &[u16], + vm: &mut H, matched: &[u16], s: &[u16], position: usize, captured: &[Option>], + named_captures: Option<&JsObject>, replacement: &[u16], ) -> Vec { let mut out = Vec::new(); let pos = position.min(s.len()); diff --git a/crates/oxide_builtins/src/string/regex.rs b/crates/oxide_builtins/src/string/regex.rs index 4f8a142f..ab05233d 100644 --- a/crates/oxide_builtins/src/string/regex.rs +++ b/crates/oxide_builtins/src/string/regex.rs @@ -850,10 +850,12 @@ pub fn string_match_all(vm: &mut H, args: &[u8]) -> NativeResult { }; // RequireObjectCoercible:flags 为 undefined/null 时抛 TypeError。 // rx_get_flags 已将 undefined 转为 "undefined" 字符串,需额外检查。 - let flags_val = match vm.ordinary_get(unsafe { &*re_ptr }, vm.kernel_core().perm_interner().intern("flags").0, pattern_val) { - Ok(v) => v, - Err(e) => return NativeResult::err(crate::iterator::engine_error(vm, &e)), - }; + let flags_val = + match vm.ordinary_get(unsafe { &*re_ptr }, vm.kernel_core().perm_interner().intern("flags").0, pattern_val) + { + Ok(v) => v, + Err(e) => return NativeResult::err(crate::iterator::engine_error(vm, &e)), + }; if flags_val.is_undefined() || flags_val.is_null() { return NativeResult::Err(crate::error::create_type_error( vm, @@ -906,10 +908,7 @@ pub fn string_match_all(vm: &mut H, args: &[u8]) -> NativeResult { } } // 无 callable @@matchAll:规范 Invoke 抛 TypeError。 - NativeResult::Err(crate::error::create_type_error( - vm, - "RegExp.prototype[Symbol.matchAll] is not a function", - )) + NativeResult::Err(crate::error::create_type_error(vm, "RegExp.prototype[Symbol.matchAll] is not a function")) } else { // 非 RegExp:先查 @@matchAll(规范步骤 6-8,IsRegExp 为 false 时 // 先 ToString(pattern) 转正则,但规范步骤 8 是 Invoke(rx, @@matchAll)。 @@ -933,7 +932,11 @@ pub fn string_match_all(vm: &mut H, args: &[u8]) -> NativeResult { let pattern_units = try_string!(as_units(vm, pattern_val)).into_owned(); let pattern_str = String::from_utf16_lossy(&pattern_units); let escaped = regress::escape(&pattern_str); - let rx_str = if escaped.is_empty() { String::from("(?:)") } else { format!("(?:{})", escaped) }; + let rx_str = if escaped.is_empty() { + String::from("(?:)") + } else { + format!("(?:{})", escaped) + }; let compiled = match regress::Regex::new(&rx_str) { Ok(rx) => rx, Err(e) => { @@ -1105,11 +1108,7 @@ pub fn string_match_all_next(vm: &mut H, args: &[u8]) -> NativeResult /// 构建 matchAll 结果数组:元素为匹配字符串值,附带 index/input/groups 属性。 fn make_match_result_array( - vm: &mut H, - parts: Vec>, - match_index: i32, - input_val: JsValue, - m: Option<®ress::Match>, + vm: &mut H, parts: Vec>, match_index: i32, input_val: JsValue, m: Option<®ress::Match>, text: &MatchText, ) -> JsValue { let values: Vec = parts.into_iter().map(|u| vm.new_string_units_owned(u)).collect(); diff --git a/crates/oxide_builtins/src/temporal/plain_time.rs b/crates/oxide_builtins/src/temporal/plain_time.rs index 22e76f3e..a1467e80 100644 --- a/crates/oxide_builtins/src/temporal/plain_time.rs +++ b/crates/oxide_builtins/src/temporal/plain_time.rs @@ -42,30 +42,22 @@ fn is_ambiguous_date_string(s: &str) -> bool { day >= 1 && day <= max }; match s.len() { - 4 if all_digits(0..4) => { - match (two_digits(0), two_digits(2)) { - (Some(month), Some(day)) => day_in_month(month, day), - _ => false, - } - } - 6 if all_digits(0..6) => { - match two_digits(4) { - Some(m) => (1..=12).contains(&m), - None => false, - } - } - 5 if bytes[2] == b'-' && all_digits(0..2) && all_digits(3..5) => { - match (two_digits(0), two_digits(3)) { - (Some(month), Some(day)) => day_in_month(month, day), - _ => false, - } - } - 7 if bytes[4] == b'-' && all_digits(0..4) && all_digits(5..7) => { - match two_digits(5) { - Some(m) => (1..=12).contains(&m), - None => false, - } - } + 4 if all_digits(0..4) => match (two_digits(0), two_digits(2)) { + (Some(month), Some(day)) => day_in_month(month, day), + _ => false, + }, + 6 if all_digits(0..6) => match two_digits(4) { + Some(m) => (1..=12).contains(&m), + None => false, + }, + 5 if bytes[2] == b'-' && all_digits(0..2) && all_digits(3..5) => match (two_digits(0), two_digits(3)) { + (Some(month), Some(day)) => day_in_month(month, day), + _ => false, + }, + 7 if bytes[4] == b'-' && all_digits(0..4) && all_digits(5..7) => match two_digits(5) { + Some(m) => (1..=12).contains(&m), + None => false, + }, _ => false, } } diff --git a/crates/oxide_builtins/src/typed_array.rs b/crates/oxide_builtins/src/typed_array.rs index 4d076930..eb1d3655 100644 --- a/crates/oxide_builtins/src/typed_array.rs +++ b/crates/oxide_builtins/src/typed_array.rs @@ -327,9 +327,7 @@ fn read_element(vm: &mut H, kind: TypedArrayKind, bytes: &[u8], offse match kind { TypedArrayKind::Int8 => JsValue::int(bytes[offset] as i8 as i32), TypedArrayKind::Uint8 | TypedArrayKind::Uint8Clamped => JsValue::int(bytes[offset] as i32), - TypedArrayKind::Int16 => { - JsValue::int(read_bytes!(&bytes[offset..offset + 2], i16) as i32) - } + TypedArrayKind::Int16 => JsValue::int(read_bytes!(&bytes[offset..offset + 2], i16) as i32), TypedArrayKind::Uint16 => JsValue::int(read_bytes!(&bytes[offset..offset + 2], u16) as i32), TypedArrayKind::Int32 => JsValue::int(read_bytes!(&bytes[offset..offset + 4], i32)), TypedArrayKind::Uint32 => JsValue::float(read_bytes!(&bytes[offset..offset + 4], u32) as f64),