mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-24 18:51:13 +08:00
style: 修 rustfmt 格式化差异
This commit is contained in:
@@ -467,11 +467,7 @@ pub fn shared_array_buffer_max_byte_length<H: VmHost>(vm: &mut H, args: &[u8]) -
|
||||
let payload_ptr = native_try!(shared_array_buffer_payload(vm, this_val));
|
||||
// SAFETY: payload_ptr 经 shared_array_buffer_payload 校验为合法 SAB 载荷。
|
||||
let payload = unsafe { &*payload_ptr };
|
||||
let value = if payload.growable {
|
||||
payload.buffer.max_len()
|
||||
} else {
|
||||
payload.buffer.len()
|
||||
};
|
||||
let value = if payload.growable { payload.buffer.max_len() } else { payload.buffer.len() };
|
||||
NativeResult::Ok(JsValue::int(value as i32))
|
||||
}
|
||||
|
||||
|
||||
@@ -5,9 +5,7 @@ use oxide_types::value::JsValue;
|
||||
use num_bigint::BigInt;
|
||||
use num_traits::ToPrimitive;
|
||||
|
||||
use crate::array_buffer::{
|
||||
buffer_store, buffer_store_mut_ptr, buffer_store_ptr, BufferStore, BufferStoreMut,
|
||||
};
|
||||
use crate::array_buffer::{buffer_store, buffer_store_mut_ptr, buffer_store_ptr, BufferStore, BufferStoreMut};
|
||||
|
||||
use oxide_runtime_api::{NativeResult, ProtoKind, VmHost};
|
||||
|
||||
@@ -116,9 +114,7 @@ fn get_data_view_data<H: VmHost>(vm: &mut H, this_val: JsValue) -> Result<DataVi
|
||||
/// detach(AB 臂 detached 标志)、auto 视图 offset 超 live、定长视图
|
||||
/// offset + 静态长超 live(含溢出)→ TypeError;通过时返回视图长
|
||||
/// (auto 视图现算 live − offset,定长视图返静态长)。
|
||||
fn dv_view_bounds<H: VmHost>(
|
||||
vm: &mut H, store: &BufferStore, view: DataViewData,
|
||||
) -> Result<usize, JsValue> {
|
||||
fn dv_view_bounds<H: VmHost>(vm: &mut H, store: &BufferStore, view: DataViewData) -> Result<usize, JsValue> {
|
||||
if store.is_detached() {
|
||||
return Err(crate::error::create_type_error(vm, "ArrayBuffer internal state invalid"));
|
||||
}
|
||||
|
||||
@@ -110,10 +110,7 @@ pub fn drop_message_port_native(obj: &mut JsObject) -> u64 {
|
||||
/// - 构造器不占 BuiltinWorld P 字段(绑定层就地填充占位)。
|
||||
pub fn message_channel_constructor<H: VmHost>(vm: &mut H, _args: &[u8]) -> NativeResult {
|
||||
if !vm.constructing_native() {
|
||||
return NativeResult::Err(crate::error::create_type_error(
|
||||
vm,
|
||||
"MessageChannel constructor requires new",
|
||||
));
|
||||
return NativeResult::Err(crate::error::create_type_error(vm, "MessageChannel constructor requires new"));
|
||||
}
|
||||
|
||||
let (a_to_b_tx, b_rx) = message_queue::channel::<MessageValue>();
|
||||
@@ -135,19 +132,9 @@ pub fn message_channel_constructor<H: VmHost>(vm: &mut H, _args: &[u8]) -> Nativ
|
||||
// SAFETY: a_ptr / b_ptr 是本函数刚 alloc_object 的端口对象,存活且本段无别名。
|
||||
unsafe {
|
||||
let a_obj = &mut *a_ptr;
|
||||
let _ = vm.define_data_property(
|
||||
a_obj,
|
||||
si_onmessage,
|
||||
JsValue::null(),
|
||||
PropAttributes::new(true, false, true),
|
||||
);
|
||||
let _ = vm.define_data_property(a_obj, si_onmessage, JsValue::null(), PropAttributes::new(true, false, true));
|
||||
let b_obj = &mut *b_ptr;
|
||||
let _ = vm.define_data_property(
|
||||
b_obj,
|
||||
si_onmessage,
|
||||
JsValue::null(),
|
||||
PropAttributes::new(true, false, true),
|
||||
);
|
||||
let _ = vm.define_data_property(b_obj, si_onmessage, JsValue::null(), PropAttributes::new(true, false, true));
|
||||
}
|
||||
|
||||
// 结果对象:plain 对象(proto = %Object.prototype%),两枚可枚举 port1 / port2。
|
||||
@@ -156,27 +143,15 @@ pub fn message_channel_constructor<H: VmHost>(vm: &mut H, _args: &[u8]) -> Nativ
|
||||
// SAFETY: result_ptr 是本函数刚 alloc_object 的对象,存活且本段无别名。
|
||||
let result_obj = unsafe { &mut *result_ptr };
|
||||
let si_port1 = vm.perm_intern("port1");
|
||||
let _ = vm.define_data_property(
|
||||
result_obj,
|
||||
si_port1,
|
||||
JsValue::from_js_object(a_ptr),
|
||||
PropAttributes::DEFAULT_DATA,
|
||||
);
|
||||
let _ = vm.define_data_property(result_obj, si_port1, JsValue::from_js_object(a_ptr), PropAttributes::DEFAULT_DATA);
|
||||
let si_port2 = vm.perm_intern("port2");
|
||||
let _ = vm.define_data_property(
|
||||
result_obj,
|
||||
si_port2,
|
||||
JsValue::from_js_object(b_ptr),
|
||||
PropAttributes::DEFAULT_DATA,
|
||||
);
|
||||
let _ = vm.define_data_property(result_obj, si_port2, JsValue::from_js_object(b_ptr), PropAttributes::DEFAULT_DATA);
|
||||
NativeResult::Ok(JsValue::from_js_object(result_ptr))
|
||||
}
|
||||
|
||||
/// 建单枚端口对象:空形状对象挂载荷盒,`alloc_object` 入对象表。
|
||||
fn make_port_object<H: VmHost>(
|
||||
vm: &mut H,
|
||||
proto_val: JsValue,
|
||||
peer: message_queue::Sender<MessageValue>,
|
||||
vm: &mut H, proto_val: JsValue, peer: message_queue::Sender<MessageValue>,
|
||||
rx: message_queue::Receiver<MessageValue>,
|
||||
) -> (*mut JsObject, *mut MessagePortInner) {
|
||||
let mut obj = JsObject::new_empty(EMPTY_SHAPE_ID, proto_val);
|
||||
|
||||
@@ -7,9 +7,8 @@ use oxide_types::private_key::{encode_symbol_key, int_key_value, is_int_key, WEL
|
||||
use oxide_types::value::JsValue;
|
||||
|
||||
use crate::array_buffer::{
|
||||
array_buffer_payload_ptr, buffer_store, buffer_store_mut_ptr, buffer_store_ptr,
|
||||
default_array_buffer_proto, new_array_buffer, BufferStore, BufferStoreMut,
|
||||
MAX_ARRAY_BUFFER_LENGTH,
|
||||
array_buffer_payload_ptr, buffer_store, buffer_store_mut_ptr, buffer_store_ptr, default_array_buffer_proto,
|
||||
new_array_buffer, BufferStore, BufferStoreMut, MAX_ARRAY_BUFFER_LENGTH,
|
||||
};
|
||||
|
||||
use oxide_runtime_api::{NativeResult, ProtoKind, VmHost};
|
||||
@@ -2806,32 +2805,20 @@ pub fn uint8array_set_from_base64<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeR
|
||||
};
|
||||
let (read, written) = match store {
|
||||
BufferStoreMut::Ab(bytes) => {
|
||||
native_try!(ta_decode_base64(
|
||||
vm,
|
||||
string,
|
||||
options,
|
||||
Some(ta_live_length(view)),
|
||||
&mut |idx, b| {
|
||||
// 缓冲可被 resize 收缩:目标字节越界时静默不写(live 视图越界语义)。
|
||||
if start + idx < bytes.len() {
|
||||
bytes[start + idx] = b;
|
||||
}
|
||||
},
|
||||
))
|
||||
native_try!(ta_decode_base64(vm, string, options, Some(ta_live_length(view)), &mut |idx, b| {
|
||||
// 缓冲可被 resize 收缩:目标字节越界时静默不写(live 视图越界语义)。
|
||||
if start + idx < bytes.len() {
|
||||
bytes[start + idx] = b;
|
||||
}
|
||||
},))
|
||||
}
|
||||
BufferStoreMut::Sab(buffer) => {
|
||||
native_try!(ta_decode_base64(
|
||||
vm,
|
||||
string,
|
||||
options,
|
||||
Some(ta_live_length(view)),
|
||||
&mut |idx, b| {
|
||||
// 活长可被并发推进:目标字节越界时静默不写(live 视图越界语义)。
|
||||
if start + idx < buffer.len() {
|
||||
let _ = buffer.write_range(start + idx, &[b]);
|
||||
}
|
||||
},
|
||||
))
|
||||
native_try!(ta_decode_base64(vm, string, options, Some(ta_live_length(view)), &mut |idx, b| {
|
||||
// 活长可被并发推进:目标字节越界时静默不写(live 视图越界语义)。
|
||||
if start + idx < buffer.len() {
|
||||
let _ = buffer.write_range(start + idx, &[b]);
|
||||
}
|
||||
},))
|
||||
}
|
||||
};
|
||||
NativeResult::Ok(ta_read_written_result(vm, read, written))
|
||||
@@ -2943,8 +2930,8 @@ pub fn uint8array_from_hex<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use std::sync::Arc;
|
||||
use crate::array_buffer::{ArrayBufferPayload, SharedArrayBufferPayload};
|
||||
use std::sync::Arc;
|
||||
|
||||
fn gate(text: &str, length: usize) -> TaIndexGate {
|
||||
ta_index_gate_from_text(text, length)
|
||||
@@ -2974,10 +2961,7 @@ mod tests {
|
||||
obj.type_tag = JsObject::OBJ_TYPE_SHARED_ARRAY_BUFFER;
|
||||
let core = oxide_kernel::KernelCore::new(oxide_kernel::KernelConfig::minimal());
|
||||
let buffer = Arc::new(SharedBuffer::new(core, data.unwrap_or_default()));
|
||||
let payload = SharedArrayBufferPayload {
|
||||
buffer,
|
||||
growable: false,
|
||||
};
|
||||
let payload = SharedArrayBufferPayload { buffer, growable: false };
|
||||
let payload_ptr = Arc::into_raw(Arc::new(payload));
|
||||
// SAFETY: 载荷盒形态与 new_shared_array_buffer 的 native_fn 槽存储一致,测试结束前恰好释放一次。
|
||||
obj.set_native_fn(Some(unsafe { NativeFnPtr::from_raw(payload_ptr as *const ()) }));
|
||||
|
||||
Reference in New Issue
Block a user