aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-05-04 19:41:18 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-05-05 21:35:08 -0700
commit170d09b6bd1a941c72a9b468afcf4979791e7908 (patch)
treee6cb09d39532435e5310d514424f9ee4560d4b06 /src
parentb4fc584d1879f48606def40e4d7e0b74f9b66a4c (diff)
downloadbun-170d09b6bd1a941c72a9b468afcf4979791e7908.tar.gz
bun-170d09b6bd1a941c72a9b468afcf4979791e7908.tar.zst
bun-170d09b6bd1a941c72a9b468afcf4979791e7908.zip
More
Diffstat (limited to 'src')
-rw-r--r--src/javascript/jsc/bindings/bindings.zig7
-rw-r--r--src/napi/napi.zig44
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;