perf(test262): +2.4% pass rate via Function .name/.length and ArrayLike support

- Array indexOf/includes/lastIndexOf: ArrayLike receiver + fromIndex + SameValueZero
- Function.prototype methods: add .length property via bind_method_static
- Error objects: add .name property via create_kind_error
- Constructor functions: add .name via make_pair + .length via bind_constructor!
- test262: 8497→9009 pass (+512), 38.3%→40.7% rate

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit af61949e6cab1b149a13e571e29bacc4267d5690)
This commit is contained in:
爱特每羊队
2026-06-28 18:23:08 +08:00
parent db013bd4f6
commit 05f1056cde
4 changed files with 161 additions and 38 deletions
+5
View File
@@ -49,6 +49,11 @@ macro_rules! bind_constructor {
let ptr: *const () = ($ctor_fn as fn(&mut $crate::vm::Vm, &[u8]) -> oxide_runtime_api::NativeResult) as *const ();
ctor.set_native_fn(Some(unsafe { oxide_types::object::NativeFnPtr::from_raw(ptr) }));
ctor.set_native_arg_count($nargs);
// 设置 constructor.length (Function.length = formal parameter count)
let length_si = $core.perm_interner().intern("length").0;
let length_shape = $core.shape_forge().make_shape(ctor.shape_id(), length_si);
ctor.set_shape_id(length_shape);
ctor.ensure_hash_props().push($crate::JsValue::int($nargs as i32));
}};
}