From bd7426b23b62b2bb5e7542cad51b3ebf10a930c6 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Sat, 3 Oct 2026 00:13:39 +0000 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=80=80=E5=BD=B9=20promise=20?= =?UTF-8?q?=E7=BB=93=E7=AE=97=E4=BC=A0=E5=AF=BC=E9=93=BE=20promoted=5Fclon?= =?UTF-8?q?e=20=E5=AD=97=E6=AE=B5=E4=B8=8E=E6=AD=BB=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_vm/src/promise/constructor.rs | 2 -- crates/oxide_vm/src/promise/gc_edges.rs | 7 ------- crates/oxide_vm/src/promise/mod.rs | 6 ------ crates/oxide_vm/src/promise/settlement.rs | 19 +------------------ 4 files changed, 1 insertion(+), 33 deletions(-) diff --git a/crates/oxide_vm/src/promise/constructor.rs b/crates/oxide_vm/src/promise/constructor.rs index 37531ee4..a082796b 100644 --- a/crates/oxide_vm/src/promise/constructor.rs +++ b/crates/oxide_vm/src/promise/constructor.rs @@ -35,7 +35,6 @@ impl Vm { resolve_fn: JsValue::undefined(), reject_fn: JsValue::undefined(), already_resolved: false, - promoted_clone: std::ptr::null_mut(), }); obj.set_native_data(Box::into_raw(state) as *mut u8); JsValue::from_js_object(ptr) @@ -431,7 +430,6 @@ fn promise_constructor(vm: &mut Vm, args: &[u8]) -> NativeResult { resolve_fn: resolve, reject_fn: reject, already_resolved: false, - promoted_clone: std::ptr::null_mut(), }); obj.set_native_data(Box::into_raw(state) as *mut u8); match vm.call_function_sync(executor, JsValue::undefined(), &[resolve, reject]) { diff --git a/crates/oxide_vm/src/promise/gc_edges.rs b/crates/oxide_vm/src/promise/gc_edges.rs index dee9b1dc..bcbd2808 100644 --- a/crates/oxide_vm/src/promise/gc_edges.rs +++ b/crates/oxide_vm/src/promise/gc_edges.rs @@ -1,6 +1,4 @@ //! Promise 状态盒的 session GC 支撑:值边、字节核算与释放三类接线。 -//! -//! 结算链指针是裸指针边、不是 JsValue。 use oxide_types::object::JsObject; use oxide_types::value::JsValue; @@ -17,11 +15,6 @@ pub(crate) fn promise_native_edges(obj: &JsObject) -> Vec { edges.push(state.result); edges.push(state.resolve_fn); edges.push(state.reject_fn); - // 结算链指针:克隆恒为 session 表成员,凭这条边在原件/旧克隆仍存活时被 - // 同轮置活,结算传导不会读到悬垂克隆。 - if !state.promoted_clone.is_null() { - edges.push(JsValue::from_js_object(state.promoted_clone)); - } for r in &state.reactions { edges.push(r.promise); edges.push(r.resolve); diff --git a/crates/oxide_vm/src/promise/mod.rs b/crates/oxide_vm/src/promise/mod.rs index 0103b440..a6d72329 100644 --- a/crates/oxide_vm/src/promise/mod.rs +++ b/crates/oxide_vm/src/promise/mod.rs @@ -49,12 +49,6 @@ pub(crate) struct PromiseState { /// resolve/reject 是否已被调用过(Resolve Promise Functions 的 alreadyResolved)。 /// 首次调用后置位,后续任何 resolve/reject(含 thenable 委托期间)均 no-op。 pub already_resolved: bool, - /// 结算传导链指针:非空时指向本 promise 晋升出的 session 克隆,原件结算时 - /// 结果沿它传导到克隆;再晋升场景旧克隆的残留反应被取回归并进新克隆, - /// 指针更新为最新克隆。非 pending 原件恒为空指针。本指针在 - /// `promise_native_edges` 登记为 mark 边:克隆恒为 session 表成员,凭这条 - /// 边在原件仍存活时被同轮置活,结算不会读到悬垂克隆。 - pub promoted_clone: *mut JsObject, } /// 一条微任务(job)。 diff --git a/crates/oxide_vm/src/promise/settlement.rs b/crates/oxide_vm/src/promise/settlement.rs index c5e1c1c7..8c63b20f 100644 --- a/crates/oxide_vm/src/promise/settlement.rs +++ b/crates/oxide_vm/src/promise/settlement.rs @@ -2,7 +2,7 @@ //! PromiseResolve / fulfill / reject 结算路径。 //! //! 结算单次性:闭包首调置位 `already_resolved`,`state != Pending` -//! 最终守卫;结算后反应入微任务队列,并沿 `promoted_clone` 链传导克隆。 +//! 最终守卫;结算后反应入微任务队列。 use oxide_kernel::shape_forge::EMPTY_SHAPE_ID; use oxide_runtime_api::NativeResult; @@ -267,15 +267,6 @@ impl Vm { reject: r.reject, }); } - // 原件若已晋升出克隆,把结算传导到克隆:克隆上晋升后新挂的反应方随此触发 - // (顶层 var 读克隆,原件反应已在本处直接触发,不重复传导)。 - // SAFETY: 同一 `state_ptr`,前块可变借用已结束;盒仍存活,promoted_clone - // 由 promise_native_edges 的 mark 边保证同轮存活(mod.rs 模块头不变量)。 - let clone_ptr = unsafe { (*state_ptr).promoted_clone }; - if !clone_ptr.is_null() { - let clone = JsValue::from_js_object(clone_ptr); - let _ = self.fulfill_promise(clone, value); - } Ok(()) } @@ -302,14 +293,6 @@ impl Vm { reject: r.reject, }); } - // 原件若已晋升出克隆,把拒绝传导到克隆(同 fulfill:顶层 var 读克隆)。 - // SAFETY: 同一 `state_ptr`,前块可变借用已结束;盒仍存活,promoted_clone - // 由 promise_native_edges 的 mark 边保证同轮存活(mod.rs 模块头不变量)。 - let clone_ptr = unsafe { (*state_ptr).promoted_clone }; - if !clone_ptr.is_null() { - let clone = JsValue::from_js_object(clone_ptr); - let _ = self.reject_promise(clone, reason); - } Ok(()) }