mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-23 18:21:13 +08:00
refactor: 退役 new_array 死参数与三十四处调用点
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user