From 2554b7a3caa95e6223b9f11dbcbb468665418179 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Thu, 17 Sep 2026 15:26:03 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20=E8=A1=A5=E5=85=A8=20Promise=20?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=9B=92=E4=B8=8E=20GC=20=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_vm/src/promise/gc_edges.rs | 1 + crates/oxide_vm/src/promise/mod.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/crates/oxide_vm/src/promise/gc_edges.rs b/crates/oxide_vm/src/promise/gc_edges.rs index 994cd1b1..6a91d6b6 100644 --- a/crates/oxide_vm/src/promise/gc_edges.rs +++ b/crates/oxide_vm/src/promise/gc_edges.rs @@ -175,6 +175,7 @@ pub(crate) fn promise_native_size(obj: &JsObject) -> u64 { if ptr.is_null() { return 0; } + // SAFETY: !is_promise_obj 与 ptr.is_null 已早退,ptr 非空且指向存活 Box,此处只读容量不释放。 unsafe { std::mem::size_of::() as u64 + (*ptr).reactions.capacity() as u64 * std::mem::size_of::() as u64 diff --git a/crates/oxide_vm/src/promise/mod.rs b/crates/oxide_vm/src/promise/mod.rs index 3ff25dd9..a8808269 100644 --- a/crates/oxide_vm/src/promise/mod.rs +++ b/crates/oxide_vm/src/promise/mod.rs @@ -126,6 +126,7 @@ fn is_constructor_value(c: JsValue) -> bool { if !c.is_object() { return false; } + // SAFETY: is_object 保证指针非空且指向存活 arena 对象,此处只读函数标志并立即消费。 let c_obj = unsafe { &*c.as_js_object_ptr() }; c_obj.is_function() && !c_obj.is_arrow()