@scriptc/cli-darwin-arm64 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/THIRD_PARTY_NOTICES +1 -1
- package/dist/bin/scriptc +0 -0
- package/dist/bin/scriptc.json +1 -1
- package/dist/lib/declarations/scriptc-node-fallback.d.ts +972 -245
- package/dist/lib/declarations/scriptc-overrides.d.ts +5 -1
- package/dist/lib/declarations/scriptc.d.ts +22 -2
- package/dist/lib/llvm/bin/scriptc-llvm-codegen +0 -0
- package/dist/lib/llvm/package.json +1 -1
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_fetch.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_async_dyn.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_bigint.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_bigint_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_console_native.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_crypto_async.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_dc.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_dyn_handle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_dyn_invoke.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_fetch.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_ffi.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_ffi_queue.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_grapheme.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_http.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_http2.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_inspect.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_loop_epoll.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_loop_kqueue.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_loop_wsapoll.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_net.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_node_builtin.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_path.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_qs.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_symbol.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_test.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_tls_ca.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_url.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_url_params.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_util.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_util_compare.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_util_style.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_watch.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default-workers/scr_zlib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_island.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic-text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/text-decoder-legacy-workers/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/workers/scr_mailbox.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/workers/scr_message.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/workers/scr_worker.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/workers/scr_worker_events.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_inspect.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_zlib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_inspect.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_zlib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_fetch.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_util_compare.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_async_dyn.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_bigint.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_bigint_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_console_native.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_crypto_async.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_dc.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_dyn_handle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_dyn_invoke.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_fetch.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_ffi.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_ffi_queue.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_grapheme.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_http.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_http2.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_inspect.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_loop_epoll.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_loop_kqueue.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_loop_wsapoll.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_net.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_node_builtin.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_path.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_qs.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_symbol.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_test.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_tls_ca.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_url.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_url_params.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_util.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_util_compare.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_util_style.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_watch.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default-workers/scr_zlib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_island.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_util_compare.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic-text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/text-decoder-legacy-workers/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/workers/scr_mailbox.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/workers/scr_message.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/workers/scr_worker.o +0 -0
- package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/workers/scr_worker_events.o +0 -0
- package/dist/lib/runtime-darwin-arm64/package.json +1 -1
- package/dist/lib/runtime-darwin-arm64/runtime-pack.json +3318 -790
- package/dist/lib/runtime-sources/package.json +1 -1
- package/dist/lib/runtime-sources/src/scr_array.c +479 -46
- package/dist/lib/runtime-sources/src/scr_assert.c +3 -3
- package/dist/lib/runtime-sources/src/scr_async.c +401 -71
- package/dist/lib/runtime-sources/src/scr_async.test.ts +16 -6
- package/dist/lib/runtime-sources/src/scr_async_dyn.c +30 -30
- package/dist/lib/runtime-sources/src/scr_bytes.c +487 -221
- package/dist/lib/runtime-sources/src/scr_bytes.test.c +85 -0
- package/dist/lib/runtime-sources/src/scr_bytes_io.c +45 -64
- package/dist/lib/runtime-sources/src/scr_child.c +48 -30
- package/dist/lib/runtime-sources/src/scr_closure.c +21 -11
- package/dist/lib/runtime-sources/src/scr_console.c +27 -5
- package/dist/lib/runtime-sources/src/scr_context.c +167 -0
- package/dist/lib/runtime-sources/src/scr_context.test.c +118 -0
- package/dist/lib/runtime-sources/src/scr_context.test.ts +47 -0
- package/dist/lib/runtime-sources/src/scr_copying.c +13 -2
- package/dist/lib/runtime-sources/src/scr_cycle.c +112 -12
- package/dist/lib/runtime-sources/src/scr_dc.c +8 -8
- package/dist/lib/runtime-sources/src/scr_dgram.c +10 -7
- package/dist/lib/runtime-sources/src/scr_error.c +26 -14
- package/dist/lib/runtime-sources/src/scr_events.c +45 -31
- package/dist/lib/runtime-sources/src/scr_events_emitter.c +34 -1
- package/dist/lib/runtime-sources/src/scr_exception.c +26 -7
- package/dist/lib/runtime-sources/src/scr_fetch.c +23 -20
- package/dist/lib/runtime-sources/src/scr_fetch_curl.c +1 -1
- package/dist/lib/runtime-sources/src/scr_ffi.c +3 -3
- package/dist/lib/runtime-sources/src/scr_file_handle.c +1 -0
- package/dist/lib/runtime-sources/src/scr_http.c +20 -16
- package/dist/lib/runtime-sources/src/scr_http2.c +10 -8
- package/dist/lib/runtime-sources/src/scr_inspect.c +1 -0
- package/dist/lib/runtime-sources/src/scr_island.c +1 -1
- package/dist/lib/runtime-sources/src/scr_json.c +652 -189
- package/dist/lib/runtime-sources/src/scr_json.test.c +339 -1
- package/dist/lib/runtime-sources/src/scr_json.test.ts +59 -25
- package/dist/lib/runtime-sources/src/scr_key.h +92 -0
- package/dist/lib/runtime-sources/src/scr_lib.c +256 -136
- package/dist/lib/runtime-sources/src/scr_mailbox.c +233 -0
- package/dist/lib/runtime-sources/src/scr_mailbox.h +28 -0
- package/dist/lib/runtime-sources/src/scr_mailbox.test.c +86 -0
- package/dist/lib/runtime-sources/src/scr_mailbox.test.ts +46 -0
- package/dist/lib/runtime-sources/src/scr_map.c +240 -107
- package/dist/lib/runtime-sources/src/scr_message.c +443 -0
- package/dist/lib/runtime-sources/src/scr_message.h +14 -0
- package/dist/lib/runtime-sources/src/scr_message.test.c +152 -0
- package/dist/lib/runtime-sources/src/scr_message.test.ts +44 -0
- package/dist/lib/runtime-sources/src/scr_net.c +14 -12
- package/dist/lib/runtime-sources/src/scr_number.c +36 -4
- package/dist/lib/runtime-sources/src/scr_numeric.h +25 -0
- package/dist/lib/runtime-sources/src/scr_numeric.test.c +37 -0
- package/dist/lib/runtime-sources/src/scr_numeric.test.ts +33 -0
- package/dist/lib/runtime-sources/src/scr_object.c +9 -4
- package/dist/lib/runtime-sources/src/scr_path.c +1 -1
- package/dist/lib/runtime-sources/src/scr_readline.c +8 -8
- package/dist/lib/runtime-sources/src/scr_regex.c +351 -167
- package/dist/lib/runtime-sources/src/scr_runtime.h +207 -34
- package/dist/lib/runtime-sources/src/scr_shared.c +280 -0
- package/dist/lib/runtime-sources/src/scr_shared.test.c +113 -0
- package/dist/lib/runtime-sources/src/scr_shared.test.ts +45 -0
- package/dist/lib/runtime-sources/src/scr_stream.c +9 -9
- package/dist/lib/runtime-sources/src/scr_string.c +365 -141
- package/dist/lib/runtime-sources/src/scr_test.c +8 -8
- package/dist/lib/runtime-sources/src/scr_tls.c +12 -12
- package/dist/lib/runtime-sources/src/scr_tls_ca.c +34 -12
- package/dist/lib/runtime-sources/src/scr_union.c +10 -5
- package/dist/lib/runtime-sources/src/scr_util_compare.c +1 -0
- package/dist/lib/runtime-sources/src/scr_util_style.c +11 -11
- package/dist/lib/runtime-sources/src/scr_watch.c +16 -6
- package/dist/lib/runtime-sources/src/scr_worker.c +232 -0
- package/dist/lib/runtime-sources/src/scr_worker.h +42 -0
- package/dist/lib/runtime-sources/src/scr_worker.test.c +115 -0
- package/dist/lib/runtime-sources/src/scr_worker.test.ts +49 -0
- package/dist/lib/runtime-sources/src/scr_worker_events.c +443 -0
- package/dist/lib/runtime-sources/src/scr_zlib.c +6 -0
- package/package.json +1 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#undef NDEBUG
|
|
2
|
+
#include "scr_worker.h"
|
|
3
|
+
#include <assert.h>
|
|
4
|
+
#include <sched.h>
|
|
5
|
+
#include <stdatomic.h>
|
|
6
|
+
#include <stdio.h>
|
|
7
|
+
|
|
8
|
+
enum { WORKERS = 4, MESSAGES = 16 };
|
|
9
|
+
static atomic_bool start;
|
|
10
|
+
static SCR_TL unsigned timer_calls;
|
|
11
|
+
static SCR_TL unsigned cleanup_calls;
|
|
12
|
+
|
|
13
|
+
static void check_cleanup(void) { cleanup_calls++; }
|
|
14
|
+
|
|
15
|
+
static void timer(ScrClosure *closure) {
|
|
16
|
+
(void)closure;
|
|
17
|
+
assert(!scr_context_is_main());
|
|
18
|
+
timer_calls++;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
static int entry(uint32_t root_id) {
|
|
22
|
+
scr_init();
|
|
23
|
+
scr_lib_init(0, NULL);
|
|
24
|
+
assert(!scr_context_is_main());
|
|
25
|
+
assert(timer_calls == 0 && cleanup_calls == 0);
|
|
26
|
+
assert(scr_context_atexit(check_cleanup) == 0);
|
|
27
|
+
while (!atomic_load_explicit(&start, memory_order_acquire)) sched_yield();
|
|
28
|
+
ScrDyn *input = scr_worker_data();
|
|
29
|
+
assert(input && !scr_exc_pending());
|
|
30
|
+
assert(scr_dyn_obj_get(input, "root", 4)->v.num == root_id);
|
|
31
|
+
assert(scr_dyn_obj_get(input, "self", 4) == input);
|
|
32
|
+
ScrDyn *again = scr_worker_data();
|
|
33
|
+
assert(input == again);
|
|
34
|
+
scr_dyn_release(again);
|
|
35
|
+
scr_dyn_release(input);
|
|
36
|
+
|
|
37
|
+
for (unsigned i = 0; i < MESSAGES; i++) {
|
|
38
|
+
ScrDyn *value = scr_dyn_new_num(root_id * 100 + i);
|
|
39
|
+
ScrMessage *wire = scr_message_encode(value);
|
|
40
|
+
scr_dyn_release(value);
|
|
41
|
+
assert(wire && scr_worker_post_parent(wire));
|
|
42
|
+
ScrMailEvent *reply = NULL;
|
|
43
|
+
while (!(reply = scr_mailbox_take(scr_worker_inbox())))
|
|
44
|
+
scr_mailbox_wait(scr_worker_inbox(), 1000);
|
|
45
|
+
assert(reply->kind == SCR_WORKER_MESSAGE && reply->source == 0);
|
|
46
|
+
value = scr_message_decode(reply->message);
|
|
47
|
+
assert(value && value->kind == SCR_DYN_NUM && value->v.num == root_id * 100 + i);
|
|
48
|
+
scr_dyn_release(value);
|
|
49
|
+
scr_mail_event_free(reply);
|
|
50
|
+
}
|
|
51
|
+
scr_set_timeout(scr_closure_new((void *)timer, 0), 1);
|
|
52
|
+
assert(!scr_loop_run(NULL) && !scr_exc_pending());
|
|
53
|
+
assert(timer_calls == 1 && cleanup_calls == 0);
|
|
54
|
+
return (int)root_id;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
int main(void) {
|
|
58
|
+
scr_init();
|
|
59
|
+
scr_lib_init(0, NULL);
|
|
60
|
+
ScrMailbox *mailbox = scr_mailbox_new();
|
|
61
|
+
assert(mailbox);
|
|
62
|
+
ScrWorkerThread *workers[WORKERS];
|
|
63
|
+
unsigned messages[WORKERS] = {0};
|
|
64
|
+
bool online[WORKERS] = {false};
|
|
65
|
+
bool exited[WORKERS] = {false};
|
|
66
|
+
for (unsigned i = 0; i < WORKERS; i++) {
|
|
67
|
+
ScrDyn *input = scr_dyn_new_obj();
|
|
68
|
+
scr_dyn_obj_set(input, "root", 4, scr_dyn_new_num(i));
|
|
69
|
+
scr_dyn_obj_set(input, "self", 4, scr_dyn_retain(input));
|
|
70
|
+
ScrMessage *wire = scr_message_encode(input);
|
|
71
|
+
scr_dyn_release(input);
|
|
72
|
+
assert(wire && !scr_exc_pending());
|
|
73
|
+
workers[i] = scr_worker_thread_start(entry, i, wire, mailbox, NULL);
|
|
74
|
+
assert(workers[i] && !scr_exc_pending());
|
|
75
|
+
assert(scr_worker_thread_id(workers[i]) != 0);
|
|
76
|
+
}
|
|
77
|
+
/* No sender heap survives into the workerData decode. */
|
|
78
|
+
scr_collect_cycles();
|
|
79
|
+
atomic_store_explicit(&start, true, memory_order_release);
|
|
80
|
+
unsigned exit_count = 0;
|
|
81
|
+
while (exit_count != WORKERS) {
|
|
82
|
+
ScrMailEvent *event = scr_mailbox_take(mailbox);
|
|
83
|
+
if (!event) { scr_mailbox_wait(mailbox, 1000); continue; }
|
|
84
|
+
unsigned i = 0;
|
|
85
|
+
while (i < WORKERS && scr_worker_thread_id(workers[i]) != event->source) i++;
|
|
86
|
+
assert(i < WORKERS && !exited[i]);
|
|
87
|
+
if (event->kind == SCR_WORKER_ONLINE) {
|
|
88
|
+
assert(!online[i]);
|
|
89
|
+
online[i] = true;
|
|
90
|
+
} else if (event->kind == SCR_WORKER_MESSAGE) {
|
|
91
|
+
assert(online[i] && messages[i] < MESSAGES);
|
|
92
|
+
ScrDyn *value = scr_message_decode(event->message);
|
|
93
|
+
assert(value && value->kind == SCR_DYN_NUM && value->v.num == i * 100 + messages[i]);
|
|
94
|
+
messages[i]++;
|
|
95
|
+
ScrMessage *reply = scr_message_encode(value);
|
|
96
|
+
scr_dyn_release(value);
|
|
97
|
+
assert(reply && scr_worker_thread_post(workers[i], reply));
|
|
98
|
+
} else {
|
|
99
|
+
assert(event->kind == SCR_WORKER_EXIT && event->code == (int)i);
|
|
100
|
+
assert(online[i] && messages[i] == MESSAGES);
|
|
101
|
+
exited[i] = true;
|
|
102
|
+
exit_count++;
|
|
103
|
+
scr_worker_thread_join(workers[i]);
|
|
104
|
+
scr_worker_thread_join(workers[i]);
|
|
105
|
+
ScrMessage *late = scr_message_encode(scr_dyn_undefined());
|
|
106
|
+
assert(late && !scr_worker_thread_post(workers[i], late));
|
|
107
|
+
}
|
|
108
|
+
scr_mail_event_free(event);
|
|
109
|
+
}
|
|
110
|
+
for (unsigned i = 0; i < WORKERS; i++) scr_worker_thread_release(workers[i]);
|
|
111
|
+
scr_mailbox_release(mailbox);
|
|
112
|
+
assert(timer_calls == 0 && cleanup_calls == 0 && scr_context_is_main());
|
|
113
|
+
scr_context_cleanup();
|
|
114
|
+
puts("worker threads isolate heaps, exchange messages and publish ordered exits");
|
|
115
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { expect, test } from "vitest";
|
|
7
|
+
import { EXECUTABLE_RUNTIME_SOURCES } from "../../compiler/src/backend/native-toolchain.js";
|
|
8
|
+
|
|
9
|
+
const exec = promisify(execFile);
|
|
10
|
+
|
|
11
|
+
test.skipIf(process.platform === "win32")(
|
|
12
|
+
"native workers own their data and finish all message exchanges before exit",
|
|
13
|
+
async () => {
|
|
14
|
+
const dir = await mkdtemp(join(tmpdir(), "scriptc-workers-"));
|
|
15
|
+
try {
|
|
16
|
+
const bin = join(dir, "workers");
|
|
17
|
+
await exec("clang", [
|
|
18
|
+
"-std=c11",
|
|
19
|
+
"-O1",
|
|
20
|
+
"-pthread",
|
|
21
|
+
"-DSCR_WORKERS",
|
|
22
|
+
"-DSCR_RC_AUDIT",
|
|
23
|
+
"-fsanitize=address,undefined",
|
|
24
|
+
"-Wno-deprecated-declarations",
|
|
25
|
+
...(process.platform === "linux" ? ["-D_GNU_SOURCE"] : []),
|
|
26
|
+
...[
|
|
27
|
+
"scr_worker.test.c",
|
|
28
|
+
"scr_worker.c",
|
|
29
|
+
"scr_mailbox.c",
|
|
30
|
+
"scr_message.c",
|
|
31
|
+
...EXECUTABLE_RUNTIME_SOURCES,
|
|
32
|
+
].map((name) => join(import.meta.dirname, name)),
|
|
33
|
+
...(process.platform === "linux" ? ["-lm"] : []),
|
|
34
|
+
"-o",
|
|
35
|
+
bin,
|
|
36
|
+
]);
|
|
37
|
+
const result = await exec(bin, [], {
|
|
38
|
+
timeout: 10000,
|
|
39
|
+
env: { ...process.env, UBSAN_OPTIONS: "halt_on_error=1" },
|
|
40
|
+
});
|
|
41
|
+
expect(result.stdout).toBe(
|
|
42
|
+
"worker threads isolate heaps, exchange messages and publish ordered exits\n",
|
|
43
|
+
);
|
|
44
|
+
expect(result.stderr).toBe("");
|
|
45
|
+
} finally {
|
|
46
|
+
await rm(dir, { recursive: true, force: true });
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
);
|
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
#include "scr_worker.h"
|
|
2
|
+
|
|
3
|
+
#ifdef SCR_WORKERS
|
|
4
|
+
#include <stdlib.h>
|
|
5
|
+
|
|
6
|
+
extern int sc_worker_entry(uint32_t root);
|
|
7
|
+
|
|
8
|
+
typedef struct ScrWorkerView {
|
|
9
|
+
size_t rc;
|
|
10
|
+
ScrEmitter *events;
|
|
11
|
+
ScrWorkerThread *thread;
|
|
12
|
+
ScrPromise *termination;
|
|
13
|
+
bool port;
|
|
14
|
+
bool closed;
|
|
15
|
+
bool referenced;
|
|
16
|
+
bool started;
|
|
17
|
+
bool closing;
|
|
18
|
+
ScrMailEvent *queued_head;
|
|
19
|
+
ScrMailEvent *queued_tail;
|
|
20
|
+
struct ScrWorkerView *next;
|
|
21
|
+
} ScrWorkerView;
|
|
22
|
+
|
|
23
|
+
static SCR_TL ScrMailbox *scr_worker_events;
|
|
24
|
+
static SCR_TL ScrWorkerView *scr_worker_views;
|
|
25
|
+
static SCR_TL ScrWorkerView *scr_worker_port;
|
|
26
|
+
static const char *const scr_worker_method_names[] = {
|
|
27
|
+
"ref", "unref", "hasRef", "terminate", "postMessage", "on", "once", "addListener",
|
|
28
|
+
"prependListener", "prependOnceListener", "off", "removeListener", "removeAllListeners",
|
|
29
|
+
"listenerCount", "close", "start",
|
|
30
|
+
};
|
|
31
|
+
static SCR_TL ScrDyn *scr_worker_methods[sizeof scr_worker_method_names / sizeof scr_worker_method_names[0]];
|
|
32
|
+
|
|
33
|
+
static void scr_worker_view_trace(void *ptr, ScrTraceVisit visit, void *ctx) {
|
|
34
|
+
visit(((ScrWorkerView *)ptr)->events, ctx);
|
|
35
|
+
visit(((ScrWorkerView *)ptr)->termination, ctx);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
static void scr_worker_view_gcfree(void *ptr) {
|
|
39
|
+
ScrWorkerView *view = ptr;
|
|
40
|
+
scr_worker_thread_release(view->thread);
|
|
41
|
+
while (view->queued_head) {
|
|
42
|
+
ScrMailEvent *event = view->queued_head;
|
|
43
|
+
view->queued_head = event->next;
|
|
44
|
+
scr_mail_event_free(event);
|
|
45
|
+
}
|
|
46
|
+
scr_obj_free_note();
|
|
47
|
+
scr_cyc_free(ptr);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
static void scr_worker_view_destroy(void *ptr) {
|
|
51
|
+
ScrWorkerView *view = ptr;
|
|
52
|
+
scr_emitter_release(view->events);
|
|
53
|
+
scr_promise_release(view->termination);
|
|
54
|
+
scr_worker_view_gcfree(ptr);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static void *scr_worker_view_retain(void *ptr) {
|
|
58
|
+
ScrWorkerView *view = ptr;
|
|
59
|
+
view->rc++;
|
|
60
|
+
scr_cyc_mark_live(view);
|
|
61
|
+
return view;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static void scr_worker_view_release(void *ptr) {
|
|
65
|
+
ScrWorkerView *view = ptr;
|
|
66
|
+
if (!view) return;
|
|
67
|
+
if (--view->rc == 0) {
|
|
68
|
+
scr_cyc_on_dead(view);
|
|
69
|
+
scr_rc_destroy(view, scr_worker_view_destroy);
|
|
70
|
+
} else scr_cyc_on_release(view);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
static void scr_worker_port_listeners(void *ptr, const ScrStr *name, bool present) {
|
|
74
|
+
ScrWorkerView *view = ptr;
|
|
75
|
+
if (name->len != 7 || memcmp(name->data, "message", 7)) return;
|
|
76
|
+
if (present) view->started = true;
|
|
77
|
+
view->referenced = present;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static ScrWorkerView *scr_worker_view_new(bool port) {
|
|
81
|
+
ScrWorkerView *view = scr_cyc_alloc(sizeof(*view), scr_worker_view_trace, scr_worker_view_gcfree);
|
|
82
|
+
view->rc = 1;
|
|
83
|
+
view->port = port;
|
|
84
|
+
view->referenced = !port;
|
|
85
|
+
view->events = scr_emitter_new();
|
|
86
|
+
view->events->cls = port ? "MessagePort" : "Worker";
|
|
87
|
+
if (port) scr_emitter_observe(view->events, scr_worker_port_listeners, view);
|
|
88
|
+
scr_obj_alloc_note();
|
|
89
|
+
return view;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
static ScrDyn *scr_worker_refusal(const char *operation) {
|
|
93
|
+
ScrStr *message = scr_str_new(operation, strlen(operation));
|
|
94
|
+
scr_throw_lowering_fence(message);
|
|
95
|
+
scr_str_release(message);
|
|
96
|
+
return NULL;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
static bool scr_worker_empty_transfer(const ScrDyn *value) {
|
|
100
|
+
if (value->kind == SCR_DYN_TYPED_REF) {
|
|
101
|
+
ScrDyn *view = scr_dyn_typed_ref_materialize(value);
|
|
102
|
+
bool empty = view && !scr_exc_pending() && scr_worker_empty_transfer(view);
|
|
103
|
+
scr_dyn_release(view);
|
|
104
|
+
return empty;
|
|
105
|
+
}
|
|
106
|
+
return value->kind == SCR_DYN_UNDEF || (value->kind == SCR_DYN_ARR && value->v.arr.len == 0);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
static ScrDyn *scr_worker_view_invoke(void *ptr, ScrDyn *self, const char *method,
|
|
110
|
+
ScrDyn *const *args, size_t argc, const char *what) {
|
|
111
|
+
(void)what;
|
|
112
|
+
ScrWorkerView *view = ptr;
|
|
113
|
+
if (!strcmp(method, "ref") || !strcmp(method, "unref")) {
|
|
114
|
+
view->referenced = !strcmp(method, "ref");
|
|
115
|
+
return scr_dyn_retain(scr_dyn_undefined());
|
|
116
|
+
}
|
|
117
|
+
if (view->port && !strcmp(method, "hasRef"))
|
|
118
|
+
return scr_dyn_new_bool(view->referenced && !view->closed);
|
|
119
|
+
if (!view->port && !strcmp(method, "terminate")) {
|
|
120
|
+
if (!view->termination) {
|
|
121
|
+
view->termination = scr_promise_new();
|
|
122
|
+
if (view->closed) scr_promise_fulfill_ref(view->termination,
|
|
123
|
+
scr_dyn_retain(scr_dyn_undefined()), scr_dyn_retain_v, scr_dyn_release_v, scr_dyn_trace_v);
|
|
124
|
+
else scr_worker_thread_terminate(view->thread);
|
|
125
|
+
}
|
|
126
|
+
return scr_dyn_new_promise(view->termination);
|
|
127
|
+
}
|
|
128
|
+
if (!strcmp(method, "postMessage")) {
|
|
129
|
+
/* Worker drops messages after exit before validating or cloning. A
|
|
130
|
+
* closed MessagePort still validates its payload, as Node does. */
|
|
131
|
+
if (!view->port && view->closed) return scr_dyn_retain(scr_dyn_undefined());
|
|
132
|
+
if (!argc) {
|
|
133
|
+
static const char message[] = "The \"value\" argument must be specified";
|
|
134
|
+
scr_throw_error_msg_code(SCR_ERR_TYPE, message, sizeof message - 1, "ERR_MISSING_ARGS");
|
|
135
|
+
return NULL;
|
|
136
|
+
}
|
|
137
|
+
if (argc > 1 && !scr_worker_empty_transfer(args[1]))
|
|
138
|
+
return scr_exc_pending() ? NULL : scr_worker_refusal("Worker postMessage transfer lists are not supported yet");
|
|
139
|
+
ScrMessage *message = scr_message_encode(args[0]);
|
|
140
|
+
if (!message) return NULL;
|
|
141
|
+
if (view->closed) scr_message_free(message);
|
|
142
|
+
else if (view->port) scr_worker_post_parent(message);
|
|
143
|
+
else scr_worker_thread_post(view->thread, message);
|
|
144
|
+
return scr_dyn_retain(scr_dyn_undefined());
|
|
145
|
+
}
|
|
146
|
+
bool once = !strcmp(method, "once") || !strcmp(method, "prependOnceListener");
|
|
147
|
+
bool prepend = !strcmp(method, "prependListener") || !strcmp(method, "prependOnceListener");
|
|
148
|
+
if (once || prepend || !strcmp(method, "on") || !strcmp(method, "addListener")) {
|
|
149
|
+
ScrDyn *listener = argc > 1 ? args[1] : scr_dyn_undefined();
|
|
150
|
+
scr_dyn_check_listener(listener, "listener");
|
|
151
|
+
if (scr_exc_pending()) return NULL;
|
|
152
|
+
if (!argc || args[0]->kind != SCR_DYN_STR)
|
|
153
|
+
return scr_worker_refusal("Worker event names must be strings");
|
|
154
|
+
scr_emitter_release(scr_emitter_on_flex(view->events, args[0]->v.str, listener, once, prepend));
|
|
155
|
+
return scr_exc_pending() ? NULL : scr_dyn_retain(self);
|
|
156
|
+
}
|
|
157
|
+
if (!strcmp(method, "off") || !strcmp(method, "removeListener")) {
|
|
158
|
+
ScrDyn *listener = argc > 1 ? args[1] : scr_dyn_undefined();
|
|
159
|
+
scr_dyn_check_listener(listener, "listener");
|
|
160
|
+
if (scr_exc_pending()) return NULL;
|
|
161
|
+
if (!argc || args[0]->kind != SCR_DYN_STR)
|
|
162
|
+
return scr_worker_refusal("Worker event names must be strings");
|
|
163
|
+
scr_emitter_release(scr_emitter_off_dyn(view->events, args[0]->v.str, listener));
|
|
164
|
+
return scr_exc_pending() ? NULL : scr_dyn_retain(self);
|
|
165
|
+
}
|
|
166
|
+
if (!strcmp(method, "removeAllListeners")) {
|
|
167
|
+
bool all = !argc || args[0]->kind == SCR_DYN_UNDEF;
|
|
168
|
+
if (!all && args[0]->kind != SCR_DYN_STR)
|
|
169
|
+
return scr_worker_refusal("Worker event names must be strings");
|
|
170
|
+
scr_emitter_release(scr_emitter_remove_all(view->events, all ? NULL : args[0]->v.str, all));
|
|
171
|
+
return scr_exc_pending() ? NULL : scr_dyn_retain(self);
|
|
172
|
+
}
|
|
173
|
+
if (!strcmp(method, "listenerCount")) {
|
|
174
|
+
if (!argc || args[0]->kind != SCR_DYN_STR)
|
|
175
|
+
return scr_worker_refusal("Worker event names must be strings");
|
|
176
|
+
return scr_dyn_new_num(argc > 1 && args[1]->kind != SCR_DYN_UNDEF
|
|
177
|
+
? scr_emitter_listener_count_dyn(view->events, args[0]->v.str, args[1])
|
|
178
|
+
: scr_emitter_listener_count(view->events, args[0]->v.str));
|
|
179
|
+
}
|
|
180
|
+
if (view->port && !strcmp(method, "close")) {
|
|
181
|
+
if (argc && args[0]->kind != SCR_DYN_UNDEF) {
|
|
182
|
+
scr_dyn_check_listener(args[0], "callback");
|
|
183
|
+
if (scr_exc_pending()) return NULL;
|
|
184
|
+
ScrStr *name = scr_str_new("close", 5);
|
|
185
|
+
scr_emitter_release(scr_emitter_on_flex(view->events, name, args[0], true, false));
|
|
186
|
+
scr_str_release(name);
|
|
187
|
+
}
|
|
188
|
+
if (!view->closed) view->closing = true;
|
|
189
|
+
view->closed = true;
|
|
190
|
+
scr_worker_port_close();
|
|
191
|
+
return scr_dyn_retain(scr_dyn_undefined());
|
|
192
|
+
}
|
|
193
|
+
if (view->port && !strcmp(method, "start")) {
|
|
194
|
+
view->started = true;
|
|
195
|
+
return scr_dyn_retain(scr_dyn_undefined());
|
|
196
|
+
}
|
|
197
|
+
return scr_worker_refusal("This Worker or MessagePort method is not supported yet");
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
static ScrDyn *scr_worker_method_call(ScrClosure *closure, ScrDyn *const *args, size_t argc) {
|
|
201
|
+
ScrDyn *self = scr_dyn_this_get();
|
|
202
|
+
ScrDyn *result = NULL;
|
|
203
|
+
if (self->kind != SCR_DYN_HANDLE ||
|
|
204
|
+
(self->v.handle.tag != SCR_DYNH_WORKER && self->v.handle.tag != SCR_DYNH_MESSAGE_PORT)) {
|
|
205
|
+
static const char message[] = "Illegal invocation";
|
|
206
|
+
scr_throw_error_msg_code(SCR_ERR_TYPE, message, sizeof message - 1, "ERR_INVALID_THIS");
|
|
207
|
+
} else {
|
|
208
|
+
size_t method = (size_t)scr_box_get_f64(closure->caps[0]);
|
|
209
|
+
result = scr_worker_view_invoke(self->v.handle.ptr, self, scr_worker_method_names[method], args, argc, "worker method");
|
|
210
|
+
}
|
|
211
|
+
scr_dyn_release(self);
|
|
212
|
+
return result;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
static ScrDyn *scr_worker_view_get(void *ptr, const char *key, size_t length) {
|
|
216
|
+
ScrWorkerView *view = ptr;
|
|
217
|
+
if (!view->port && length == 8 && !memcmp(key, "threadId", 8))
|
|
218
|
+
return scr_dyn_new_num(view->closed ? -1 : (double)scr_worker_thread_id(view->thread));
|
|
219
|
+
for (size_t i = 0; i < sizeof scr_worker_methods / sizeof scr_worker_methods[0]; i++) {
|
|
220
|
+
const char *name = scr_worker_method_names[i];
|
|
221
|
+
if (strlen(name) != length || memcmp(name, key, length)) continue;
|
|
222
|
+
if ((view->port && !strcmp(name, "terminate")) ||
|
|
223
|
+
(!view->port && (!strcmp(name, "start") || !strcmp(name, "close") || !strcmp(name, "hasRef")))) return NULL;
|
|
224
|
+
if (!scr_worker_methods[i]) {
|
|
225
|
+
ScrClosure *closure = scr_closure_new(NULL, 1);
|
|
226
|
+
closure->caps[0] = scr_box_new(SCR_BOX_F64);
|
|
227
|
+
scr_box_set_f64(closure->caps[0], (double)i);
|
|
228
|
+
scr_worker_methods[i] = scr_dyn_new_func(closure, scr_worker_method_call, 0, "", name);
|
|
229
|
+
}
|
|
230
|
+
return scr_dyn_retain(scr_worker_methods[i]);
|
|
231
|
+
}
|
|
232
|
+
return NULL;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
static bool scr_workers_pending(void) {
|
|
236
|
+
for (ScrWorkerView *view = scr_worker_views; view; view = view->next)
|
|
237
|
+
if (view->referenced) return true;
|
|
238
|
+
return scr_worker_port && (scr_worker_port->closing ||
|
|
239
|
+
(scr_worker_port->referenced && !scr_worker_port->closed));
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
static int scr_worker_events_pollfd(void) {
|
|
243
|
+
return scr_worker_events ? scr_mailbox_pollfd(scr_worker_events) : -1;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
static bool scr_worker_events_ready(void) {
|
|
247
|
+
return (scr_worker_port && (scr_worker_port->closing ||
|
|
248
|
+
(scr_worker_port->started && scr_worker_port->queued_head))) ||
|
|
249
|
+
(scr_worker_events && scr_mailbox_pending(scr_worker_events));
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
static void scr_worker_events_wait(double milliseconds) {
|
|
253
|
+
if (!scr_worker_events_ready()) scr_mailbox_wait(scr_worker_events, milliseconds);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
static void scr_worker_dispatch(void) {
|
|
257
|
+
ScrWorkerView *port = scr_worker_port;
|
|
258
|
+
if (port && port->closing) {
|
|
259
|
+
port->closing = false;
|
|
260
|
+
ScrStr *name = scr_str_new("close", 5);
|
|
261
|
+
scr_dyn_this_push(port, SCR_DYNH_MESSAGE_PORT);
|
|
262
|
+
scr_emitter_emit_flex(port->events, name, NULL, 0);
|
|
263
|
+
scr_dyn_this_pop();
|
|
264
|
+
scr_str_release(name);
|
|
265
|
+
if (scr_exc_pending()) return;
|
|
266
|
+
}
|
|
267
|
+
ScrMailEvent *event;
|
|
268
|
+
if (port && port->started && port->queued_head) {
|
|
269
|
+
event = port->queued_head;
|
|
270
|
+
port->queued_head = event->next;
|
|
271
|
+
if (!port->queued_head) port->queued_tail = NULL;
|
|
272
|
+
event->next = NULL;
|
|
273
|
+
} else event = scr_mailbox_take(scr_worker_events);
|
|
274
|
+
if (!event) return;
|
|
275
|
+
if (event->kind == SCR_WORKER_WAKE) { scr_mail_event_free(event); return; }
|
|
276
|
+
ScrWorkerView *view = scr_worker_port;
|
|
277
|
+
if (event->source) {
|
|
278
|
+
view = scr_worker_views;
|
|
279
|
+
while (view && scr_worker_thread_id(view->thread) != event->source) view = view->next;
|
|
280
|
+
}
|
|
281
|
+
if (!view) { scr_mail_event_free(event); return; }
|
|
282
|
+
if (view->port && event->kind == SCR_WORKER_MESSAGE) {
|
|
283
|
+
if (view->closed) { scr_mail_event_free(event); return; }
|
|
284
|
+
if (!view->started) {
|
|
285
|
+
if (view->queued_tail) view->queued_tail->next = event;
|
|
286
|
+
else view->queued_head = event;
|
|
287
|
+
view->queued_tail = event;
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
scr_worker_view_retain(view);
|
|
292
|
+
const char *event_name = event->kind == SCR_WORKER_ONLINE ? "online" :
|
|
293
|
+
event->kind == SCR_WORKER_EXIT ? "exit" : event->kind == SCR_WORKER_ERROR ? "error" : "message";
|
|
294
|
+
ScrDyn *argument = event->message ? scr_message_decode(event->message) :
|
|
295
|
+
event->kind == SCR_WORKER_EXIT ? scr_dyn_new_num(event->code) : NULL;
|
|
296
|
+
if (event->kind == SCR_WORKER_EXIT) {
|
|
297
|
+
scr_worker_thread_join(view->thread);
|
|
298
|
+
view->closed = true;
|
|
299
|
+
if (view->termination) scr_promise_fulfill_ref(view->termination,
|
|
300
|
+
scr_dyn_new_num(event->code), scr_dyn_retain_v, scr_dyn_release_v, scr_dyn_trace_v);
|
|
301
|
+
ScrWorkerView **slot = &scr_worker_views;
|
|
302
|
+
while (*slot != view) slot = &(*slot)->next;
|
|
303
|
+
*slot = view->next;
|
|
304
|
+
view->next = NULL;
|
|
305
|
+
scr_worker_view_release(view); /* registry reference */
|
|
306
|
+
}
|
|
307
|
+
if (!scr_exc_pending()) {
|
|
308
|
+
ScrStr *name = scr_str_new(event_name, strlen(event_name));
|
|
309
|
+
scr_dyn_this_push(view, view->port ? SCR_DYNH_MESSAGE_PORT : SCR_DYNH_WORKER);
|
|
310
|
+
if (event->kind == SCR_WORKER_ERROR) scr_emitter_emit_error_flex(view->events, argument);
|
|
311
|
+
else scr_emitter_emit_flex(view->events, name, argument ? &argument : NULL, argument ? 1 : 0);
|
|
312
|
+
scr_dyn_this_pop();
|
|
313
|
+
scr_str_release(name);
|
|
314
|
+
}
|
|
315
|
+
scr_dyn_release(argument);
|
|
316
|
+
scr_worker_view_release(view);
|
|
317
|
+
scr_mail_event_free(event);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
static void scr_worker_events_cleanup(void) {
|
|
321
|
+
scr_loop_set_workers(NULL, NULL, NULL, NULL, NULL);
|
|
322
|
+
scr_mailbox_close(scr_worker_events);
|
|
323
|
+
for (ScrWorkerView *view = scr_worker_views; view; view = view->next)
|
|
324
|
+
scr_worker_thread_terminate(view->thread);
|
|
325
|
+
while (scr_worker_views) {
|
|
326
|
+
ScrWorkerView *view = scr_worker_views;
|
|
327
|
+
scr_worker_views = view->next;
|
|
328
|
+
view->next = NULL;
|
|
329
|
+
scr_worker_thread_join(view->thread);
|
|
330
|
+
scr_worker_view_release(view);
|
|
331
|
+
}
|
|
332
|
+
scr_worker_view_release(scr_worker_port);
|
|
333
|
+
scr_worker_port = NULL;
|
|
334
|
+
for (size_t i = 0; i < sizeof scr_worker_methods / sizeof scr_worker_methods[0]; i++) {
|
|
335
|
+
scr_dyn_release(scr_worker_methods[i]);
|
|
336
|
+
scr_worker_methods[i] = NULL;
|
|
337
|
+
}
|
|
338
|
+
scr_mailbox_release(scr_worker_events);
|
|
339
|
+
scr_worker_events = NULL;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
static bool scr_worker_events_install(void) {
|
|
343
|
+
if (scr_worker_events) return true;
|
|
344
|
+
ScrMailbox *inbox = scr_worker_inbox();
|
|
345
|
+
scr_worker_events = inbox ? scr_mailbox_retain(inbox) : scr_mailbox_new();
|
|
346
|
+
if (!scr_worker_events) return false;
|
|
347
|
+
if (inbox && !scr_worker_port) scr_worker_port = scr_worker_view_new(true);
|
|
348
|
+
static const ScrDynHandleOps worker_ops = {
|
|
349
|
+
.cls = "Worker", .retain = scr_worker_view_retain, .release = scr_worker_view_release,
|
|
350
|
+
.invoke = scr_worker_view_invoke, .get = scr_worker_view_get,
|
|
351
|
+
};
|
|
352
|
+
static const ScrDynHandleOps port_ops = {
|
|
353
|
+
.cls = "MessagePort", .retain = scr_worker_view_retain, .release = scr_worker_view_release,
|
|
354
|
+
.invoke = scr_worker_view_invoke, .get = scr_worker_view_get,
|
|
355
|
+
};
|
|
356
|
+
scr_dyn_handle_install(SCR_DYNH_WORKER, &worker_ops);
|
|
357
|
+
scr_dyn_handle_install(SCR_DYNH_MESSAGE_PORT, &port_ops);
|
|
358
|
+
if (scr_context_atexit(scr_worker_events_cleanup) != 0) scr_trap("scriptc: out of memory\n");
|
|
359
|
+
scr_loop_set_workers(scr_workers_pending, scr_worker_events_ready, scr_worker_dispatch,
|
|
360
|
+
scr_worker_events_pollfd, scr_worker_events_wait);
|
|
361
|
+
return true;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
ScrDyn *scr_worker_parent_port(void) {
|
|
365
|
+
if (scr_context_is_main()) return scr_dyn_new_null();
|
|
366
|
+
if (!scr_worker_events_install()) return NULL;
|
|
367
|
+
if (!scr_worker_port) scr_worker_port = scr_worker_view_new(true);
|
|
368
|
+
return scr_dyn_new_handle(scr_worker_port, SCR_DYNH_MESSAGE_PORT);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
static ScrArr *scr_worker_arguments(ScrStr *filename, ScrDyn *argv) {
|
|
372
|
+
if (argv->kind == SCR_DYN_TYPED_REF) {
|
|
373
|
+
ScrDyn *view = scr_dyn_typed_ref_materialize(argv);
|
|
374
|
+
ScrArr *result = !view || scr_exc_pending() ? NULL : scr_worker_arguments(filename, view);
|
|
375
|
+
scr_dyn_release(view);
|
|
376
|
+
return result;
|
|
377
|
+
}
|
|
378
|
+
if (argv->kind != SCR_DYN_UNDEF && argv->kind != SCR_DYN_ARR) {
|
|
379
|
+
scr_dyn_arg_type_fail("options.argv", "an instance of Array", argv);
|
|
380
|
+
return NULL;
|
|
381
|
+
}
|
|
382
|
+
ScrArr *arguments = scr_arr_new(SCR_ELEM_STR, 0);
|
|
383
|
+
scr_arr_push_ref(arguments, scr_str_retain(filename));
|
|
384
|
+
if (argv->kind == SCR_DYN_ARR) {
|
|
385
|
+
for (size_t i = 0; i < argv->v.arr.len; i++) {
|
|
386
|
+
ScrDyn *value = scr_dyn_arr_at(argv, (double)i);
|
|
387
|
+
ScrStr *text = scr_dyn_to_string(value, NULL);
|
|
388
|
+
scr_dyn_release(value);
|
|
389
|
+
if (!text || scr_exc_pending()) {
|
|
390
|
+
scr_str_release(text);
|
|
391
|
+
scr_arr_release(arguments);
|
|
392
|
+
return NULL;
|
|
393
|
+
}
|
|
394
|
+
if (memchr(text->data, 0, text->len)) {
|
|
395
|
+
scr_str_release(text);
|
|
396
|
+
scr_arr_release(arguments);
|
|
397
|
+
scr_worker_refusal("Worker argv strings containing null bytes are not supported yet");
|
|
398
|
+
return NULL;
|
|
399
|
+
}
|
|
400
|
+
scr_arr_push_ref(arguments, text);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return arguments;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
static ScrDyn *scr_worker_new_options(double root, ScrStr *filename, ScrDyn *options) {
|
|
407
|
+
if (!scr_worker_events_install()) return NULL;
|
|
408
|
+
ScrDyn *data = scr_dyn_undefined();
|
|
409
|
+
ScrDyn *argv = scr_dyn_undefined();
|
|
410
|
+
if (options->kind != SCR_DYN_UNDEF) {
|
|
411
|
+
if (options->kind != SCR_DYN_OBJ) {
|
|
412
|
+
scr_dyn_arg_type_fail("options", "object", options);
|
|
413
|
+
return NULL;
|
|
414
|
+
}
|
|
415
|
+
for (size_t i = 0; i < options->v.obj.len; i++) {
|
|
416
|
+
const ScrDynEntry *entry = &options->v.obj.entries[i];
|
|
417
|
+
if (entry->accessor) return scr_worker_refusal("Worker option accessors are not supported yet");
|
|
418
|
+
if (entry->key_len == 10 && !memcmp(entry->key, "workerData", 10)) data = entry->value;
|
|
419
|
+
else if (entry->key_len == 4 && !memcmp(entry->key, "argv", 4)) argv = entry->value;
|
|
420
|
+
else return scr_worker_refusal("This Worker constructor option is not supported yet");
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
ScrArr *arguments = scr_worker_arguments(filename, argv);
|
|
424
|
+
if (!arguments) return NULL;
|
|
425
|
+
ScrMessage *wire = scr_message_encode(data);
|
|
426
|
+
if (!wire) { scr_arr_release(arguments); return NULL; }
|
|
427
|
+
ScrWorkerThread *thread = scr_worker_thread_start(sc_worker_entry, (uint32_t)root, wire, scr_worker_events, arguments);
|
|
428
|
+
scr_arr_release(arguments);
|
|
429
|
+
if (!thread) return NULL;
|
|
430
|
+
ScrWorkerView *view = scr_worker_view_new(false);
|
|
431
|
+
view->thread = thread;
|
|
432
|
+
view->next = scr_worker_views;
|
|
433
|
+
scr_worker_views = view;
|
|
434
|
+
return scr_dyn_new_handle(view, SCR_DYNH_WORKER);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
ScrDyn *scr_worker_new(double root, ScrStr *filename, ScrDyn *options) {
|
|
438
|
+
ScrDyn *view = options->kind == SCR_DYN_TYPED_REF ? scr_dyn_typed_ref_materialize(options) : NULL;
|
|
439
|
+
ScrDyn *result = scr_exc_pending() ? NULL : scr_worker_new_options(root, filename, view ? view : options);
|
|
440
|
+
scr_dyn_release(view);
|
|
441
|
+
return result;
|
|
442
|
+
}
|
|
443
|
+
#endif
|
|
@@ -23,6 +23,7 @@ static void scr_zlib_oom(void) {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
ScrBytes *scr_zlib_deflate(const ScrBytes *data) {
|
|
26
|
+
SCR_BYTES_SNAPSHOT(data);
|
|
26
27
|
uLong srcLen = (uLong)data->len;
|
|
27
28
|
uLong cap = compressBound(srcLen);
|
|
28
29
|
uint8_t *buf = malloc(cap ? cap : 1);
|
|
@@ -37,6 +38,7 @@ ScrBytes *scr_zlib_deflate(const ScrBytes *data) {
|
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
ScrBytes *scr_zlib_inflate(const ScrBytes *data) {
|
|
41
|
+
SCR_BYTES_SNAPSHOT(data);
|
|
40
42
|
z_stream zs;
|
|
41
43
|
memset(&zs, 0, sizeof zs);
|
|
42
44
|
if (inflateInit(&zs) != Z_OK) scr_zlib_oom();
|
|
@@ -100,6 +102,7 @@ static int scr_zlib_window_bits(int mode, bool inflating) {
|
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
ScrBytes *scr_zlib_deflate_mode(const ScrBytes *data, double mode, double level) {
|
|
105
|
+
SCR_BYTES_SNAPSHOT(data);
|
|
103
106
|
z_stream zs;
|
|
104
107
|
memset(&zs, 0, sizeof zs);
|
|
105
108
|
int lvl = (int)level;
|
|
@@ -126,6 +129,7 @@ ScrBytes *scr_zlib_deflate_mode(const ScrBytes *data, double mode, double level)
|
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
ScrBytes *scr_zlib_inflate_mode(const ScrBytes *data, double mode) {
|
|
132
|
+
SCR_BYTES_SNAPSHOT(data);
|
|
129
133
|
z_stream zs;
|
|
130
134
|
memset(&zs, 0, sizeof zs);
|
|
131
135
|
if (inflateInit2(&zs, scr_zlib_window_bits((int)mode, true)) != Z_OK) scr_zlib_oom();
|
|
@@ -177,6 +181,7 @@ ScrBytes *scr_zlib_inflate_mode(const ScrBytes *data, double mode) {
|
|
|
177
181
|
}
|
|
178
182
|
|
|
179
183
|
double scr_zlib_crc32(const ScrBytes *data, double value) {
|
|
184
|
+
SCR_BYTES_SNAPSHOT(data);
|
|
180
185
|
char recv[48], msg[160];
|
|
181
186
|
scr_num_received(value, recv);
|
|
182
187
|
if (!(isfinite(value) && trunc(value) == value)) {
|
|
@@ -321,6 +326,7 @@ static void scr_zlib_async_destroy(void *payload) {
|
|
|
321
326
|
|
|
322
327
|
void scr_zlib_codec_async(const ScrBytes *data, double mode, bool compressing,
|
|
323
328
|
ScrClosure *cb, ScrZlibBytesFn fn) {
|
|
329
|
+
SCR_BYTES_SNAPSHOT(data);
|
|
324
330
|
ScrZlibAsyncOp *op = calloc(1, sizeof *op);
|
|
325
331
|
if (!op) scr_zlib_oom();
|
|
326
332
|
op->data = malloc(data->len ? data->len : 1);
|