diff options
author | 2022-05-09 00:23:51 -0700 | |
---|---|---|
committer | 2022-05-09 00:23:51 -0700 | |
commit | 3bd83eb134f60044a231b6357e597be47831bdd4 (patch) | |
tree | a91eed4318617abbefb31f6c6fa08499c408332d | |
parent | a5ebcefeeb02876f61a984db04d615ac291baa88 (diff) | |
download | bun-3bd83eb134f60044a231b6357e597be47831bdd4.tar.gz bun-3bd83eb134f60044a231b6357e597be47831bdd4.tar.zst bun-3bd83eb134f60044a231b6357e597be47831bdd4.zip |
[napi] Fix strings
-rw-r--r-- | src/napi/napi.zig | 250 |
1 files changed, 142 insertions, 108 deletions
diff --git a/src/napi/napi.zig b/src/napi/napi.zig index 2616b2374..9189d4c94 100644 --- a/src/napi/napi.zig +++ b/src/napi/napi.zig @@ -381,16 +381,28 @@ pub export fn napi_get_value_bool(_: napi_env, value: napi_value, result: *bool) result.* = value.to(bool); return .ok; } -pub export fn napi_get_value_string_latin1(env: napi_env, value: napi_value, buf: [*]u8, bufsize: usize, result: *usize) napi_status { +pub export fn napi_get_value_string_latin1(env: napi_env, value: napi_value, buf_ptr: [*c]u8, bufsize: usize, result: *usize) napi_status { const zig_str = value.getZigString(env); - if (@ptrToInt(buf) == 0) { + var buf = buf_ptr orelse { result.* = zig_str.len; return .ok; + }; + + if (zig_str.len == 0) { + result.* = 0; + buf[0] = 0; + + return .ok; } var buf_ = buf[0..bufsize]; + if (bufsize == 0) { - buf_ = std.mem.span(std.meta.assumeSentinel(buf, 0)); + buf_ = std.mem.span(std.meta.assumeSentinel(buf_, 0)); + if (buf_.len == 0) { + result.* = 0; + return .ok; + } } if (zig_str.is16Bit()) { @@ -407,17 +419,28 @@ pub export fn napi_get_value_string_latin1(env: napi_env, value: napi_value, buf result.* = to_copy; return .ok; } -pub export fn napi_get_value_string_utf8(env: napi_env, value: napi_value, buf: [*]u8, bufsize: usize, result: *usize) napi_status { +pub export fn napi_get_value_string_utf8(env: napi_env, value: napi_value, buf_ptr: [*c]u8, bufsize: usize, result: *usize) napi_status { const zig_str = value.getZigString(env); - if (@ptrToInt(buf) == 0) { + var buf = buf_ptr orelse { result.* = zig_str.len; return .ok; + }; + + if (zig_str.len == 0) { + result.* = 0; + buf[0] = 0; + + return .ok; } var buf_ = buf[0..bufsize]; if (bufsize == 0) { - buf_ = std.mem.span(std.meta.assumeSentinel(buf, 0)); + buf_ = std.mem.span(std.meta.assumeSentinel(buf_, 0)); + if (buf_.len == 0) { + result.* = 0; + return .ok; + } } if (zig_str.is16Bit()) { @@ -435,17 +458,28 @@ pub export fn napi_get_value_string_utf8(env: napi_env, value: napi_value, buf: result.* = to_copy; return .ok; } -pub export fn napi_get_value_string_utf16(env: napi_env, value: napi_value, buf: [*]char16_t, bufsize: usize, result: *usize) napi_status { +pub export fn napi_get_value_string_utf16(env: napi_env, value: napi_value, buf_ptr: [*c]char16_t, bufsize: usize, result: *usize) napi_status { const zig_str = value.getZigString(env); - if (@ptrToInt(buf) == 0) { + var buf = buf_ptr orelse { result.* = zig_str.len; return .ok; + }; + + if (zig_str.len == 0) { + result.* = 0; + buf[0] = 0; + + return .ok; } var buf_ = buf[0..bufsize]; if (bufsize == 0) { - buf_ = std.mem.span(std.meta.assumeSentinel(buf, 0)); + buf_ = std.mem.span(std.meta.assumeSentinel(buf_, 0)); + if (buf_.len == 0) { + result.* = 0; + return .ok; + } } if (!zig_str.is16Bit()) { @@ -1481,105 +1515,105 @@ pub const NAPI_MODULE_VERSION = @as(c_int, 1); pub fn fixDeadCodeElimination() void { if (comptime JSC.is_bindgen) unreachable; - std.mem.doNotOptimizeAway(napi_get_undefined); - std.mem.doNotOptimizeAway(napi_get_null); - std.mem.doNotOptimizeAway(napi_get_boolean); - std.mem.doNotOptimizeAway(napi_create_object); - std.mem.doNotOptimizeAway(napi_create_array); - std.mem.doNotOptimizeAway(napi_create_array_with_length); - std.mem.doNotOptimizeAway(napi_create_double); - std.mem.doNotOptimizeAway(napi_create_int32); - std.mem.doNotOptimizeAway(napi_create_uint32); - std.mem.doNotOptimizeAway(napi_create_int64); - std.mem.doNotOptimizeAway(napi_create_string_latin1); - std.mem.doNotOptimizeAway(napi_create_string_utf8); - std.mem.doNotOptimizeAway(napi_create_string_utf16); - std.mem.doNotOptimizeAway(napi_create_symbol); - // std.mem.doNotOptimizeAway(napi_create_function); - std.mem.doNotOptimizeAway(napi_create_error); - std.mem.doNotOptimizeAway(napi_typeof); - std.mem.doNotOptimizeAway(napi_get_value_double); - std.mem.doNotOptimizeAway(napi_get_value_int32); - std.mem.doNotOptimizeAway(napi_get_value_uint32); - std.mem.doNotOptimizeAway(napi_get_value_int64); - std.mem.doNotOptimizeAway(napi_get_value_bool); - std.mem.doNotOptimizeAway(napi_get_value_string_latin1); - std.mem.doNotOptimizeAway(napi_get_value_string_utf8); - std.mem.doNotOptimizeAway(napi_get_value_string_utf16); - std.mem.doNotOptimizeAway(napi_coerce_to_bool); - std.mem.doNotOptimizeAway(napi_coerce_to_number); - std.mem.doNotOptimizeAway(napi_coerce_to_object); - // std.mem.doNotOptimizeAway(napi_coerce_to_string); - std.mem.doNotOptimizeAway(napi_get_prototype); - // std.mem.doNotOptimizeAway(napi_get_property_names); - std.mem.doNotOptimizeAway(napi_set_property); - std.mem.doNotOptimizeAway(napi_has_property); - std.mem.doNotOptimizeAway(napi_get_property); - std.mem.doNotOptimizeAway(napi_delete_property); - std.mem.doNotOptimizeAway(napi_has_own_property); - std.mem.doNotOptimizeAway(napi_set_named_property); - std.mem.doNotOptimizeAway(napi_has_named_property); - std.mem.doNotOptimizeAway(napi_get_named_property); - std.mem.doNotOptimizeAway(napi_set_element); - std.mem.doNotOptimizeAway(napi_has_element); - std.mem.doNotOptimizeAway(napi_get_element); - // std.mem.doNotOptimizeAway(napi_delete_element); - std.mem.doNotOptimizeAway(napi_is_array); - std.mem.doNotOptimizeAway(napi_get_array_length); - std.mem.doNotOptimizeAway(napi_strict_equals); - std.mem.doNotOptimizeAway(napi_call_function); - std.mem.doNotOptimizeAway(napi_new_instance); - std.mem.doNotOptimizeAway(napi_instanceof); - std.mem.doNotOptimizeAway(napi_open_handle_scope); - std.mem.doNotOptimizeAway(napi_close_handle_scope); - std.mem.doNotOptimizeAway(napi_is_error); - std.mem.doNotOptimizeAway(napi_is_arraybuffer); - std.mem.doNotOptimizeAway(napi_create_arraybuffer); - std.mem.doNotOptimizeAway(napi_create_external_arraybuffer); - std.mem.doNotOptimizeAway(napi_get_arraybuffer_info); - std.mem.doNotOptimizeAway(napi_is_typedarray); - std.mem.doNotOptimizeAway(napi_create_typedarray); - std.mem.doNotOptimizeAway(napi_get_typedarray_info); - std.mem.doNotOptimizeAway(napi_is_dataview); - std.mem.doNotOptimizeAway(napi_get_dataview_info); - std.mem.doNotOptimizeAway(napi_get_version); - std.mem.doNotOptimizeAway(napi_create_promise); - std.mem.doNotOptimizeAway(napi_resolve_deferred); - std.mem.doNotOptimizeAway(napi_reject_deferred); - std.mem.doNotOptimizeAway(napi_is_promise); - std.mem.doNotOptimizeAway(napi_run_script); - std.mem.doNotOptimizeAway(napi_create_date); - std.mem.doNotOptimizeAway(napi_is_date); - std.mem.doNotOptimizeAway(napi_get_date_value); - std.mem.doNotOptimizeAway(napi_create_bigint_int64); - std.mem.doNotOptimizeAway(napi_create_bigint_uint64); - std.mem.doNotOptimizeAway(napi_get_value_bigint_int64); - std.mem.doNotOptimizeAway(napi_get_value_bigint_uint64); - // std.mem.doNotOptimizeAway(napi_module_register); - std.mem.doNotOptimizeAway(napi_fatal_error); - // std.mem.doNotOptimizeAway(napi_make_callback); - std.mem.doNotOptimizeAway(napi_create_buffer); - std.mem.doNotOptimizeAway(napi_create_external_buffer); - std.mem.doNotOptimizeAway(napi_create_buffer_copy); - std.mem.doNotOptimizeAway(napi_is_buffer); - std.mem.doNotOptimizeAway(napi_get_buffer_info); - std.mem.doNotOptimizeAway(napi_create_async_work); - std.mem.doNotOptimizeAway(napi_delete_async_work); - std.mem.doNotOptimizeAway(napi_queue_async_work); - std.mem.doNotOptimizeAway(napi_cancel_async_work); - std.mem.doNotOptimizeAway(napi_get_node_version); - std.mem.doNotOptimizeAway(napi_get_uv_event_loop); - std.mem.doNotOptimizeAway(napi_add_env_cleanup_hook); - std.mem.doNotOptimizeAway(napi_remove_env_cleanup_hook); - std.mem.doNotOptimizeAway(napi_create_threadsafe_function); - std.mem.doNotOptimizeAway(napi_get_threadsafe_function_context); - std.mem.doNotOptimizeAway(napi_call_threadsafe_function); - std.mem.doNotOptimizeAway(napi_acquire_threadsafe_function); - std.mem.doNotOptimizeAway(napi_release_threadsafe_function); - std.mem.doNotOptimizeAway(napi_unref_threadsafe_function); - std.mem.doNotOptimizeAway(napi_ref_threadsafe_function); - std.mem.doNotOptimizeAway(napi_add_async_cleanup_hook); - std.mem.doNotOptimizeAway(napi_remove_async_cleanup_hook); + std.mem.doNotOptimizeAway(&napi_get_undefined); + std.mem.doNotOptimizeAway(&napi_get_null); + std.mem.doNotOptimizeAway(&napi_get_boolean); + std.mem.doNotOptimizeAway(&napi_create_object); + std.mem.doNotOptimizeAway(&napi_create_array); + std.mem.doNotOptimizeAway(&napi_create_array_with_length); + std.mem.doNotOptimizeAway(&napi_create_double); + std.mem.doNotOptimizeAway(&napi_create_int32); + std.mem.doNotOptimizeAway(&napi_create_uint32); + std.mem.doNotOptimizeAway(&napi_create_int64); + std.mem.doNotOptimizeAway(&napi_create_string_latin1); + std.mem.doNotOptimizeAway(&napi_create_string_utf8); + std.mem.doNotOptimizeAway(&napi_create_string_utf16); + std.mem.doNotOptimizeAway(&napi_create_symbol); + // std.mem.doNotOptimizeAway(&napi_create_function); + std.mem.doNotOptimizeAway(&napi_create_error); + std.mem.doNotOptimizeAway(&napi_typeof); + std.mem.doNotOptimizeAway(&napi_get_value_double); + std.mem.doNotOptimizeAway(&napi_get_value_int32); + std.mem.doNotOptimizeAway(&napi_get_value_uint32); + std.mem.doNotOptimizeAway(&napi_get_value_int64); + std.mem.doNotOptimizeAway(&napi_get_value_bool); + std.mem.doNotOptimizeAway(&napi_get_value_string_latin1); + std.mem.doNotOptimizeAway(&napi_get_value_string_utf8); + std.mem.doNotOptimizeAway(&napi_get_value_string_utf16); + std.mem.doNotOptimizeAway(&napi_coerce_to_bool); + std.mem.doNotOptimizeAway(&napi_coerce_to_number); + std.mem.doNotOptimizeAway(&napi_coerce_to_object); + // std.mem.doNotOptimizeAway(&napi_coerce_to_string); + std.mem.doNotOptimizeAway(&napi_get_prototype); + // std.mem.doNotOptimizeAway(&napi_get_property_names); + std.mem.doNotOptimizeAway(&napi_set_property); + std.mem.doNotOptimizeAway(&napi_has_property); + std.mem.doNotOptimizeAway(&napi_get_property); + std.mem.doNotOptimizeAway(&napi_delete_property); + std.mem.doNotOptimizeAway(&napi_has_own_property); + std.mem.doNotOptimizeAway(&napi_set_named_property); + std.mem.doNotOptimizeAway(&napi_has_named_property); + std.mem.doNotOptimizeAway(&napi_get_named_property); + std.mem.doNotOptimizeAway(&napi_set_element); + std.mem.doNotOptimizeAway(&napi_has_element); + std.mem.doNotOptimizeAway(&napi_get_element); + // std.mem.doNotOptimizeAway(&napi_delete_element); + std.mem.doNotOptimizeAway(&napi_is_array); + std.mem.doNotOptimizeAway(&napi_get_array_length); + std.mem.doNotOptimizeAway(&napi_strict_equals); + std.mem.doNotOptimizeAway(&napi_call_function); + std.mem.doNotOptimizeAway(&napi_new_instance); + std.mem.doNotOptimizeAway(&napi_instanceof); + std.mem.doNotOptimizeAway(&napi_open_handle_scope); + std.mem.doNotOptimizeAway(&napi_close_handle_scope); + std.mem.doNotOptimizeAway(&napi_is_error); + std.mem.doNotOptimizeAway(&napi_is_arraybuffer); + std.mem.doNotOptimizeAway(&napi_create_arraybuffer); + std.mem.doNotOptimizeAway(&napi_create_external_arraybuffer); + std.mem.doNotOptimizeAway(&napi_get_arraybuffer_info); + std.mem.doNotOptimizeAway(&napi_is_typedarray); + std.mem.doNotOptimizeAway(&napi_create_typedarray); + std.mem.doNotOptimizeAway(&napi_get_typedarray_info); + std.mem.doNotOptimizeAway(&napi_is_dataview); + std.mem.doNotOptimizeAway(&napi_get_dataview_info); + std.mem.doNotOptimizeAway(&napi_get_version); + std.mem.doNotOptimizeAway(&napi_create_promise); + std.mem.doNotOptimizeAway(&napi_resolve_deferred); + std.mem.doNotOptimizeAway(&napi_reject_deferred); + std.mem.doNotOptimizeAway(&napi_is_promise); + std.mem.doNotOptimizeAway(&napi_run_script); + std.mem.doNotOptimizeAway(&napi_create_date); + std.mem.doNotOptimizeAway(&napi_is_date); + std.mem.doNotOptimizeAway(&napi_get_date_value); + std.mem.doNotOptimizeAway(&napi_create_bigint_int64); + std.mem.doNotOptimizeAway(&napi_create_bigint_uint64); + std.mem.doNotOptimizeAway(&napi_get_value_bigint_int64); + std.mem.doNotOptimizeAway(&napi_get_value_bigint_uint64); + // std.mem.doNotOptimizeAway(&napi_module_register); + std.mem.doNotOptimizeAway(&napi_fatal_error); + // std.mem.doNotOptimizeAway(&napi_make_callback); + std.mem.doNotOptimizeAway(&napi_create_buffer); + std.mem.doNotOptimizeAway(&napi_create_external_buffer); + std.mem.doNotOptimizeAway(&napi_create_buffer_copy); + std.mem.doNotOptimizeAway(&napi_is_buffer); + std.mem.doNotOptimizeAway(&napi_get_buffer_info); + std.mem.doNotOptimizeAway(&napi_create_async_work); + std.mem.doNotOptimizeAway(&napi_delete_async_work); + std.mem.doNotOptimizeAway(&napi_queue_async_work); + std.mem.doNotOptimizeAway(&napi_cancel_async_work); + std.mem.doNotOptimizeAway(&napi_get_node_version); + std.mem.doNotOptimizeAway(&napi_get_uv_event_loop); + std.mem.doNotOptimizeAway(&napi_add_env_cleanup_hook); + std.mem.doNotOptimizeAway(&napi_remove_env_cleanup_hook); + std.mem.doNotOptimizeAway(&napi_create_threadsafe_function); + std.mem.doNotOptimizeAway(&napi_get_threadsafe_function_context); + std.mem.doNotOptimizeAway(&napi_call_threadsafe_function); + std.mem.doNotOptimizeAway(&napi_acquire_threadsafe_function); + std.mem.doNotOptimizeAway(&napi_release_threadsafe_function); + std.mem.doNotOptimizeAway(&napi_unref_threadsafe_function); + std.mem.doNotOptimizeAway(&napi_ref_threadsafe_function); + std.mem.doNotOptimizeAway(&napi_add_async_cleanup_hook); + std.mem.doNotOptimizeAway(&napi_remove_async_cleanup_hook); } comptime { |