mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-27 04:01:11 +08:00
docs: 修正 Promise 安全注记的指针所有权表述
This commit is contained in:
@@ -210,12 +210,12 @@ impl Vm {
|
|||||||
// 固定地址后互相接线:proto.constructor ↔ ctor.prototype。
|
// 固定地址后互相接线:proto.constructor ↔ ctor.prototype。
|
||||||
Self::swap_intrinsic_proto(&mut self.promise_proto, *proto);
|
Self::swap_intrinsic_proto(&mut self.promise_proto, *proto);
|
||||||
Self::swap_intrinsic_proto(&mut self.promise_constructor, *ctor);
|
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 指向不同对象,无别名。
|
// swap_intrinsic_proto 落地;与下一处 ctor_mut 指向不同对象,无别名。
|
||||||
let proto_mut = unsafe { &mut *self.promise_proto.as_mut_ptr() };
|
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));
|
proto_mut.set_prop_at(0u32, JsValue::from_js_object(self.promise_constructor.as_ptr() as *mut JsObject));
|
||||||
// SAFETY: `promise_constructor` 同为固定堆址的存活 Box;此处写 prototype
|
// SAFETY: `promise_constructor` 同为堆址固定的存活 `P<JsObject>`(Arc 透明包装);
|
||||||
// 槽位(下标 2),与 proto_mut 分属不同对象,无别名。
|
// 此处写 prototype 槽位(下标 2),与 proto_mut 分属不同对象,无别名。
|
||||||
let ctor_mut = unsafe { &mut *self.promise_constructor.as_mut_ptr() };
|
let ctor_mut = unsafe { &mut *self.promise_constructor.as_mut_ptr() };
|
||||||
// prototype 槽位在 length/name 之后(下标 2)。
|
// prototype 槽位在 length/name 之后(下标 2)。
|
||||||
ctor_mut.set_prop_at(2u32, JsValue::from_js_object(self.promise_proto.as_ptr() as *mut JsObject));
|
ctor_mut.set_prop_at(2u32, JsValue::from_js_object(self.promise_proto.as_ptr() as *mut JsObject));
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ impl Vm {
|
|||||||
/// 取出 Promise 状态盒指针(调用方须先校验 `is_promise_value`)。
|
/// 取出 Promise 状态盒指针(调用方须先校验 `is_promise_value`)。
|
||||||
pub(super) fn promise_state_ptr(&self, promise: JsValue) -> *mut PromiseState {
|
pub(super) fn promise_state_ptr(&self, promise: JsValue) -> *mut PromiseState {
|
||||||
// SAFETY: 调用方已按文档前提校验 `is_promise_value`,对象指针非空且 native_data
|
// 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 }
|
unsafe { (*promise.as_js_object_ptr()).native_data() as *mut PromiseState }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user