@scriptc/cli-darwin-x64 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-x64/artifacts/dev/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_fetch.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default/scr_util_compare.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_async_dyn.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_bigint.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_bigint_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_console_native.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_crypto_async.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_dc.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_dyn_handle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_dyn_invoke.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_fetch.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_ffi.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_ffi_queue.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_grapheme.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_http.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_http2.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_inspect.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_loop_epoll.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_loop_kqueue.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_loop_wsapoll.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_net.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_node_builtin.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_path.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_qs.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_symbol.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_test.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_tls_ca.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_url.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_url_params.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_util.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_util_compare.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_util_style.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_watch.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/default-workers/scr_zlib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_island.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic/scr_util_compare.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/dynamic-text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/text-decoder-legacy-workers/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/workers/scr_mailbox.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/workers/scr_message.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/workers/scr_worker.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/dev/runtime/workers/scr_worker_events.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-dev/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-release/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_inspect.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/default/scr_zlib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-dev/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_inspect.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/default/scr_zlib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/library-thread-release/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_fetch.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default/scr_util_compare.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_async_dyn.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_bigint.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_bigint_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_console_native.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_crypto_async.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_dc.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_dyn_handle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_dyn_invoke.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_fetch.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_ffi.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_ffi_queue.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_grapheme.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_http.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_http2.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_inspect.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_loop_epoll.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_loop_kqueue.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_loop_wsapoll.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_net.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_node_builtin.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_path.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_qs.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_symbol.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_test.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_tls_ca.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_url.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_url_params.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_util.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_util_compare.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_util_style.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_watch.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/default-workers/scr_zlib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_array.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_assert.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_async.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_bytes_io.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_child.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_closure.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_console.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_context.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_copying.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_cycle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_dgram.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_error.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_events.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_events_emitter.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_exception.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_file_handle.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_island.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_json.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_lib.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_map.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_number.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_object.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_readline.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_regex.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_shared.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_stream.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_string.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_tls.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_union.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic/scr_util_compare.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/dynamic-text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/text-decoder-legacy/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/text-decoder-legacy-workers/scr_bytes.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/workers/scr_mailbox.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/workers/scr_message.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/workers/scr_worker.o +0 -0
- package/dist/lib/runtime-darwin-x64/artifacts/release/runtime/workers/scr_worker_events.o +0 -0
- package/dist/lib/runtime-darwin-x64/package.json +1 -1
- package/dist/lib/runtime-darwin-x64/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,167 @@
|
|
|
1
|
+
#include "scr_runtime.h"
|
|
2
|
+
|
|
3
|
+
#ifdef SCR_WORKERS
|
|
4
|
+
#include <stdlib.h>
|
|
5
|
+
#include <stdatomic.h>
|
|
6
|
+
|
|
7
|
+
void scr_runtime_workers_v7(void) {}
|
|
8
|
+
|
|
9
|
+
typedef struct ScrContextExit {
|
|
10
|
+
void (*fn)(void);
|
|
11
|
+
struct ScrContextExit *next;
|
|
12
|
+
} ScrContextExit;
|
|
13
|
+
|
|
14
|
+
static SCR_TL ScrContextExit *scr_context_exits;
|
|
15
|
+
static SCR_TL uint64_t scr_context_id;
|
|
16
|
+
static SCR_TL const atomic_bool *scr_context_cancel;
|
|
17
|
+
static SCR_TL bool scr_context_stopped;
|
|
18
|
+
SCR_TL void (*scr_context_report_error)(void);
|
|
19
|
+
|
|
20
|
+
typedef struct { char *name; char *value; } ScrContextEnvEntry;
|
|
21
|
+
struct ScrContextEnv { size_t count; ScrContextEnvEntry *entries; };
|
|
22
|
+
static SCR_TL ScrContextEnv *scr_context_environment;
|
|
23
|
+
|
|
24
|
+
static char *scr_context_text_copy(const char *value) {
|
|
25
|
+
size_t length = strlen(value);
|
|
26
|
+
char *copy = malloc(length + 1);
|
|
27
|
+
if (!copy) scr_trap("scriptc: out of memory\n");
|
|
28
|
+
memcpy(copy, value, length + 1);
|
|
29
|
+
return copy;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
ScrContextEnv *scr_context_env_capture(void) {
|
|
33
|
+
ScrArr *pairs = scr_env_pairs();
|
|
34
|
+
ScrContextEnv *environment = calloc(1, sizeof(*environment));
|
|
35
|
+
if (!environment) scr_trap("scriptc: out of memory\n");
|
|
36
|
+
environment->count = pairs->len / 2;
|
|
37
|
+
environment->entries = calloc(environment->count ? environment->count : 1, sizeof(*environment->entries));
|
|
38
|
+
if (!environment->entries) scr_trap("scriptc: out of memory\n");
|
|
39
|
+
for (size_t i = 0; i < environment->count; i++) {
|
|
40
|
+
ScrStr *key = scr_arr_get_ref(pairs, (double)(2 * i));
|
|
41
|
+
ScrStr *value = scr_arr_get_ref(pairs, (double)(2 * i + 1));
|
|
42
|
+
environment->entries[i] = (ScrContextEnvEntry){scr_context_text_copy(key->data), scr_context_text_copy(value->data)};
|
|
43
|
+
scr_str_release(key); scr_str_release(value);
|
|
44
|
+
}
|
|
45
|
+
scr_arr_release(pairs);
|
|
46
|
+
return environment;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
void scr_context_env_free(ScrContextEnv *environment) {
|
|
50
|
+
if (!environment) return;
|
|
51
|
+
for (size_t i = 0; i < environment->count; i++) {
|
|
52
|
+
free(environment->entries[i].name); free(environment->entries[i].value);
|
|
53
|
+
}
|
|
54
|
+
free(environment->entries); free(environment);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static void scr_context_env_cleanup(void) {
|
|
58
|
+
scr_context_env_free(scr_context_environment);
|
|
59
|
+
scr_context_environment = NULL;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
void scr_context_env_enter(ScrContextEnv *environment) {
|
|
63
|
+
scr_context_environment = environment;
|
|
64
|
+
if (scr_context_atexit(scr_context_env_cleanup)) scr_trap("scriptc: out of memory\n");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const char *scr_context_getenv(const char *name) {
|
|
68
|
+
if (!scr_context_environment) return getenv(name);
|
|
69
|
+
for (size_t i = 0; i < scr_context_environment->count; i++)
|
|
70
|
+
if (!strcmp(scr_context_environment->entries[i].name, name)) return scr_context_environment->entries[i].value;
|
|
71
|
+
return NULL;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
bool scr_context_env_set(const char *name, const char *value) {
|
|
75
|
+
ScrContextEnv *environment = scr_context_environment;
|
|
76
|
+
if (!environment) return false;
|
|
77
|
+
for (size_t i = 0; i < environment->count; i++) {
|
|
78
|
+
ScrContextEnvEntry *entry = &environment->entries[i];
|
|
79
|
+
if (strcmp(entry->name, name)) continue;
|
|
80
|
+
char *copy = value ? scr_context_text_copy(value) : NULL;
|
|
81
|
+
free(entry->value);
|
|
82
|
+
entry->value = copy;
|
|
83
|
+
if (!copy) {
|
|
84
|
+
free(entry->name);
|
|
85
|
+
memmove(entry, entry + 1, (--environment->count - i) * sizeof(*entry));
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
if (value) {
|
|
90
|
+
ScrContextEnvEntry *entries = realloc(environment->entries, (environment->count + 1) * sizeof(*entries));
|
|
91
|
+
if (!entries) scr_trap("scriptc: out of memory\n");
|
|
92
|
+
environment->entries = entries;
|
|
93
|
+
entries[environment->count++] = (ScrContextEnvEntry){scr_context_text_copy(name), scr_context_text_copy(value)};
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
ScrArr *scr_context_env_pairs(void) {
|
|
99
|
+
if (!scr_context_environment) return NULL;
|
|
100
|
+
ScrArr *out = scr_arr_new(SCR_ELEM_STR, 0);
|
|
101
|
+
for (size_t i = 0; i < scr_context_environment->count; i++) {
|
|
102
|
+
const ScrContextEnvEntry *entry = &scr_context_environment->entries[i];
|
|
103
|
+
scr_arr_push_ref(out, scr_str_new(entry->name, strlen(entry->name)));
|
|
104
|
+
scr_arr_push_ref(out, scr_str_new(entry->value, strlen(entry->value)));
|
|
105
|
+
}
|
|
106
|
+
return out;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
void scr_context_enter(uint64_t thread_id) { scr_context_id = thread_id; }
|
|
110
|
+
bool scr_context_is_main(void) { return scr_context_id == 0; }
|
|
111
|
+
uint64_t scr_context_thread_id(void) { return scr_context_id; }
|
|
112
|
+
double scr_context_thread_number(void) { return (double)scr_context_id; }
|
|
113
|
+
|
|
114
|
+
void scr_context_stop_flag(const void *flag) { scr_context_cancel = flag; }
|
|
115
|
+
bool scr_context_stopping(void) { return scr_context_stopped; }
|
|
116
|
+
|
|
117
|
+
void scr_context_stop(int code) {
|
|
118
|
+
scr_context_stopped = true;
|
|
119
|
+
scr_exit_code_note(code);
|
|
120
|
+
scr_exc_clear();
|
|
121
|
+
scr_exc_current_cell()->kind = SCR_EXC_TERMINATE;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
bool scr_context_checkpoint(void) {
|
|
125
|
+
if (!scr_context_stopped && scr_context_cancel &&
|
|
126
|
+
atomic_load_explicit(scr_context_cancel, memory_order_relaxed)) scr_context_stop(1);
|
|
127
|
+
if (!scr_context_stopped) return false;
|
|
128
|
+
/* Each fiber has its own exception cell. Reinstall the sentinel after a
|
|
129
|
+
* context switch or a runtime continuation consumes its pending payload. */
|
|
130
|
+
if (scr_exc_current_cell()->kind != SCR_EXC_TERMINATE) {
|
|
131
|
+
scr_exc_clear();
|
|
132
|
+
scr_exc_current_cell()->kind = SCR_EXC_TERMINATE;
|
|
133
|
+
}
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
int scr_context_atexit(void (*fn)(void)) {
|
|
138
|
+
ScrContextExit *entry = malloc(sizeof(*entry));
|
|
139
|
+
if (!entry) return -1;
|
|
140
|
+
entry->fn = fn;
|
|
141
|
+
entry->next = scr_context_exits;
|
|
142
|
+
scr_context_exits = entry;
|
|
143
|
+
return 0;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
void scr_context_cleanup(void) {
|
|
147
|
+
scr_loop_context_shutdown();
|
|
148
|
+
/* Pop before calling: a callback may register further cleanup. Those
|
|
149
|
+
* registrations run first, just as newly registered libc exit handlers do.
|
|
150
|
+
* Repeated cleanup is harmless after the list has been drained. */
|
|
151
|
+
while (scr_context_exits) {
|
|
152
|
+
ScrContextExit *entry = scr_context_exits;
|
|
153
|
+
scr_context_exits = entry->next;
|
|
154
|
+
void (*fn)(void) = entry->fn;
|
|
155
|
+
free(entry);
|
|
156
|
+
fn();
|
|
157
|
+
}
|
|
158
|
+
scr_exc_clear();
|
|
159
|
+
scr_cyc_context_cleanup();
|
|
160
|
+
}
|
|
161
|
+
#else
|
|
162
|
+
bool scr_context_is_main(void) { return true; }
|
|
163
|
+
double scr_context_thread_number(void) { return 0; }
|
|
164
|
+
double scr_worker_root(void) { return -1; }
|
|
165
|
+
ScrDyn *scr_worker_data(void) { return scr_dyn_new_null(); }
|
|
166
|
+
ScrDyn *scr_worker_parent_port(void) { return scr_dyn_new_null(); }
|
|
167
|
+
#endif
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#undef NDEBUG
|
|
2
|
+
#include "scr_async.c"
|
|
3
|
+
#include <assert.h>
|
|
4
|
+
#include <sched.h>
|
|
5
|
+
#include <stdatomic.h>
|
|
6
|
+
|
|
7
|
+
enum { CONTEXTS = 4, REQUESTS = 64 };
|
|
8
|
+
static atomic_uint started;
|
|
9
|
+
static SCR_TL unsigned completed;
|
|
10
|
+
static SCR_TL unsigned destroyed;
|
|
11
|
+
static SCR_TL unsigned cleanup_order;
|
|
12
|
+
static SCR_TL unsigned timer_calls;
|
|
13
|
+
|
|
14
|
+
typedef struct Work {
|
|
15
|
+
uint64_t owner;
|
|
16
|
+
unsigned input;
|
|
17
|
+
unsigned result;
|
|
18
|
+
ScrStr *text;
|
|
19
|
+
bool deliver;
|
|
20
|
+
} Work;
|
|
21
|
+
|
|
22
|
+
static void run_work(void *data) {
|
|
23
|
+
Work *work = data;
|
|
24
|
+
work->result = work->input * 7 + 3;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static void deliver_work(void *data) {
|
|
28
|
+
Work *work = data;
|
|
29
|
+
assert(work->deliver);
|
|
30
|
+
assert(scr_context_thread_id() == work->owner);
|
|
31
|
+
assert(work->result == work->input * 7 + 3);
|
|
32
|
+
completed++;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static void destroy_work(void *data) {
|
|
36
|
+
Work *work = data;
|
|
37
|
+
assert(scr_context_thread_id() == work->owner);
|
|
38
|
+
scr_str_release(work->text);
|
|
39
|
+
destroyed++;
|
|
40
|
+
free(work);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
static void submit_work(unsigned input, bool deliver) {
|
|
44
|
+
Work *work = malloc(sizeof(*work));
|
|
45
|
+
assert(work);
|
|
46
|
+
*work = (Work){scr_context_thread_id(), input, 0, scr_str_new("owned", 5), deliver};
|
|
47
|
+
scr_work_submit(work, run_work, deliver_work, destroy_work);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
static void timer(ScrClosure *closure) {
|
|
51
|
+
(void)closure;
|
|
52
|
+
timer_calls++;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static void cleanup_first(void) {
|
|
56
|
+
assert(cleanup_order == 2);
|
|
57
|
+
cleanup_order = 3;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
static void cleanup_inserted(void) {
|
|
61
|
+
assert(cleanup_order == 1);
|
|
62
|
+
cleanup_order = 2;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
static void cleanup_second(void) {
|
|
66
|
+
assert(cleanup_order == 0);
|
|
67
|
+
cleanup_order = 1;
|
|
68
|
+
assert(scr_context_atexit(cleanup_inserted) == 0);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
static void *run_context(void *data) {
|
|
72
|
+
uint64_t id = (uintptr_t)data;
|
|
73
|
+
scr_context_enter(id);
|
|
74
|
+
assert(!scr_context_is_main());
|
|
75
|
+
scr_init();
|
|
76
|
+
scr_lib_init(0, NULL);
|
|
77
|
+
assert(scr_context_atexit(cleanup_first) == 0);
|
|
78
|
+
assert(scr_context_atexit(cleanup_second) == 0);
|
|
79
|
+
|
|
80
|
+
/* Leave a distinct exception pending while every context is active. */
|
|
81
|
+
scr_throw_f64((double)id);
|
|
82
|
+
atomic_fetch_add_explicit(&started, 1, memory_order_release);
|
|
83
|
+
while (atomic_load_explicit(&started, memory_order_acquire) != CONTEXTS) sched_yield();
|
|
84
|
+
ScrCaught *caught = scr_exc_take();
|
|
85
|
+
assert(caught && caught->kind == SCR_EXC_F64 && caught->f64 == (double)id);
|
|
86
|
+
scr_caught_release(caught);
|
|
87
|
+
|
|
88
|
+
for (unsigned i = 0; i < REQUESTS; i++) submit_work(i, true);
|
|
89
|
+
ScrClosure *callback = scr_closure_new((void *)timer, 0);
|
|
90
|
+
scr_set_timeout(callback, 1);
|
|
91
|
+
assert(!scr_loop_run(NULL));
|
|
92
|
+
assert(!scr_exc_pending());
|
|
93
|
+
assert(completed == REQUESTS && destroyed == REQUESTS && timer_calls == 1);
|
|
94
|
+
|
|
95
|
+
/* Teardown must wait for borrowed native work, release it on its owner,
|
|
96
|
+
* and suppress its script callback. It must not stop another context. */
|
|
97
|
+
submit_work(REQUESTS, false);
|
|
98
|
+
scr_context_cleanup();
|
|
99
|
+
assert(destroyed == REQUESTS + 1 && completed == REQUESTS);
|
|
100
|
+
assert(cleanup_order == 3);
|
|
101
|
+
scr_context_cleanup();
|
|
102
|
+
assert(cleanup_order == 3);
|
|
103
|
+
return NULL;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
int main(void) {
|
|
107
|
+
scr_init();
|
|
108
|
+
scr_lib_init(0, NULL);
|
|
109
|
+
pthread_t threads[CONTEXTS];
|
|
110
|
+
for (uintptr_t i = 0; i < CONTEXTS; i++)
|
|
111
|
+
assert(pthread_create(&threads[i], NULL, run_context, (void *)(i + 1)) == 0);
|
|
112
|
+
for (unsigned i = 0; i < CONTEXTS; i++) assert(pthread_join(threads[i], NULL) == 0);
|
|
113
|
+
assert(scr_context_is_main());
|
|
114
|
+
assert(!scr_exc_pending());
|
|
115
|
+
assert(completed == 0 && destroyed == 0 && timer_calls == 0);
|
|
116
|
+
scr_context_cleanup();
|
|
117
|
+
puts("runtime contexts keep completions, timers, exceptions and cleanup isolated");
|
|
118
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
"concurrent runtime contexts deliver native work and drain cleanup on their owner",
|
|
13
|
+
async () => {
|
|
14
|
+
const dir = await mkdtemp(join(tmpdir(), "scriptc-context-"));
|
|
15
|
+
try {
|
|
16
|
+
const bin = join(dir, "contexts");
|
|
17
|
+
await exec("clang", [
|
|
18
|
+
"-std=c11",
|
|
19
|
+
"-O1",
|
|
20
|
+
"-Wall",
|
|
21
|
+
"-Wextra",
|
|
22
|
+
"-Wno-deprecated-declarations",
|
|
23
|
+
"-pthread",
|
|
24
|
+
"-DSCR_WORKERS",
|
|
25
|
+
"-DSCR_RC_AUDIT",
|
|
26
|
+
"-fsanitize=address,undefined",
|
|
27
|
+
...(process.platform === "linux" ? ["-D_GNU_SOURCE"] : []),
|
|
28
|
+
join(import.meta.dirname, "scr_context.test.c"),
|
|
29
|
+
...EXECUTABLE_RUNTIME_SOURCES.filter((name) => name !== "scr_async.c").map((name) =>
|
|
30
|
+
join(import.meta.dirname, name),
|
|
31
|
+
),
|
|
32
|
+
...(process.platform === "linux" ? ["-lm"] : []),
|
|
33
|
+
"-o",
|
|
34
|
+
bin,
|
|
35
|
+
]);
|
|
36
|
+
const result = await exec(bin, [], {
|
|
37
|
+
env: { ...process.env, UBSAN_OPTIONS: "halt_on_error=1" },
|
|
38
|
+
});
|
|
39
|
+
expect(result.stdout).toBe(
|
|
40
|
+
"runtime contexts keep completions, timers, exceptions and cleanup isolated\n",
|
|
41
|
+
);
|
|
42
|
+
expect(result.stderr).toBe("");
|
|
43
|
+
} finally {
|
|
44
|
+
await rm(dir, { recursive: true, force: true });
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
);
|
|
@@ -124,10 +124,21 @@ ScrArr *scr_arr_with_undefined(ScrArr *a, double index) {
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
ScrBytes *scr_bytes_to_reversed(const ScrBytes *b) {
|
|
127
|
+
SCR_SHARED_GUARD(b, NULL);
|
|
127
128
|
ScrBytes *out = scr_bytes_new(b->elem, (double)b->len);
|
|
129
|
+
size_t width = scr_bytes_elem_size(b->elem);
|
|
130
|
+
/* Copy the stored representation without numeric conversion. Views may
|
|
131
|
+
* be unaligned, so fixed-width memcpy preserves both alignment safety
|
|
132
|
+
* and floating-point payload bits. The width is invariant for the loop. */
|
|
128
133
|
for (size_t i = 0; i < b->len; i++) {
|
|
129
|
-
|
|
130
|
-
|
|
134
|
+
const uint8_t *source = b->data + (b->len - i - 1) * width;
|
|
135
|
+
uint8_t *target = out->data + i * width;
|
|
136
|
+
switch (width) {
|
|
137
|
+
case 1: *target = *source; break;
|
|
138
|
+
case 2: memcpy(target, source, 2); break;
|
|
139
|
+
case 4: memcpy(target, source, 4); break;
|
|
140
|
+
case 8: memcpy(target, source, 8); break;
|
|
141
|
+
}
|
|
131
142
|
}
|
|
132
143
|
return out;
|
|
133
144
|
}
|
|
@@ -68,7 +68,13 @@
|
|
|
68
68
|
* unlinked INTO a dead cycle grows no counter at all (it
|
|
69
69
|
* was tallied when it was allocated) and is invisible to a
|
|
70
70
|
* nursery pass, so without it a program that churns its
|
|
71
|
-
* long-lived structures would never collect anything.
|
|
71
|
+
* long-lived structures would never collect anything. But
|
|
72
|
+
* a mature object is also buffered whenever a temporary
|
|
73
|
+
* reference to it is dropped, so merely READING a live
|
|
74
|
+
* structure (walking a tree, say) refills the buffer with
|
|
75
|
+
* objects that are not garbage. A full pass that frees
|
|
76
|
+
* almost nothing therefore doubles this fraction, and a
|
|
77
|
+
* productive one restores it.
|
|
72
78
|
* scheduled age a mature candidate has waited through a nursery's worth
|
|
73
79
|
* of event-loop checkpoints. Candidate COUNT cannot bound
|
|
74
80
|
* the garbage behind one root, and an idle heap does not
|
|
@@ -101,10 +107,58 @@ static void scr_cyc_oom(void) {
|
|
|
101
107
|
scr_trap("scriptc: out of memory\n");
|
|
102
108
|
}
|
|
103
109
|
|
|
110
|
+
typedef struct {
|
|
111
|
+
void *object;
|
|
112
|
+
void (*destroy)(void *);
|
|
113
|
+
} ScrDestroyEntry;
|
|
114
|
+
|
|
115
|
+
/* Keep shallow destruction synchronous without allocating. A chain may mix
|
|
116
|
+
* program layouts, unions and runtime containers, so one instance-local
|
|
117
|
+
* depth budget covers every participating destructor. Queued zero-count
|
|
118
|
+
* objects still own their children until their callback runs. */
|
|
119
|
+
#define SCR_DESTROY_DEPTH 64
|
|
120
|
+
static SCR_TL unsigned scr_destroy_depth;
|
|
121
|
+
static SCR_TL ScrDestroyEntry *scr_destroy_pending;
|
|
122
|
+
static SCR_TL size_t scr_destroy_count, scr_destroy_capacity;
|
|
123
|
+
|
|
124
|
+
void scr_rc_destroy(void *obj, void (*destroy)(void *)) {
|
|
125
|
+
if (scr_destroy_depth == SCR_DESTROY_DEPTH) {
|
|
126
|
+
if (scr_destroy_count == scr_destroy_capacity) {
|
|
127
|
+
size_t capacity = scr_destroy_capacity ? scr_destroy_capacity * 2 : 64;
|
|
128
|
+
if (capacity < scr_destroy_capacity || capacity > SIZE_MAX / sizeof(ScrDestroyEntry))
|
|
129
|
+
scr_cyc_oom();
|
|
130
|
+
ScrDestroyEntry *entries = realloc(scr_destroy_pending, capacity * sizeof(*entries));
|
|
131
|
+
if (!entries) scr_cyc_oom();
|
|
132
|
+
scr_destroy_pending = entries;
|
|
133
|
+
scr_destroy_capacity = capacity;
|
|
134
|
+
}
|
|
135
|
+
scr_destroy_pending[scr_destroy_count++] = (ScrDestroyEntry){ obj, destroy };
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
scr_destroy_depth++;
|
|
139
|
+
destroy(obj);
|
|
140
|
+
scr_destroy_depth--;
|
|
141
|
+
if (scr_destroy_depth) return;
|
|
142
|
+
while (scr_destroy_count) {
|
|
143
|
+
ScrDestroyEntry entry = scr_destroy_pending[--scr_destroy_count];
|
|
144
|
+
scr_destroy_depth = 1;
|
|
145
|
+
entry.destroy(entry.object);
|
|
146
|
+
scr_destroy_depth = 0;
|
|
147
|
+
}
|
|
148
|
+
/* Deep teardown is exceptional; don't retain its peak queue allocation
|
|
149
|
+
* throughout an otherwise idle executable or embedded runtime instance. */
|
|
150
|
+
if (scr_destroy_pending) {
|
|
151
|
+
free(scr_destroy_pending);
|
|
152
|
+
scr_destroy_pending = NULL;
|
|
153
|
+
scr_destroy_capacity = 0;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
104
157
|
/* Live cycle-headered objects — what the full-pass trigger watches. */
|
|
105
158
|
static SCR_TL size_t scr_cyc_live = 0;
|
|
106
159
|
|
|
107
160
|
void *scr_cyc_alloc(size_t size, ScrTraceFn trace, ScrCycFreeFn free_fn) {
|
|
161
|
+
if (size > SIZE_MAX - sizeof(ScrCycHdr)) scr_cyc_oom();
|
|
108
162
|
ScrCycHdr *h = calloc(1, sizeof(ScrCycHdr) + size);
|
|
109
163
|
if (!h) scr_cyc_oom();
|
|
110
164
|
h->trace = trace;
|
|
@@ -182,10 +236,15 @@ static size_t scr_cyc_pass(unsigned gen_limit);
|
|
|
182
236
|
/* Live count as of the end of the last full pass. */
|
|
183
237
|
static SCR_TL size_t scr_cyc_live_after_full = 0;
|
|
184
238
|
|
|
239
|
+
/* Doublings of the mature-backlog threshold earned by consecutive full passes
|
|
240
|
+
* that found almost nothing to free (see scr_cyc_mature_threshold). */
|
|
241
|
+
#define SCR_CYC_BACKLOG_MAX_SHIFT 8
|
|
242
|
+
static SCR_TL unsigned scr_cyc_backlog_shift = 0;
|
|
243
|
+
|
|
185
244
|
static size_t scr_cyc_nursery_threshold(void) {
|
|
186
245
|
static SCR_TL size_t cached = 0;
|
|
187
246
|
if (cached == 0) {
|
|
188
|
-
const char *env =
|
|
247
|
+
const char *env = scr_getenv("SCR_CYCLE_THRESHOLD");
|
|
189
248
|
long v = env ? strtol(env, NULL, 10) : 0;
|
|
190
249
|
cached = v > 0 ? (size_t)v : SCR_CYC_NURSERY_CANDIDATES;
|
|
191
250
|
}
|
|
@@ -232,16 +291,41 @@ static bool scr_cyc_full_due(void) {
|
|
|
232
291
|
* allocating would never collect anything. So the mature buffer's own size
|
|
233
292
|
* is the second full-pass trigger, at a fraction of the live heap: that
|
|
234
293
|
* bounds uncollected mature candidates proportionally and keeps the
|
|
235
|
-
* amortized cost linear (one heap-sized walk per live/N candidates).
|
|
294
|
+
* amortized cost linear (one heap-sized walk per live/N candidates).
|
|
295
|
+
*
|
|
296
|
+
* Re-buffered live objects cannot be told apart from new garbage until a
|
|
297
|
+
* pass walks them, and a program that keeps traversing one live structure
|
|
298
|
+
* buffers it again after every pass. Each full pass that frees almost none
|
|
299
|
+
* of its candidates doubles the threshold, so repeated unproductive walks
|
|
300
|
+
* thin out geometrically; once it exceeds the mature population this
|
|
301
|
+
* trigger rests, leaving heap growth, the scheduled age and exit to collect.
|
|
302
|
+
* That only delays garbage made from existing data: replacing it requires
|
|
303
|
+
* allocation, which grows the heap and trips the growth trigger. The first
|
|
304
|
+
* productive full pass restores the original fraction. */
|
|
236
305
|
static size_t scr_cyc_mature_threshold(void) {
|
|
237
306
|
size_t t = scr_cyc_live / SCR_CYC_FULL_GROWTH_DIV;
|
|
238
|
-
|
|
307
|
+
if (t < SCR_CYC_NURSERY_CANDIDATES) t = SCR_CYC_NURSERY_CANDIDATES;
|
|
308
|
+
return t > (SIZE_MAX >> scr_cyc_backlog_shift) ? SIZE_MAX : t << scr_cyc_backlog_shift;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/* A scheduled full pass, adapting the backlog threshold to its yield. The
|
|
312
|
+
* explicit sweep (scr_collect_cycles) is not a scheduling decision and
|
|
313
|
+
* leaves the threshold alone. Productive means at least one object freed
|
|
314
|
+
* per FULL_GROWTH_DIV candidates; a pass with no candidates says nothing. */
|
|
315
|
+
static void scr_cyc_full_pass(void) {
|
|
316
|
+
size_t freed = scr_cyc_pass(SCR_CYC_MATURE);
|
|
317
|
+
if (scr_cands.n == 0) return;
|
|
318
|
+
if (freed * SCR_CYC_FULL_GROWTH_DIV >= scr_cands.n)
|
|
319
|
+
scr_cyc_backlog_shift = 0;
|
|
320
|
+
else if (scr_cyc_backlog_shift < SCR_CYC_BACKLOG_MAX_SHIFT)
|
|
321
|
+
scr_cyc_backlog_shift++;
|
|
239
322
|
}
|
|
240
323
|
|
|
241
324
|
static void scr_cyc_collect_due(void) {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
325
|
+
if (scr_cyc_full_due() || scr_roots[SCR_CYC_MATURE].n >= scr_cyc_mature_threshold())
|
|
326
|
+
scr_cyc_full_pass();
|
|
327
|
+
else
|
|
328
|
+
scr_cyc_pass(SCR_CYC_NURSERY);
|
|
245
329
|
}
|
|
246
330
|
|
|
247
331
|
/* One scheduled pass, for callers that reach a natural collection point
|
|
@@ -258,7 +342,7 @@ void scr_cyc_collect_scheduled(void) {
|
|
|
258
342
|
scr_cyc_scheduled_mature_age = 0;
|
|
259
343
|
} else if (++scr_cyc_scheduled_mature_age
|
|
260
344
|
>= scr_cyc_nursery_threshold()) {
|
|
261
|
-
|
|
345
|
+
scr_cyc_full_pass();
|
|
262
346
|
return;
|
|
263
347
|
}
|
|
264
348
|
scr_cyc_collect_due();
|
|
@@ -428,8 +512,14 @@ static void scr_xg_child_visit(void *child, void *ctx) {
|
|
|
428
512
|
}
|
|
429
513
|
|
|
430
514
|
/* One genuine release, generically: the header carries everything needed. */
|
|
431
|
-
static void
|
|
515
|
+
static void scr_xg_destroy(void *obj) {
|
|
432
516
|
ScrCycHdr *h = scr_cyc_hdr(obj);
|
|
517
|
+
h->trace(obj, scr_xg_child_visit, NULL);
|
|
518
|
+
h->free_fn(obj);
|
|
519
|
+
scr_xg_freed++;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
static void scr_xg_release(void *obj) {
|
|
433
523
|
if (SCR_RC(obj) > 1) {
|
|
434
524
|
SCR_RC(obj) -= 1;
|
|
435
525
|
scr_cyc_on_release(obj); /* lost a reference: a possible cycle root */
|
|
@@ -437,9 +527,7 @@ static void scr_xg_release(void *obj) {
|
|
|
437
527
|
}
|
|
438
528
|
SCR_RC(obj) = 0;
|
|
439
529
|
scr_cyc_on_dead(obj); /* out of its candidate buffer before the block goes */
|
|
440
|
-
|
|
441
|
-
h->free_fn(obj); /* the untraced ones, then the block */
|
|
442
|
-
scr_xg_freed++;
|
|
530
|
+
scr_rc_destroy(obj, scr_xg_destroy);
|
|
443
531
|
}
|
|
444
532
|
|
|
445
533
|
/* One pass over every candidate at or below `gen_limit`; returns how many
|
|
@@ -587,3 +675,15 @@ void scr_collect_cycles(void) {
|
|
|
587
675
|
&& (scr_roots[SCR_CYC_NURSERY].n || scr_roots[SCR_CYC_MATURE].n)) {
|
|
588
676
|
}
|
|
589
677
|
}
|
|
678
|
+
|
|
679
|
+
/* Worker TLS becomes unreachable when its OS thread returns. Release the
|
|
680
|
+
* reusable traversal buffers after all context-owned roots are retired. */
|
|
681
|
+
void scr_cyc_context_cleanup(void) {
|
|
682
|
+
scr_collect_cycles();
|
|
683
|
+
ScrVec *vectors[] = {&scr_roots[SCR_CYC_NURSERY], &scr_roots[SCR_CYC_MATURE],
|
|
684
|
+
&scr_cands, &scr_promote, &scr_pending, &scr_restore_pending, &scr_white, &scr_xgen};
|
|
685
|
+
for (size_t i = 0; i < sizeof vectors / sizeof vectors[0]; i++) {
|
|
686
|
+
free(vectors[i]->v);
|
|
687
|
+
*vectors[i] = (ScrVec){0};
|
|
688
|
+
}
|
|
689
|
+
}
|
|
@@ -42,9 +42,9 @@ typedef struct {
|
|
|
42
42
|
size_t nbinds, binds_cap;
|
|
43
43
|
} ScrDcChannel;
|
|
44
44
|
|
|
45
|
-
static ScrDcChannel *dc_channels = NULL;
|
|
46
|
-
static size_t dc_nchannels = 0, dc_cap = 0;
|
|
47
|
-
static bool dc_teardown_registered = false;
|
|
45
|
+
static SCR_TL ScrDcChannel *dc_channels = NULL;
|
|
46
|
+
static SCR_TL size_t dc_nchannels = 0, dc_cap = 0;
|
|
47
|
+
static SCR_TL bool dc_teardown_registered = false;
|
|
48
48
|
|
|
49
49
|
static void scr_dc_teardown(void) {
|
|
50
50
|
for (size_t i = 0; i < dc_nchannels; i++) {
|
|
@@ -75,7 +75,7 @@ static size_t dc_intern(ScrStr *name) {
|
|
|
75
75
|
}
|
|
76
76
|
if (!dc_teardown_registered) {
|
|
77
77
|
dc_teardown_registered = true;
|
|
78
|
-
|
|
78
|
+
scr_atexit(scr_dc_teardown);
|
|
79
79
|
}
|
|
80
80
|
ScrDcChannel *ch = &dc_channels[dc_nchannels];
|
|
81
81
|
ch->name = scr_str_retain(name);
|
|
@@ -358,9 +358,9 @@ enum { DC_TC_START, DC_TC_END, DC_TC_ASYNC_START, DC_TC_ASYNC_END, DC_TC_ERROR }
|
|
|
358
358
|
|
|
359
359
|
static const char *const dc_trace_events[5] = {"start", "end", "asyncStart", "asyncEnd", "error"};
|
|
360
360
|
|
|
361
|
-
static ScrDcTracing *dc_tracings = NULL;
|
|
362
|
-
static size_t dc_ntracings = 0, dc_tracings_cap = 0;
|
|
363
|
-
static bool dc_tracings_teardown_registered = false;
|
|
361
|
+
static SCR_TL ScrDcTracing *dc_tracings = NULL;
|
|
362
|
+
static SCR_TL size_t dc_ntracings = 0, dc_tracings_cap = 0;
|
|
363
|
+
static SCR_TL bool dc_tracings_teardown_registered = false;
|
|
364
364
|
|
|
365
365
|
static void scr_dc_tracings_teardown(void) {
|
|
366
366
|
free(dc_tracings);
|
|
@@ -379,7 +379,7 @@ static double dc_tracing_register(const size_t ch[5]) {
|
|
|
379
379
|
}
|
|
380
380
|
if (!dc_tracings_teardown_registered) {
|
|
381
381
|
dc_tracings_teardown_registered = true;
|
|
382
|
-
|
|
382
|
+
scr_atexit(scr_dc_tracings_teardown);
|
|
383
383
|
}
|
|
384
384
|
for (size_t i = 0; i < 5; i++) dc_tracings[dc_ntracings].ch[i] = ch[i];
|
|
385
385
|
dc_ntracings++;
|
|
@@ -346,12 +346,12 @@ struct ScrDgramSocket {
|
|
|
346
346
|
};
|
|
347
347
|
|
|
348
348
|
#ifdef SCR_RC_AUDIT
|
|
349
|
-
static long scr_dgram_live = 0;
|
|
349
|
+
static SCR_TL long scr_dgram_live = 0;
|
|
350
350
|
long scr_dgram_live_count(void) { return scr_dgram_live; }
|
|
351
351
|
#endif
|
|
352
352
|
|
|
353
|
-
static ScrDgramSocket *scr_dgram_socks = NULL; /* registry: +1 each, tail-appended */
|
|
354
|
-
static ScrPoller *scr_dgram_poller = NULL;
|
|
353
|
+
static SCR_TL ScrDgramSocket *scr_dgram_socks = NULL; /* registry: +1 each, tail-appended */
|
|
354
|
+
static SCR_TL ScrPoller *scr_dgram_poller = NULL;
|
|
355
355
|
|
|
356
356
|
/* Pending dns.lookup deliveries (already resolved — getaddrinfo ran at
|
|
357
357
|
* the call; the sweep fires them FIFO). */
|
|
@@ -364,7 +364,7 @@ typedef struct ScrDnsPending {
|
|
|
364
364
|
struct ScrDnsPending *next;
|
|
365
365
|
} ScrDnsPending;
|
|
366
366
|
|
|
367
|
-
static ScrDnsPending *scr_dns_pending = NULL;
|
|
367
|
+
static SCR_TL ScrDnsPending *scr_dns_pending = NULL;
|
|
368
368
|
|
|
369
369
|
/* ── RC ──────────────────────────────────────────────────────────────── */
|
|
370
370
|
|
|
@@ -645,6 +645,7 @@ void scr_dgram_send_str(ScrDgramSocket *s, ScrStr *data, double port, ScrStr *ho
|
|
|
645
645
|
}
|
|
646
646
|
|
|
647
647
|
void scr_dgram_send_bytes(ScrDgramSocket *s, ScrBytes *data, double port, ScrStr *host) {
|
|
648
|
+
SCR_BYTES_SNAPSHOT(data);
|
|
648
649
|
scr_dgram_send_raw(s, (const char *)data->data, data->len, port, host);
|
|
649
650
|
}
|
|
650
651
|
|
|
@@ -1011,10 +1012,10 @@ static void scr_dgram_cleanup_atexit(void) {
|
|
|
1011
1012
|
}
|
|
1012
1013
|
|
|
1013
1014
|
void scr_dgram_install(void) {
|
|
1014
|
-
static bool installed = false;
|
|
1015
|
+
static SCR_TL bool installed = false;
|
|
1015
1016
|
if (installed) return;
|
|
1016
1017
|
installed = true;
|
|
1017
|
-
|
|
1018
|
+
scr_atexit(scr_dgram_cleanup_atexit);
|
|
1018
1019
|
scr_loop_set_dgram(&scr_dgram_pending, &scr_dgram_dispatch, &scr_dgram_pollfd);
|
|
1019
1020
|
}
|
|
1020
1021
|
|
|
@@ -1167,8 +1168,10 @@ void scr_dgram_send_chk(ScrDgramSocket *s, const ScrDyn *buffer, const ScrDyn *a
|
|
|
1167
1168
|
scr_throw_lowering_fence(fence);
|
|
1168
1169
|
return;
|
|
1169
1170
|
}
|
|
1171
|
+
const ScrBytes *byte_input = buffer->kind == SCR_DYN_BYTES ? buffer->v.bytes : NULL;
|
|
1172
|
+
SCR_BYTES_SNAPSHOT(byte_input);
|
|
1170
1173
|
const char *data = buffer->kind == SCR_DYN_STR ? buffer->v.str->data
|
|
1171
|
-
: (const char *)
|
|
1174
|
+
: (const char *)byte_input->data;
|
|
1172
1175
|
size_t datalen = buffer->kind == SCR_DYN_STR ? buffer->v.str->len
|
|
1173
1176
|
: (size_t)scr_bytes_byte_len(buffer->v.bytes);
|
|
1174
1177
|
if (sliced) {
|