chore: 清理 oxide_vm clippy 告警
This commit is contained in:
@@ -294,7 +294,7 @@ fn async_from_sync_unwrap(vm: &mut Vm, args: &[u8]) -> NativeResult {
|
||||
let done_si = vm.kernel_core.perm_interner().intern(ASFS_DONE_PROP).0;
|
||||
let done = vm
|
||||
.resolve_property(callee_obj, done_si)
|
||||
.map_or(false, oxide_runtime_api::to_boolean);
|
||||
.is_some_and(oxide_runtime_api::to_boolean);
|
||||
let value = if args.len() > 1 { vm.reg(args[1]) } else { JsValue::undefined() };
|
||||
let result = make_iter_result(vm, value, done);
|
||||
let _ = vm.call_function_sync(resolve, JsValue::undefined(), &[result]);
|
||||
|
||||
@@ -381,7 +381,7 @@ fn async_await_resume_closure(vm: &mut Vm, args: &[u8]) -> NativeResult {
|
||||
let ctx_si = vm.kernel_core.perm_interner().intern(ASYNC_CTX_PROP).0;
|
||||
let ctx = vm.resolve_property(callee_obj, ctx_si).unwrap_or(JsValue::undefined());
|
||||
let role_si = vm.kernel_core.perm_interner().intern(ASYNC_REJECT_PROP).0;
|
||||
let is_reject = vm.resolve_property(callee_obj, role_si).map_or(false, to_boolean);
|
||||
let is_reject = vm.resolve_property(callee_obj, role_si).is_some_and(to_boolean);
|
||||
let value = if args.len() > 1 { vm.reg(args[1]) } else { JsValue::undefined() };
|
||||
let mode = if is_reject {
|
||||
AsyncResumeMode::Throw(value)
|
||||
@@ -445,6 +445,7 @@ fn async_function_stub(vm: &mut Vm, _args: &[u8]) -> NativeResult {
|
||||
|
||||
// ── session GC 支撑:状态快照中的 JsValues 作为异步上下文对象边追踪 ──
|
||||
|
||||
#[expect(clippy::mut_from_ref)]
|
||||
fn async_state_mut(obj: &JsObject) -> Option<&mut AsyncState> {
|
||||
let ptr = obj.native_data() as *mut AsyncState;
|
||||
if ptr.is_null() {
|
||||
|
||||
@@ -610,7 +610,7 @@ fn async_gen_await_resume_closure(vm: &mut Vm, args: &[u8]) -> NativeResult {
|
||||
let role_si = vm.kernel_core.perm_interner().intern(AG_REJECT_PROP).0;
|
||||
let is_reject = vm
|
||||
.resolve_property(callee_obj, role_si)
|
||||
.map_or(false, oxide_runtime_api::to_boolean);
|
||||
.is_some_and(oxide_runtime_api::to_boolean);
|
||||
let value = if args.len() > 1 { vm.reg(args[1]) } else { JsValue::undefined() };
|
||||
// 把 await 结果写入当前请求的注入模式,resume 时按角色恢复。
|
||||
if ctx.is_object() {
|
||||
@@ -649,11 +649,11 @@ fn async_gen_yield_unwrap_closure(vm: &mut Vm, args: &[u8]) -> NativeResult {
|
||||
let raw_si = vm.kernel_core.perm_interner().intern(AG_YIELD_RAW_PROP).0;
|
||||
let raw = vm
|
||||
.resolve_property(callee_obj, raw_si)
|
||||
.map_or(false, oxide_runtime_api::to_boolean);
|
||||
.is_some_and(oxide_runtime_api::to_boolean);
|
||||
let role_si = vm.kernel_core.perm_interner().intern(AG_REJECT_PROP).0;
|
||||
let is_reject = vm
|
||||
.resolve_property(callee_obj, role_si)
|
||||
.map_or(false, oxide_runtime_api::to_boolean);
|
||||
.is_some_and(oxide_runtime_api::to_boolean);
|
||||
let value = if args.len() > 1 { vm.reg(args[1]) } else { JsValue::undefined() };
|
||||
if is_reject {
|
||||
// yield 值被拒:next() 的 promise reject,且生成器关闭(后续 next 直接 done)。
|
||||
@@ -817,6 +817,7 @@ fn async_generator_function_stub(vm: &mut Vm, _args: &[u8]) -> NativeResult {
|
||||
|
||||
// ── session GC 支撑:状态快照中的 JsValues 作为异步生成器对象边追踪 ──
|
||||
|
||||
#[expect(clippy::mut_from_ref)]
|
||||
fn async_gen_state_mut(obj: &JsObject) -> Option<&mut AsyncGeneratorState> {
|
||||
let ptr = obj.native_data() as *mut AsyncGeneratorState;
|
||||
if ptr.is_null() {
|
||||
|
||||
@@ -79,7 +79,7 @@ fn set_bypes_per_element(core: &Arc<KernelCore>, ctor_ptr: *mut JsObject, proto_
|
||||
let proto_shape = core.shape_forge().make_shape(proto.shape_id(), bpe_si);
|
||||
proto.set_shape_id(proto_shape);
|
||||
let proto_pos = proto.push_prop(bpe_val);
|
||||
proto.set_data_meta(proto_pos as u32, attrs);
|
||||
proto.set_data_meta(proto_pos, attrs);
|
||||
proto.bump_generation();
|
||||
}
|
||||
|
||||
|
||||
@@ -273,12 +273,9 @@ impl Vm {
|
||||
let a = lv.as_int();
|
||||
let b = rv.as_int();
|
||||
if b != 0 {
|
||||
match a.checked_rem(b) {
|
||||
Some(v) => {
|
||||
self.regs[rd] = JsValue::int(v);
|
||||
return Ok(());
|
||||
}
|
||||
None => {}
|
||||
if let Some(v) = a.checked_rem(b) {
|
||||
self.regs[rd] = JsValue::int(v);
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
self.regs[rd] = JsValue::float(a as f64 % b as f64);
|
||||
|
||||
@@ -256,6 +256,7 @@ impl Vm {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
fn dispatch_compound_member_shift(
|
||||
&mut self, op_name: &str, rd: usize, a: usize, b: usize, error_msg: &str, is_right: bool, is_unsigned: bool,
|
||||
) -> Result<(), String> {
|
||||
|
||||
@@ -797,6 +797,7 @@ fn generator_function_stub(vm: &mut Vm, _args: &[u8]) -> NativeResult {
|
||||
|
||||
// ── session GC 支撑:状态快照中的 JsValues 作为生成器对象边追踪 ──
|
||||
|
||||
#[expect(clippy::mut_from_ref)]
|
||||
fn generator_state_mut(obj: &JsObject) -> Option<&mut GeneratorState> {
|
||||
let ptr = obj.native_data() as *mut GeneratorState;
|
||||
if ptr.is_null() {
|
||||
|
||||
@@ -1069,7 +1069,7 @@ fn promise_finally_handler(vm: &mut Vm, args: &[u8]) -> NativeResult {
|
||||
let rj_si = vm.kernel_core.perm_interner().intern(FINALLY_REJECT_PROP).0;
|
||||
let is_reject = vm
|
||||
.resolve_property(callee_obj, rj_si)
|
||||
.map_or(false, oxide_runtime_api::to_boolean);
|
||||
.is_some_and(oxide_runtime_api::to_boolean);
|
||||
let value = if args.len() > 1 { vm.reg(args[1]) } else { JsValue::undefined() };
|
||||
match vm.call_function_sync(on_finally, JsValue::undefined(), &[]) {
|
||||
Ok(_) => {
|
||||
@@ -1366,7 +1366,7 @@ fn agg_element_state(vm: &mut Vm) -> Option<(JsValue, i32)> {
|
||||
let al_si = vm.kernel_core.perm_interner().intern(AGG_ALREADY_PROP).0;
|
||||
// SAFETY: callee 是当前调用的存活函数对象。
|
||||
let callee_ref = unsafe { &*callee_ptr };
|
||||
if vm.resolve_property(callee_ref, al_si).map_or(false, oxide_runtime_api::to_boolean) {
|
||||
if vm.resolve_property(callee_ref, al_si).is_some_and(oxide_runtime_api::to_boolean) {
|
||||
return None;
|
||||
}
|
||||
let record = vm.resolve_property(callee_ref, rec_si).unwrap_or(JsValue::undefined());
|
||||
@@ -1464,7 +1464,7 @@ fn promise_all_resolve_element(vm: &mut Vm, args: &[u8]) -> NativeResult {
|
||||
NativeResult::Ok(JsValue::undefined())
|
||||
}
|
||||
|
||||
/// `Promise.race` 使用能力 resolve/reject 直连,无独立元素函数。
|
||||
// `Promise.race` 使用能力 resolve/reject 直连,无独立元素函数。
|
||||
|
||||
/// `Promise.allSettled` resolve 元素:写 `{status:'fulfilled', value}` 记录。
|
||||
fn promise_all_settled_resolve_element(vm: &mut Vm, args: &[u8]) -> NativeResult {
|
||||
@@ -1587,8 +1587,8 @@ fn capability_executor(vm: &mut Vm, args: &[u8]) -> NativeResult {
|
||||
let obj = unsafe { &*callee.as_js_object_ptr() };
|
||||
let res_si = vm.kernel_core.perm_interner().intern(CAP_RESOLVE_PROP).0;
|
||||
let rej_si = vm.kernel_core.perm_interner().intern(CAP_REJECT_PROP).0;
|
||||
let held = vm.resolve_property(obj, res_si).map_or(false, |v| !v.is_undefined())
|
||||
|| vm.resolve_property(obj, rej_si).map_or(false, |v| !v.is_undefined());
|
||||
let held = vm.resolve_property(obj, res_si).is_some_and(|v| !v.is_undefined())
|
||||
|| vm.resolve_property(obj, rej_si).is_some_and(|v| !v.is_undefined());
|
||||
if held {
|
||||
return NativeResult::Err(oxide_builtins::error::create_type_error(
|
||||
vm,
|
||||
@@ -1615,6 +1615,7 @@ fn promise_state_ref(obj: &JsObject) -> Option<&PromiseState> {
|
||||
}
|
||||
}
|
||||
|
||||
#[expect(clippy::mut_from_ref)]
|
||||
fn promise_state_mut(obj: &JsObject) -> Option<&mut PromiseState> {
|
||||
let ptr = obj.native_data() as *mut PromiseState;
|
||||
if ptr.is_null() {
|
||||
|
||||
@@ -80,7 +80,7 @@ impl SuspendedFrame {
|
||||
pub fn save_from(&mut self, vm: &mut Vm, callee: JsValue) -> Result<(), String> {
|
||||
let frame = vm.frames.pop().ok_or_else(|| "frame missing on suspend".to_string())?;
|
||||
self.frame = Some(frame);
|
||||
self.regs = Box::new(vm.regs);
|
||||
*self.regs = vm.regs;
|
||||
self.pc = vm.pc;
|
||||
self.bytecode = std::mem::take(&mut vm.bytecode);
|
||||
self.sub_idx = if callee.is_object() {
|
||||
|
||||
@@ -755,7 +755,7 @@ impl Vm {
|
||||
if !global_ptr.is_null() {
|
||||
// SAFETY: KernelSession 在 VM 生命周期内拥有 global_object。
|
||||
unsafe {
|
||||
(*global_ptr).rewrite_object_values(|value| rewrite(value));
|
||||
(*global_ptr).rewrite_object_values(rewrite);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -315,9 +315,7 @@ impl Vm {
|
||||
return None;
|
||||
}
|
||||
let (frame_depth, finally_pc, finally_active) = {
|
||||
let Some(h) = self.try_stack.last() else {
|
||||
return None;
|
||||
};
|
||||
let h = self.try_stack.last()?;
|
||||
(h.frame_depth, h.finally_pc, h.finally_active)
|
||||
};
|
||||
if frame_depth != depth {
|
||||
@@ -524,9 +522,7 @@ impl Vm {
|
||||
let depth = self.frames.len();
|
||||
loop {
|
||||
let (frame_depth, finally_pc, finally_active) = {
|
||||
let Some(h) = self.try_stack.last() else {
|
||||
return None;
|
||||
};
|
||||
let h = self.try_stack.last()?;
|
||||
(h.frame_depth, h.finally_pc, h.finally_active)
|
||||
};
|
||||
if frame_depth != depth {
|
||||
|
||||
@@ -415,7 +415,7 @@ impl Vm {
|
||||
// std Vec 建完后迁入 bump 区,避免枚举循环期间对 self 的 &mut 借用
|
||||
// 与 bump 借用冲突。
|
||||
let keys_bump: bumpalo::collections::Vec<(JsValue, u32)> =
|
||||
bumpalo::collections::Vec::from_iter_in(keys_vec.into_iter(), self.epoch.bump());
|
||||
bumpalo::collections::Vec::from_iter_in(keys_vec, self.epoch.bump());
|
||||
let iter = self.epoch.alloc(ForInIter { keys: keys_bump, index: 0 });
|
||||
self.iters.push_for_in(iter.cast::<ForInIter<'static>>());
|
||||
Ok(())
|
||||
@@ -555,20 +555,14 @@ impl Vm {
|
||||
}
|
||||
let iter_obj = unsafe { &*iterator.as_js_object_ptr() };
|
||||
let return_si = self.kernel_core.perm_interner().intern("return").0;
|
||||
let return_fn = match self.ordinary_get(iter_obj, return_si, iterator) {
|
||||
Ok(v) => v,
|
||||
Err(e) => return Err(e),
|
||||
};
|
||||
let return_fn = self.ordinary_get(iter_obj, return_si, iterator)?;
|
||||
if !return_fn.is_object() {
|
||||
return Ok(());
|
||||
}
|
||||
if !unsafe { &*return_fn.as_js_object_ptr() }.is_function() {
|
||||
return Ok(());
|
||||
}
|
||||
let inner = match self.call_function_sync(return_fn, iterator, &[]) {
|
||||
Ok(v) => v,
|
||||
Err(e) => return Err(e),
|
||||
};
|
||||
let inner = self.call_function_sync(return_fn, iterator, &[])?;
|
||||
if !inner.is_object() {
|
||||
return self.raise_type_error("iterator return() result is not an object");
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ impl Vm {
|
||||
// receiver 非 TA 时按规范把写入落到 receiver 对象,不碰 TA buffer。
|
||||
if obj.is_typed_array_obj() {
|
||||
if let Some(index) = self.array_index_from_property_key(prop_name_si) {
|
||||
if receiver.as_js_object_ptr() != obj as *const JsObject as *mut JsObject {
|
||||
if !std::ptr::eq(receiver.as_js_object_ptr(), obj as *mut JsObject) {
|
||||
return self.set_to_receiver(obj, prop_name_si, val, receiver, index as usize, use_frame_push);
|
||||
}
|
||||
return oxide_builtins::typed_array::typed_array_element_set(self, obj, index, val);
|
||||
@@ -547,6 +547,7 @@ impl Vm {
|
||||
|
||||
/// 数组索引属性(`"0"`~`"4294967294"`)的 define 路径:存入元素区并维护
|
||||
/// `array_prop_count`(length 随最高索引增长),meta 与元素槽对齐。
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
fn define_array_index_element(
|
||||
&mut self, obj: &mut JsObject, index: u32, val: JsValue, attributes: PropAttributes, is_accessor: bool,
|
||||
get: JsValue, set: JsValue,
|
||||
|
||||
@@ -36,7 +36,7 @@ fn format_value(vm: &Vm, val: oxide_vm::JsValue) -> String {
|
||||
None => "<pending>".to_string(),
|
||||
}
|
||||
} else if obj.is_array() {
|
||||
format!("[array]")
|
||||
"[array]".to_string()
|
||||
} else {
|
||||
"[object]".to_string()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user