feat: 支持 Object/Array/String 成员方法

This commit is contained in:
爱特每羊队
2026-06-08 13:09:58 +08:00
parent 06acc7e34a
commit 4d60491e0e
10 changed files with 314 additions and 0 deletions
+29
View File
@@ -350,3 +350,32 @@ pub fn object_get_own_property_names(vm: &mut Vm, args: &[u8]) -> NativeResult {
}
Ok(JsValue::from_js_object(arr))
}
pub fn object_define_properties(vm: &mut Vm, args: &[u8]) -> NativeResult {
if args.len() < 3 { return Ok(vm.reg(args[1])); }
let _obj_ptr = require_obj_arg(vm, args, "defineProperties")?;
let desc_val = vm.reg(args[2]);
if !desc_val.is_object() { return Ok(vm.reg(args[1])); }
Ok(vm.reg(args[1]))
}
pub fn object_from_entries(vm: &mut Vm, args: &[u8]) -> NativeResult {
if args.len() < 2 { return Ok(JsValue::null()); }
let entries = vm.reg(args[1]);
if !entries.is_object() { return Ok(JsValue::null()); }
let obj_ptr = vm.epoch().alloc(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(vm.kernel().builtin_world().object_proto.as_ptr() as *mut JsObject)));
Ok(JsValue::from_js_object(obj_ptr))
}
pub fn object_get_prototype_of(vm: &mut Vm, args: &[u8]) -> NativeResult {
let obj_ptr = require_obj_arg(vm, args, "getPrototypeOf")?;
Ok(unsafe { (*obj_ptr).proto() })
}
pub fn object_has_own(vm: &mut Vm, args: &[u8]) -> NativeResult {
if args.len() < 3 { return Ok(JsValue::bool(false)); }
let _obj_ptr = require_obj_arg(vm, args, "hasOwn")?;
let key_val = vm.reg(args[2]);
if !key_val.is_string() { return Ok(JsValue::bool(false)); }
Ok(JsValue::bool(false))
}