mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-25 19:21:11 +08:00
chore: rustfmt 全量格式化——CI fmt check 差异清零
This commit is contained in:
@@ -95,9 +95,7 @@ pub fn array_buffer_native_size(obj: &JsObject) -> u64 {
|
||||
if data_ptr.is_null() {
|
||||
return 0;
|
||||
}
|
||||
unsafe {
|
||||
(std::mem::size_of::<Vec<u8>>() + (*data_ptr).capacity()) as u64
|
||||
}
|
||||
unsafe { (std::mem::size_of::<Vec<u8>>() + (*data_ptr).capacity()) as u64 }
|
||||
}
|
||||
|
||||
/// 释放 ArrayBuffer 的字节缓冲(native_fn 槽中的 `Box<Vec<u8>>`),返回字节数。
|
||||
|
||||
@@ -18,9 +18,8 @@ fn multi_string<H: VmHost>(vm: &mut H, args: &[u8]) -> String {
|
||||
let part = if val.is_string() {
|
||||
oxide_runtime_api::to_string(val)
|
||||
} else {
|
||||
let primitive =
|
||||
oxide_runtime_api::to_primitive(val, oxide_runtime_api::ToPrimitiveHint::String, vm)
|
||||
.unwrap_or_else(|_| JsValue::undefined());
|
||||
let primitive = oxide_runtime_api::to_primitive(val, oxide_runtime_api::ToPrimitiveHint::String, vm)
|
||||
.unwrap_or_else(|_| JsValue::undefined());
|
||||
oxide_runtime_api::to_string(primitive)
|
||||
};
|
||||
output.push_str(&part);
|
||||
|
||||
@@ -618,8 +618,8 @@ pub fn disposable_stack_native_size(obj: &JsObject) -> u64 {
|
||||
return 0;
|
||||
}
|
||||
unsafe {
|
||||
(std::mem::size_of::<DisposeCapability>()
|
||||
+ (*ptr).entries.capacity() * std::mem::size_of::<DisposeEntry>()) as u64
|
||||
(std::mem::size_of::<DisposeCapability>() + (*ptr).entries.capacity() * std::mem::size_of::<DisposeEntry>())
|
||||
as u64
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1458,7 +1458,9 @@ fn next_array_like<H: VmHost>(
|
||||
let value = match vm.ordinary_get(arr, key_si, inner) {
|
||||
Ok(v) => v,
|
||||
Err(err) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_from_text(vm, &err));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_from_text(vm, &err));
|
||||
return Err(exc);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -144,9 +144,7 @@ pub fn map_native_size(obj: &JsObject) -> u64 {
|
||||
if inner.is_null() {
|
||||
return 0;
|
||||
}
|
||||
unsafe {
|
||||
(std::mem::size_of::<MapInner>() + (*inner).capacity() * std::mem::size_of::<(SetKey, JsValue)>()) as u64
|
||||
}
|
||||
unsafe { (std::mem::size_of::<MapInner>() + (*inner).capacity() * std::mem::size_of::<(SetKey, JsValue)>()) as u64 }
|
||||
}
|
||||
|
||||
/// 释放 Map 的 native 数据(IndexMap),返回释放的字节数供泄漏统计。
|
||||
@@ -397,12 +395,17 @@ pub fn map_group_by<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
Err(e) => return NativeResult::Err(crate::iterator::engine_error(vm, &e)),
|
||||
};
|
||||
if !crate::iterator::is_callable(iter_method) {
|
||||
return NativeResult::Err(crate::error::create_type_error(vm, "Map.groupBy: items[Symbol.iterator] is not callable"));
|
||||
return NativeResult::Err(crate::error::create_type_error(
|
||||
vm,
|
||||
"Map.groupBy: items[Symbol.iterator] is not callable",
|
||||
));
|
||||
}
|
||||
let iter_val = match vm.call_function_sync(iter_method, items_val, &[]) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
@@ -435,12 +438,17 @@ pub fn map_group_by<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
let next_result = match vm.call_function_sync(next_fn, iter_val, &[]) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
if !next_result.is_object() || next_result.as_js_object_ptr().is_null() {
|
||||
return NativeResult::Err(crate::error::create_type_error(vm, "Map.groupBy: iterator next() returned non-object"));
|
||||
return NativeResult::Err(crate::error::create_type_error(
|
||||
vm,
|
||||
"Map.groupBy: iterator next() returned non-object",
|
||||
));
|
||||
}
|
||||
let nr = unsafe { &*next_result.as_js_object_ptr() };
|
||||
let done_si = vm.kernel_core().perm_interner().intern("done").0;
|
||||
@@ -457,18 +465,23 @@ pub fn map_group_by<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
Err(e) => return NativeResult::Err(crate::iterator::engine_error(vm, &e)),
|
||||
};
|
||||
// 调用 callbackFn(element, counter):counter 对数组 items 即元素下标 k。
|
||||
let group_key = match vm.call_function_sync(callback_val, JsValue::undefined(), &[element, JsValue::int(counter)]) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
let group_key =
|
||||
match vm.call_function_sync(callback_val, JsValue::undefined(), &[element, JsValue::int(counter)]) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
// 取该键已有分组数组;无则新建空数组并 set 到 Map,再 push 元素。
|
||||
let existing = match vm.call_function_sync(getter, map_val, &[group_key]) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
@@ -487,7 +500,9 @@ pub fn map_group_by<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
));
|
||||
let new_arr_val = JsValue::from_js_object(arr);
|
||||
if let Err(e) = vm.call_function_sync(adder, map_val, &[group_key, new_arr_val]) {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
new_arr_val
|
||||
|
||||
@@ -198,7 +198,11 @@ pub(crate) fn f16_bits_to_f64(h: u16) -> f64 {
|
||||
// 正规:(1 + mant/2¹⁰) × 2^(exp-15)。
|
||||
(1.0 + mant / 1024.0) * 2.0f64.powi(exp - 15)
|
||||
};
|
||||
if sign == 1.0 { -v } else { v }
|
||||
if sign == 1.0 {
|
||||
-v
|
||||
} else {
|
||||
v
|
||||
}
|
||||
}
|
||||
|
||||
/// `Math.f16round`:把 double 舍入到 binary16 精度再还原为 double。
|
||||
|
||||
@@ -1289,7 +1289,9 @@ pub fn object_proto_define_getter<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeR
|
||||
let key_si = match vm.to_property_key_si(vm.reg(args[1])) {
|
||||
Ok(si) => si,
|
||||
Err(e) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
@@ -1378,12 +1380,17 @@ pub fn object_group_by<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
Err(e) => return NativeResult::Err(crate::iterator::engine_error(vm, &e)),
|
||||
};
|
||||
if !is_callable(iter_method) {
|
||||
return NativeResult::Err(crate::error::create_type_error(vm, "Object.groupBy: items[Symbol.iterator] is not callable"));
|
||||
return NativeResult::Err(crate::error::create_type_error(
|
||||
vm,
|
||||
"Object.groupBy: items[Symbol.iterator] is not callable",
|
||||
));
|
||||
}
|
||||
let iter_val = match vm.call_function_sync(iter_method, items_val, &[]) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
@@ -1404,12 +1411,17 @@ pub fn object_group_by<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
let next_result = match vm.call_function_sync(next_fn, iter_val, &[]) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
if !next_result.is_object() || next_result.as_js_object_ptr().is_null() {
|
||||
return NativeResult::Err(crate::error::create_type_error(vm, "Object.groupBy: iterator next() returned non-object"));
|
||||
return NativeResult::Err(crate::error::create_type_error(
|
||||
vm,
|
||||
"Object.groupBy: iterator next() returned non-object",
|
||||
));
|
||||
}
|
||||
let nr = unsafe { &*next_result.as_js_object_ptr() };
|
||||
let done_si = vm.kernel_core().perm_interner().intern("done").0;
|
||||
@@ -1429,7 +1441,9 @@ pub fn object_group_by<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
let key = match vm.call_function_sync(callback_val, JsValue::undefined(), &[element, JsValue::int(counter)]) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
@@ -1437,7 +1451,9 @@ pub fn object_group_by<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
let key_si = match vm.to_property_key_si(key) {
|
||||
Ok(si) => si,
|
||||
Err(e) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
@@ -1446,7 +1462,11 @@ pub fn object_group_by<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
let existing = match vm.ordinary_get(result_ref, key_si, result_val) {
|
||||
Ok(v) if v.is_object() && !v.as_js_object_ptr().is_null() => {
|
||||
let arr = unsafe { &*v.as_js_object_ptr() };
|
||||
if arr.is_array() { Some(v) } else { None }
|
||||
if arr.is_array() {
|
||||
Some(v)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
_ => None,
|
||||
};
|
||||
@@ -1454,7 +1474,12 @@ pub fn object_group_by<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
existing
|
||||
} else {
|
||||
let arr_proto = vm.session().builtin_world().array_proto.as_ptr() as *mut JsObject;
|
||||
let arr = vm.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, JsValue::from_js_object(arr_proto), 0, vm.epoch().bump()));
|
||||
let arr = vm.alloc_object(JsObject::new_array(
|
||||
EMPTY_SHAPE_ID,
|
||||
JsValue::from_js_object(arr_proto),
|
||||
0,
|
||||
vm.epoch().bump(),
|
||||
));
|
||||
let new_arr_val = JsValue::from_js_object(arr);
|
||||
let result_ref_mut = unsafe { &mut *result };
|
||||
let promoted = vm.promote_if_needed_for_write_ptr(result, new_arr_val);
|
||||
|
||||
@@ -183,9 +183,7 @@ pub fn set_native_size(obj: &JsObject) -> u64 {
|
||||
if inner.is_null() {
|
||||
return 0;
|
||||
}
|
||||
unsafe {
|
||||
(std::mem::size_of::<SetInner>() + (*inner).capacity() * std::mem::size_of::<SetKey>()) as u64
|
||||
}
|
||||
unsafe { (std::mem::size_of::<SetInner>() + (*inner).capacity() * std::mem::size_of::<SetKey>()) as u64 }
|
||||
}
|
||||
|
||||
/// 释放 Set 的 native 数据(IndexSet),返回释放的字节数供泄漏统计。
|
||||
|
||||
@@ -1690,7 +1690,9 @@ pub fn string_raw<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
let raw_val = match vm.ordinary_get(template_obj, raw_si, template_val) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
@@ -1708,21 +1710,21 @@ pub fn string_raw<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
// 原样传播),再按 ToLength 归一并截断(防超大 raw 数组导致 OOM)。
|
||||
match oxide_runtime_api::to_number_full(v, vm) {
|
||||
Ok(n) => {
|
||||
let len = if n.is_nan() || n <= 0.0 {
|
||||
0.0
|
||||
} else {
|
||||
n.min(9_007_199_254_740_991.0)
|
||||
};
|
||||
let len = if n.is_nan() || n <= 0.0 { 0.0 } else { n.min(9_007_199_254_740_991.0) };
|
||||
(len.trunc() as u64).min(0x1FFFFF) as usize
|
||||
}
|
||||
Err(msg) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &msg));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &msg));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &e));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
@@ -1740,7 +1742,9 @@ pub fn string_raw<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
Ok(v) => match oxide_runtime_api::to_string_full(v, vm) {
|
||||
Ok(s) => s,
|
||||
Err(msg) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &msg));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &msg));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
},
|
||||
@@ -1763,7 +1767,9 @@ pub fn string_raw<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
let sub_str = match oxide_runtime_api::to_string_full(sub_val, vm) {
|
||||
Ok(s) => s,
|
||||
Err(msg) => {
|
||||
let exc = vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_type_error(vm, &msg));
|
||||
let exc = vm
|
||||
.take_uncaught_value()
|
||||
.unwrap_or_else(|| crate::error::create_type_error(vm, &msg));
|
||||
return NativeResult::Err(exc);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -3849,9 +3849,7 @@ pub fn duration_add<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
/// # 边界与前提
|
||||
/// - 任一侧含日历单位抛 RangeError(本批无 relativeTo 支持)。
|
||||
/// - 全零与 nanosecond 分量和为 0 时直接返回零时长。
|
||||
fn add_duration_values<H: VmHost>(
|
||||
vm: &mut H, receiver: &[f64; 10], other: &[f64; 10],
|
||||
) -> Result<[f64; 10], JsValue> {
|
||||
fn add_duration_values<H: VmHost>(vm: &mut H, receiver: &[f64; 10], other: &[f64; 10]) -> Result<[f64; 10], JsValue> {
|
||||
if receiver[..3].iter().any(|value| *value != 0.0) || other[..3].iter().any(|value| *value != 0.0) {
|
||||
return Err(crate::error::create_range_error(vm, "cannot add durations with calendar units"));
|
||||
}
|
||||
@@ -4068,12 +4066,10 @@ pub fn duration_compare<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
"relativeTo is required for calendar units",
|
||||
));
|
||||
}
|
||||
let one_ns = native_try!(duration_time_nanoseconds(&one).ok_or_else(|| {
|
||||
crate::error::create_range_error(vm, "duration is out of range")
|
||||
}));
|
||||
let two_ns = native_try!(duration_time_nanoseconds(&two).ok_or_else(|| {
|
||||
crate::error::create_range_error(vm, "duration is out of range")
|
||||
}));
|
||||
let one_ns = native_try!(duration_time_nanoseconds(&one)
|
||||
.ok_or_else(|| { crate::error::create_range_error(vm, "duration is out of range") }));
|
||||
let two_ns = native_try!(duration_time_nanoseconds(&two)
|
||||
.ok_or_else(|| { crate::error::create_range_error(vm, "duration is out of range") }));
|
||||
one_ns.cmp(&two_ns)
|
||||
}
|
||||
Some(rel) => {
|
||||
@@ -4305,7 +4301,10 @@ pub fn duration_round<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
];
|
||||
for (index, scale) in (3..10).zip(UNIT_SCALES) {
|
||||
if result[index] != 0.0 && result[index].abs() * scale >= MAX_TIME_NANOSECONDS {
|
||||
return NativeResult::Err(crate::error::create_range_error(vm, "duration time fields are out of range"));
|
||||
return NativeResult::Err(crate::error::create_range_error(
|
||||
vm,
|
||||
"duration time fields are out of range",
|
||||
));
|
||||
}
|
||||
}
|
||||
return make_duration(vm, result);
|
||||
@@ -6944,9 +6943,7 @@ fn nudge_iso_difference<H: VmHost>(
|
||||
if did_expand && smallest_index != 2 {
|
||||
match bubble_relative_duration(sign, values, nudged_epoch, date1, time1_ns, largest_index, smallest_index) {
|
||||
Ok(bubbled) => values = bubbled,
|
||||
Err(()) => {
|
||||
return Err(crate::error::create_range_error(vm, "difference is out of range"))
|
||||
}
|
||||
Err(()) => return Err(crate::error::create_range_error(vm, "difference is out of range")),
|
||||
}
|
||||
}
|
||||
values
|
||||
|
||||
Reference in New Issue
Block a user