diff options
author | 2022-05-04 19:41:18 -0700 | |
---|---|---|
committer | 2022-05-05 21:35:08 -0700 | |
commit | 170d09b6bd1a941c72a9b468afcf4979791e7908 (patch) | |
tree | e6cb09d39532435e5310d514424f9ee4560d4b06 /src | |
parent | b4fc584d1879f48606def40e4d7e0b74f9b66a4c (diff) | |
download | bun-170d09b6bd1a941c72a9b468afcf4979791e7908.tar.gz bun-170d09b6bd1a941c72a9b468afcf4979791e7908.tar.zst bun-170d09b6bd1a941c72a9b468afcf4979791e7908.zip |
More
Diffstat (limited to 'src')
-rw-r--r-- | src/javascript/jsc/bindings/bindings.zig | 7 | ||||
-rw-r--r-- | src/napi/napi.zig | 44 |
2 files changed, 44 insertions, 7 deletions
diff --git a/src/javascript/jsc/bindings/bindings.zig b/src/javascript/jsc/bindings/bindings.zig index d9fa00913..eb46837a1 100644 --- a/src/javascript/jsc/bindings/bindings.zig +++ b/src/javascript/jsc/bindings/bindings.zig @@ -2151,6 +2151,13 @@ pub const JSValue = enum(u64) { }; } + pub fn isTypedArray(this: JSType) bool { + return switch (this) { + .Int8Array, .Int16Array, .Int32Array, .Uint8Array, .Uint8ClampedArray, .Uint16Array, .Uint32Array, .Float32Array, .Float64Array, .ArrayBuffer => true, + else => false, + }; + } + pub fn toC(this: JSType) C_API.JSTypedArrayType { return switch (this) { .Int8Array => .kJSTypedArrayTypeInt8Array, diff --git a/src/napi/napi.zig b/src/napi/napi.zig index 174746b6d..f9b772c33 100644 --- a/src/napi/napi.zig +++ b/src/napi/napi.zig @@ -508,11 +508,32 @@ pub export fn napi_get_element(env: napi_env, object: napi_value, index: u32, re result.* = JSC.JSObject.getIndex(object, env, index); return .ok; } -pub extern fn napi_delete_element(env: napi_env, object: napi_value, index: u32, result: *bool) napi_status; +pub export fn napi_delete_element(env: napi_env, object: napi_value, index: u32, result: *bool) napi_status { + if (!object.jsType().isIndexable()) { + return .array_expected; + } + + // TODO: this might be incorrect because I don't know if this API supports numbers, it may only support strings + result.* = JSC.C.JSObjectDeleteProperty(env.ref(), object.asObjectRef(), JSC.JSValue.jsNumber(index), TODO_EXCEPTION); + return .ok; +} pub extern fn napi_define_properties(env: napi_env, object: napi_value, property_count: usize, properties: [*c]const napi_property_descriptor) napi_status; -pub extern fn napi_is_array(env: napi_env, value: napi_value, result: *bool) napi_status; -pub extern fn napi_get_array_length(env: napi_env, value: napi_value, result: [*c]u32) napi_status; -pub extern fn napi_strict_equals(env: napi_env, lhs: napi_value, rhs: napi_value, result: *bool) napi_status; +pub export fn napi_is_array(_: napi_env, value: napi_value, result: *bool) napi_status { + result.* = value.jsType().isArray(); + return .ok; +} +pub export fn napi_get_array_length(env: napi_env, value: napi_value, result: [*c]u32) napi_status { + if (!value.jsType().isArray()) { + return .array_expected; + } + + result.* = value.getLengthOfArray(env); + return .ok; +} +pub export fn napi_strict_equals(env: napi_env, lhs: napi_value, rhs: napi_value, result: *bool) napi_status { + result.* = lhs.isSameValue(rhs, env); + return .ok; +} pub extern fn napi_call_function(env: napi_env, recv: napi_value, func: napi_value, argc: usize, argv: [*c]const napi_value, result: *napi_value) napi_status; pub extern fn napi_new_instance(env: napi_env, constructor: napi_value, argc: usize, argv: [*c]const napi_value, result: *napi_value) napi_status; pub extern fn napi_instanceof(env: napi_env, object: napi_value, constructor: napi_value, result: *bool) napi_status; @@ -538,14 +559,23 @@ pub extern fn napi_throw(env: napi_env, @"error": napi_value) napi_status; pub extern fn napi_throw_error(env: napi_env, code: [*c]const u8, msg: [*c]const u8) napi_status; pub extern fn napi_throw_type_error(env: napi_env, code: [*c]const u8, msg: [*c]const u8) napi_status; pub extern fn napi_throw_range_error(env: napi_env, code: [*c]const u8, msg: [*c]const u8) napi_status; -pub extern fn napi_is_error(env: napi_env, value: napi_value, result: *bool) napi_status; +pub export fn napi_is_error(env: napi_env, value: napi_value, result: *bool) napi_status { + result.* = value.isAnyError(env); + return .ok; +} pub extern fn napi_is_exception_pending(env: napi_env, result: *bool) napi_status; pub extern fn napi_get_and_clear_last_exception(env: napi_env, result: *napi_value) napi_status; -pub extern fn napi_is_arraybuffer(env: napi_env, value: napi_value, result: *bool) napi_status; +pub export fn napi_is_arraybuffer(_: napi_env, value: napi_value, result: *bool) napi_status { + result.* = value.jsTypeLoose() == .ArrayBuffer; + return .ok; +} pub extern fn napi_create_arraybuffer(env: napi_env, byte_length: usize, data: [*]*anyopaque, result: *napi_value) napi_status; pub extern fn napi_create_external_arraybuffer(env: napi_env, external_data: ?*anyopaque, byte_length: usize, finalize_cb: napi_finalize, finalize_hint: ?*anyopaque, result: *napi_value) napi_status; pub extern fn napi_get_arraybuffer_info(env: napi_env, arraybuffer: napi_value, data: [*]*anyopaque, byte_length: [*c]usize) napi_status; -pub extern fn napi_is_typedarray(env: napi_env, value: napi_value, result: *bool) napi_status; +pub export fn napi_is_typedarray(_: napi_env, value: napi_value, result: *bool) napi_status { + result.* = value.jsTypeLoose().isTypedArray(); + return .ok; +} pub extern fn napi_create_typedarray(env: napi_env, @"type": napi_typedarray_type, length: usize, arraybuffer: napi_value, byte_offset: usize, result: *napi_value) napi_status; pub extern fn napi_get_typedarray_info(env: napi_env, typedarray: napi_value, @"type": [*c]napi_typedarray_type, length: [*c]usize, data: [*]*anyopaque, arraybuffer: *napi_value, byte_offset: [*c]usize) napi_status; pub extern fn napi_create_dataview(env: napi_env, length: usize, arraybuffer: napi_value, byte_offset: usize, result: *napi_value) napi_status; |