refactor: 退役 Vm epoch 字段面与 doc epoch 表述

This commit is contained in:
2026-10-03 10:10:20 +00:00
parent 214494d3d5
commit b5a0582843
8 changed files with 19 additions and 32 deletions
@@ -54,7 +54,8 @@ pub fn require_dispose_capability<H: VmHost>(
if obj_ptr.is_null() {
return Err(crate::error::create_type_error(vm, "DisposableStack internal state invalid"));
}
// SAFETY: obj_ptr 是当前 epoch 分配的 JsObject 非空指针;native 执行期间 epoch 不重置。
// SAFETY: obj_ptr 是 JsObject 的非空、对齐指针;对象在 native 执行期间
// 被根保持、不被回收,指针在本调用内有效。
let obj = unsafe { &*obj_ptr };
if obj.type_tag != type_tag {
return Err(crate::error::create_type_error(
+7 -7
View File
@@ -106,11 +106,11 @@ impl MapInner {
///
/// # 调用方维护的安全性契约
///
/// 指针在 Map `JsObject` 存活期间有效:`JsObject` 分配于当前 `Epoch` arena,
/// native builtin 执行期间不会调用 `Epoch::reset()`。持有分配的
/// `Box<MapInner>` 由 `new_map_inner()` 创建,进程退出前不释放(生命周期与
/// epoch 绑定,属有意为之)。native 调用为单线程,同一 Map 对象同时至多
/// 存在一个活 `*mut` 别名。
/// 指针在 Map `JsObject` 存活期间有效:`JsObject` 经统一入口分配,session GC
/// 回收界定其生命周期,native builtin 执行期间对象被根保持、不被回收。
/// 持有分配的 `Box<MapInner>` 由 `new_map_inner()` 创建,进程退出前不释放
/// (属有意为之)。native 调用为单线程,同一 Map 对象同时至多存在一个活
/// `*mut` 别名。
fn get_map_inner<H: VmHost>(vm: &mut H, this_val: JsValue) -> Result<*mut MapInner, JsValue> {
if !this_val.is_object() {
return Err(crate::error::create_type_error(vm, "called on non-Map object"));
@@ -119,8 +119,8 @@ fn get_map_inner<H: VmHost>(vm: &mut H, this_val: JsValue) -> Result<*mut MapInn
if map_ptr.is_null() {
return Err(crate::error::create_type_error(vm, "Map internal state invalid"));
}
// SAFETY: map_ptr 是当前 Epoch bump 分配的 JsObject 的非空、对齐指针;
// native 执行期间 epoch 不重置,指针在本调用内有效。
// SAFETY: map_ptr 是 JsObject 的非空、对齐指针;对象在 native 执行期间
// 被根保持、不被回收,指针在本调用内有效。
let map_obj = unsafe { &*map_ptr };
if !map_obj.is_map() {
return Err(crate::error::create_type_error(
+5 -5
View File
@@ -87,9 +87,9 @@ pub(crate) type SetInner = indexmap::IndexSet<SetKey>;
///
/// # 调用方维护的安全性契约
///
/// 指针在 Set `JsObject` 存活期间有效:`JsObject` 分配于当前 `Epoch` arena,
/// native builtin 执行期间不会调用 `Epoch::reset()`。持有分配的
/// `Box<IndexSet>` 由 `new_set_inner()` 创建,Set 生命周期内不释放。
/// 指针在 Set `JsObject` 存活期间有效:`JsObject` 经统一入口分配,session GC
/// 回收界定其生命周期,native builtin 执行期间对象被根保持、不被回收。
/// 持有分配的 `Box<IndexSet>` 由 `new_set_inner()` 创建,Set 生命周期内不释放。
/// native 调用为单线程,同一 Set 对象同时至多存在一个活 `*mut` 别名。
fn get_set_inner<H: VmHost>(vm: &mut H, this_val: JsValue) -> Result<*mut SetInner, JsValue> {
if !this_val.is_object() {
@@ -99,8 +99,8 @@ fn get_set_inner<H: VmHost>(vm: &mut H, this_val: JsValue) -> Result<*mut SetInn
if set_ptr.is_null() {
return Err(crate::error::create_type_error(vm, "Set internal state invalid"));
}
// SAFETY: set_ptr 是当前 Epoch bump 分配的 JsObject 的非空、对齐指针,
// 本调用期间有效。
// SAFETY: set_ptr 是 JsObject 的非空、对齐指针;对象在 native 执行期间
// 被根保持、不被回收,指针在本调用内有效。
let set_obj = unsafe { &*set_ptr };
if !set_obj.is_set() {
return Err(crate::error::create_type_error(vm, "Set.prototype.add called on incompatible receiver"));