@scriptc/cli-darwin-x64 0.2.5 → 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 +57 -30
- 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_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-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_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-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_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_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_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-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_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-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 +3339 -811
- package/dist/lib/runtime-sources/package.json +1 -1
- package/dist/lib/runtime-sources/src/scr_array.c +212 -40
- 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_dyn.c +30 -30
- package/dist/lib/runtime-sources/src/scr_bytes.c +50 -5
- package/dist/lib/runtime-sources/src/scr_bytes_io.c +47 -32
- 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 +1 -0
- 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 +179 -45
- package/dist/lib/runtime-sources/src/scr_json.test.c +16 -0
- package/dist/lib/runtime-sources/src/scr_json.test.ts +1 -0
- package/dist/lib/runtime-sources/src/scr_key.h +28 -4
- package/dist/lib/runtime-sources/src/scr_lib.c +124 -63
- 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 +195 -46
- 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 +34 -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 +113 -0
- package/dist/lib/runtime-sources/src/scr_runtime.h +170 -28
- 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 +224 -113
- 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,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,6 +124,7 @@ 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);
|
|
128
129
|
size_t width = scr_bytes_elem_size(b->elem);
|
|
129
130
|
/* Copy the stored representation without numeric conversion. Views may
|
|
@@ -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) {
|
|
@@ -73,32 +73,44 @@ static void scr_domex_gcfree(void *obj) {
|
|
|
73
73
|
|
|
74
74
|
/* The DIRECT release stored in the builtin vtables (the compiler emits the
|
|
75
75
|
* analogous sc_reld_* for user subclasses). */
|
|
76
|
+
static void scr_error_destroy(void *obj) {
|
|
77
|
+
ScrError *e = (ScrError *)obj;
|
|
78
|
+
scr_str_release(e->name);
|
|
79
|
+
scr_str_release(e->message);
|
|
80
|
+
scr_str_release(e->code);
|
|
81
|
+
scr_str_release(e->stack_frames);
|
|
82
|
+
scr_str_release(e->stack);
|
|
83
|
+
if (e->error_cause && scr_error_cause_drop) scr_error_cause_drop(obj);
|
|
84
|
+
scr_obj_free_note();
|
|
85
|
+
if (scr_error_traced) scr_cyc_free(e);
|
|
86
|
+
else free(e);
|
|
87
|
+
}
|
|
88
|
+
|
|
76
89
|
static void scr_error_reld(void *obj) {
|
|
77
90
|
ScrError *e = (ScrError *)obj;
|
|
78
91
|
if (--e->rc == 0) {
|
|
79
92
|
if (scr_error_traced) scr_cyc_on_dead(e);
|
|
80
|
-
|
|
81
|
-
scr_str_release(e->message);
|
|
82
|
-
scr_str_release(e->code); /* NULL-safe: absent on most errors */
|
|
83
|
-
scr_str_release(e->stack_frames);
|
|
84
|
-
scr_str_release(e->stack);
|
|
85
|
-
if (e->error_cause && scr_error_cause_drop) scr_error_cause_drop(obj);
|
|
86
|
-
scr_obj_free_note();
|
|
87
|
-
if (scr_error_traced) scr_cyc_free(e);
|
|
88
|
-
else free(e);
|
|
93
|
+
scr_rc_destroy(obj, scr_error_destroy);
|
|
89
94
|
} else if (scr_error_traced) {
|
|
90
95
|
scr_cyc_on_release(e); /* possible cycle root; may collect */
|
|
91
96
|
}
|
|
92
97
|
}
|
|
93
98
|
|
|
94
|
-
|
|
95
|
-
*
|
|
99
|
+
static void scr_domex_destroy(void *obj) {
|
|
100
|
+
ScrDomException *d = (ScrDomException *)obj;
|
|
101
|
+
if (d->cause != NULL && scr_domex_cause_drop != NULL) scr_domex_cause_drop(obj);
|
|
102
|
+
scr_error_destroy(obj);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* Both cause chains participate in the shared destruction depth budget. */
|
|
96
106
|
static void scr_domex_reld(void *obj) {
|
|
97
107
|
ScrDomException *d = (ScrDomException *)obj;
|
|
98
|
-
if (d->rc ==
|
|
99
|
-
|
|
108
|
+
if (--d->rc == 0) {
|
|
109
|
+
if (scr_error_traced) scr_cyc_on_dead(d);
|
|
110
|
+
scr_rc_destroy(obj, scr_domex_destroy);
|
|
111
|
+
} else if (scr_error_traced) {
|
|
112
|
+
scr_cyc_on_release(d);
|
|
100
113
|
}
|
|
101
|
-
scr_error_reld(obj);
|
|
102
114
|
}
|
|
103
115
|
|
|
104
116
|
/* Defaults cover only the instants before main() stamps the program's real
|