docs: 修正 Promise 安全注记的指针所有权表述

This commit is contained in:
2026-09-17 15:03:21 +00:00
parent 21348be840
commit 604a785bf9
2 changed files with 4 additions and 4 deletions
+3 -3
View File
@@ -210,12 +210,12 @@ impl Vm {
// 固定地址后互相接线:proto.constructor ↔ ctor.prototype。
Self::swap_intrinsic_proto(&mut self.promise_proto, *proto);
Self::swap_intrinsic_proto(&mut self.promise_constructor, *ctor);
// SAFETY: `promise_proto` 为 Box<JsObject>,固定堆址且本行前刚经
// SAFETY: `promise_proto` 为 `P<JsObject>`(Arc 透明包装),堆址固定且本行前刚经
// swap_intrinsic_proto 落地;与下一处 ctor_mut 指向不同对象,无别名。
let proto_mut = unsafe { &mut *self.promise_proto.as_mut_ptr() };
proto_mut.set_prop_at(0u32, JsValue::from_js_object(self.promise_constructor.as_ptr() as *mut JsObject));
// SAFETY: `promise_constructor` 同为固定堆址的存活 Box;此处写 prototype
// 槽位(下标 2),与 proto_mut 分属不同对象,无别名。
// SAFETY: `promise_constructor` 同为堆址固定的存活 `P<JsObject>`(Arc 透明包装);
// 此处写 prototype 槽位(下标 2),与 proto_mut 分属不同对象,无别名。
let ctor_mut = unsafe { &mut *self.promise_constructor.as_mut_ptr() };
// prototype 槽位在 length/name 之后(下标 2)。
ctor_mut.set_prop_at(2u32, JsValue::from_js_object(self.promise_proto.as_ptr() as *mut JsObject));
+1 -1
View File
@@ -139,7 +139,7 @@ impl Vm {
/// 取出 Promise 状态盒指针(调用方须先校验 `is_promise_value`)。
pub(super) fn promise_state_ptr(&self, promise: JsValue) -> *mut PromiseState {
// SAFETY: 调用方已按文档前提校验 `is_promise_value`,对象指针非空且 native_data
// 为 create_promise_object 写入的 Box<PromiseState>;裸指针由调用方即时解引用。
// 为 create_promise_object 或 promise_constructor 写入的 Box<PromiseState>;裸指针由调用方即时解引用。
unsafe { (*promise.as_js_object_ptr()).native_data() as *mut PromiseState }
}