refactor: 退役 new_array 死参数与三十四处调用点

This commit is contained in:
2026-10-03 04:32:20 +00:00
parent a4d70a8bfe
commit 214494d3d5
18 changed files with 38 additions and 111 deletions
+2 -4
View File
@@ -392,9 +392,8 @@ impl Vm {
let n = count as usize;
let rest_len = n.saturating_sub(fixed_count);
let proto_ptr = self.session.builtin_world().array_proto.as_ptr() as *mut JsObject;
let bump = self.epoch.bump();
let obj_ptr =
self.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, JsValue::from_js_object(proto_ptr), rest_len, bump));
self.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, JsValue::from_js_object(proto_ptr), rest_len));
let obj = unsafe { &mut *obj_ptr };
for i in 0..rest_len {
let val = self
@@ -413,8 +412,7 @@ impl Vm {
let n = opcode::imm16(instr) as usize;
vm_trace!("NEW_ARRAY rd={} n={}", rd, n);
let proto_ptr = self.session.builtin_world().array_proto.as_ptr() as *mut JsObject;
let bump = self.epoch.bump();
let obj = self.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, JsValue::from_js_object(proto_ptr), n, bump));
let obj = self.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, JsValue::from_js_object(proto_ptr), n));
self.regs[rd] = JsValue::object(obj as *mut u8);
}
+1 -2
View File
@@ -387,8 +387,7 @@ mod tests {
#[test]
fn ic_get_hit_virtual_length_marker_hits_array() {
// shape 1(空形状)数组经虚拟长度标记命中:返回逻辑长度。
let bump = bumpalo::Bump::new();
let arr = JsObject::new_array(EMPTY_SHAPE_ID, JsValue::null(), 3, &bump);
let arr = JsObject::new_array(EMPTY_SHAPE_ID, JsValue::null(), 3);
assert_eq!(ic_get_hit(&arr, EMPTY_SHAPE_ID, VIRTUAL_LENGTH_SLOT, 0), Some(JsValue::int(3)));
}
+3 -3
View File
@@ -136,7 +136,7 @@ impl Vm {
/// 把 errors 可迭代值收集为新数组(IterableToList)。不可迭代抛 TypeError。
fn aggregate_errors_to_list(&mut self, errors: JsValue) -> Result<JsValue, JsValue> {
let array_proto = JsValue::from_js_object(self.session.builtin_world().array_proto.as_ptr() as *mut JsObject);
let ptr = self.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, array_proto, 0, self.epoch.bump()));
let ptr = self.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, array_proto, 0));
let list = JsValue::from_js_object(ptr);
let mut index = 0usize;
oxide_builtins::iterator::iterate_elements(self, errors, |_vm, elem| {
@@ -152,7 +152,7 @@ impl Vm {
/// 建普通数组对象并依次写入元素(Promise.try 转发实参的承载)。
fn make_plain_array(&mut self, elements: Vec<JsValue>) -> JsValue {
let array_proto = JsValue::from_js_object(self.session.builtin_world().array_proto.as_ptr() as *mut JsObject);
let ptr = self.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, array_proto, 0, self.epoch.bump()));
let ptr = self.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, array_proto, 0));
// SAFETY: ptr 由 alloc_object 新建,返回非空 arena 指针;元素写入不搬移对象。
let obj = unsafe { &mut *ptr };
for (i, elem) in elements.into_iter().enumerate() {
@@ -482,7 +482,7 @@ fn perform_promise_combine(
JsValue::undefined()
} else {
let array_proto = JsValue::from_js_object(vm.session.builtin_world().array_proto.as_ptr() as *mut JsObject);
let ptr = vm.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, array_proto, 0, vm.epoch.bump()));
let ptr = vm.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, array_proto, 0));
JsValue::from_js_object(ptr)
};
let record = vm.make_agg_record(values, resolve, reject);
-2
View File
@@ -195,7 +195,6 @@ fn sweep_preserves_array_elements_and_collects_dead_element_object() {
oxide_kernel::shape_forge::EMPTY_SHAPE_ID,
JsValue::from_js_object(array_proto),
2,
vm.epoch.bump(),
));
let live_elem = plain_object(&mut vm);
let dead_elem = plain_object(&mut vm);
@@ -1501,7 +1500,6 @@ fn run_alloc_formula_lists_bigint_and_cell_via_tables() {
oxide_kernel::shape_forge::EMPTY_SHAPE_ID,
JsValue::from_js_object(vm.session.builtin_world().array_proto.as_ptr() as *mut JsObject),
2,
vm.epoch.bump(),
));
vm.regs[3] = JsValue::from_js_object(arr);
let s = vm.new_string_owned("formula".repeat(4));
+1 -1
View File
@@ -1201,7 +1201,7 @@ impl Vm {
// 时对象地址稳定,缓存指针不失效——分配档不同则首次写入触发搬移,
// 缓存旧指针与新实例分叉,同一 site 两次取值将返回不同对象。
let mut alloc_session_array = |n: usize| {
let clone = JsObject::new_array(oxide_kernel::shape_forge::EMPTY_SHAPE_ID, proto_val, n, self.epoch.bump());
let clone = JsObject::new_array(oxide_kernel::shape_forge::EMPTY_SHAPE_ID, proto_val, n);
self.alloc_session_object(clone)
};
let cooked = alloc_session_array(n);
+2 -6
View File
@@ -1682,12 +1682,8 @@ mod tests {
fn new_array_val(vm: &mut Vm, n: u32) -> JsValue {
let proto = vm.session.builtin_world().array_proto.as_ptr() as *mut JsObject;
let arr = JsObject::new_array(
oxide_kernel::shape_forge::EMPTY_SHAPE_ID,
JsValue::from_js_object(proto),
n as usize,
vm.epoch.bump(),
);
let arr =
JsObject::new_array(oxide_kernel::shape_forge::EMPTY_SHAPE_ID, JsValue::from_js_object(proto), n as usize);
JsValue::object(vm.alloc_object(arr) as *mut u8)
}