@encharm/cws 4.1.0 → 4.2.0
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/bindings/cws_linux_108.node +0 -0
- package/dist/bindings/cws_linux_64.node +0 -0
- package/dist/bindings/cws_linux_72.node +0 -0
- package/dist/bindings/cws_linux_79.node +0 -0
- package/dist/bindings/cws_linux_83.node +0 -0
- package/dist/bindings/cws_linux_93.node +0 -0
- package/dist/bindings/cws_win32_64.node +0 -0
- package/dist/bindings/cws_win32_72.node +0 -0
- package/dist/bindings/cws_win32_79.node +0 -0
- package/dist/bindings/cws_win32_83.node +0 -0
- package/dist/bindings/cws_win32_93.node +0 -0
- package/package.json +1 -1
- package/src/Addon.h +24 -2
- package/src/HTTPSocket.cpp +1 -1
- package/src/headers/{13 → 18}/aliased_buffer.h +61 -9
- package/src/headers/18/aliased_struct-inl.h +54 -0
- package/src/headers/18/aliased_struct.h +63 -0
- package/src/headers/{12 → 18}/async_wrap-inl.h +0 -0
- package/src/headers/{12 → 18}/async_wrap.h +26 -2
- package/src/headers/{12/base64.h → 18/base64-inl.h} +78 -86
- package/src/headers/18/base64.h +69 -0
- package/src/headers/{12 → 18}/base_object-inl.h +46 -25
- package/src/headers/{12 → 18}/base_object.h +82 -17
- package/src/headers/{12 → 18}/callback_queue-inl.h +9 -9
- package/src/headers/{12 → 18}/callback_queue.h +13 -5
- package/src/headers/18/cares_wrap.h +523 -0
- package/src/headers/{12 → 18}/connect_wrap.h +0 -0
- package/src/headers/{12 → 18}/connection_wrap.h +0 -0
- package/src/headers/18/crypto/crypto_aes.h +89 -0
- package/src/headers/{13/node_crypto_bio.h → 18/crypto/crypto_bio.h} +3 -4
- package/src/headers/18/crypto/crypto_cipher.h +291 -0
- package/src/headers/{13/node_crypto_clienthello-inl.h → 18/crypto/crypto_clienthello-inl.h} +4 -5
- package/src/headers/{13/node_crypto_clienthello.h → 18/crypto/crypto_clienthello.h} +3 -4
- package/src/headers/{12/node_crypto_common.h → 18/crypto/crypto_common.h} +49 -36
- package/src/headers/18/crypto/crypto_context.h +147 -0
- package/src/headers/18/crypto/crypto_dh.h +156 -0
- package/src/headers/18/crypto/crypto_dsa.h +77 -0
- package/src/headers/18/crypto/crypto_ec.h +170 -0
- package/src/headers/{12/node_crypto_groups.h → 18/crypto/crypto_groups.h} +3 -3
- package/src/headers/18/crypto/crypto_hash.h +89 -0
- package/src/headers/18/crypto/crypto_hkdf.h +65 -0
- package/src/headers/18/crypto/crypto_hmac.h +94 -0
- package/src/headers/18/crypto/crypto_keygen.h +305 -0
- package/src/headers/18/crypto/crypto_keys.h +420 -0
- package/src/headers/18/crypto/crypto_pbkdf2.h +76 -0
- package/src/headers/18/crypto/crypto_random.h +130 -0
- package/src/headers/18/crypto/crypto_rsa.h +141 -0
- package/src/headers/18/crypto/crypto_scrypt.h +87 -0
- package/src/headers/18/crypto/crypto_sig.h +168 -0
- package/src/headers/18/crypto/crypto_spkac.h +21 -0
- package/src/headers/18/crypto/crypto_timing.h +20 -0
- package/src/headers/{13/tls_wrap.h → 18/crypto/crypto_tls.h} +137 -66
- package/src/headers/18/crypto/crypto_util.h +791 -0
- package/src/headers/18/crypto/crypto_x509.h +143 -0
- package/src/headers/{12 → 18}/debug_utils-inl.h +0 -0
- package/src/headers/{13 → 18}/debug_utils.h +7 -4
- package/src/headers/{12 → 18}/diagnosticfilename-inl.h +0 -0
- package/src/headers/{12 → 18}/env-inl.h +397 -304
- package/src/headers/{12 → 18}/env.h +397 -172
- package/src/headers/{12 → 18}/handle_wrap.h +7 -3
- package/src/headers/18/histogram-inl.h +107 -0
- package/src/headers/18/histogram.h +239 -0
- package/src/headers/{13 → 18}/inspector_agent.h +4 -7
- package/src/headers/{12 → 18}/inspector_io.h +0 -0
- package/src/headers/{13 → 18}/inspector_profiler.h +17 -5
- package/src/headers/{12 → 18}/inspector_socket.h +0 -0
- package/src/headers/{12 → 18}/inspector_socket_server.h +0 -0
- package/src/headers/18/js_native_api.h +571 -0
- package/src/headers/{13 → 18}/js_native_api_types.h +30 -7
- package/src/headers/{12 → 18}/js_native_api_v8.h +220 -83
- package/src/headers/{12 → 18}/js_native_api_v8_internals.h +6 -5
- package/src/headers/{12 → 18}/js_stream.h +0 -0
- package/src/headers/{12 → 18}/json_utils.h +0 -0
- package/src/headers/{13 → 18}/memory_tracker-inl.h +6 -5
- package/src/headers/{13 → 18}/memory_tracker.h +0 -7
- package/src/headers/{13 → 18}/module_wrap.h +24 -7
- package/src/headers/{13 → 18}/node.h +329 -68
- package/src/headers/18/node_api.h +288 -0
- package/src/headers/18/node_api_internals.h +38 -0
- package/src/headers/{12 → 18}/node_api_types.h +12 -9
- package/src/headers/{12 → 18}/node_binding.h +0 -0
- package/src/headers/18/node_blob.h +191 -0
- package/src/headers/18/node_bob-inl.h +37 -0
- package/src/headers/18/node_bob.h +111 -0
- package/src/headers/{13 → 18}/node_buffer.h +0 -0
- package/src/headers/{13 → 18}/node_constants.h +5 -1
- package/src/headers/{12 → 18}/node_context_data.h +5 -0
- package/src/headers/{12 → 18}/node_contextify.h +37 -2
- package/src/headers/{10/node_win32_perfctr_provider.h → 18/node_crypto.h} +30 -31
- package/src/headers/{12 → 18}/node_dir.h +0 -0
- package/src/headers/{12 → 18}/node_dtrace.h +0 -0
- package/src/headers/{12 → 18}/node_errors.h +90 -24
- package/src/headers/18/node_external_reference.h +145 -0
- package/src/headers/{13 → 18}/node_file-inl.h +38 -21
- package/src/headers/{12 → 18}/node_file.h +74 -13
- package/src/headers/{13 → 18}/node_http2.h +365 -269
- package/src/headers/{12 → 18}/node_http2_state.h +40 -50
- package/src/headers/{13 → 18}/node_http_common-inl.h +25 -5
- package/src/headers/{13 → 18}/node_http_common.h +24 -20
- package/src/headers/{13 → 18}/node_i18n.h +2 -1
- package/src/headers/{12 → 18}/node_internals.h +39 -41
- package/src/headers/{13 → 18}/node_main_instance.h +15 -18
- package/src/headers/{12 → 18}/node_mem-inl.h +0 -0
- package/src/headers/{12 → 18}/node_mem.h +1 -1
- package/src/headers/{13 → 18}/node_messaging.h +170 -23
- package/src/headers/{12 → 18}/node_metadata.h +17 -4
- package/src/headers/{12 → 18}/node_mutex.h +77 -1
- package/src/headers/{12 → 18}/node_native_module.h +11 -1
- package/src/headers/{13 → 18}/node_native_module_env.h +14 -8
- package/src/headers/{12 → 18}/node_object_wrap.h +0 -0
- package/src/headers/{13 → 18}/node_options-inl.h +51 -21
- package/src/headers/{13 → 18}/node_options.h +46 -14
- package/src/headers/18/node_perf.h +168 -0
- package/src/headers/{12 → 18}/node_perf_common.h +16 -22
- package/src/headers/{12 → 18}/node_platform.h +21 -16
- package/src/headers/18/node_process-inl.h +26 -0
- package/src/headers/18/node_process.h +97 -0
- package/src/headers/{13 → 18}/node_report.h +2 -2
- package/src/headers/{13 → 18}/node_revert.h +10 -0
- package/src/headers/{12 → 18}/node_root_certs.h +439 -651
- package/src/headers/18/node_snapshot_builder.h +43 -0
- package/src/headers/18/node_snapshotable.h +130 -0
- package/src/headers/{12 → 18}/node_sockaddr-inl.h +100 -4
- package/src/headers/18/node_sockaddr.h +405 -0
- package/src/headers/{12 → 18}/node_stat_watcher.h +7 -1
- package/src/headers/{12 → 18}/node_union_bytes.h +0 -0
- package/src/headers/{13 → 18}/node_url.h +18 -1
- package/src/headers/18/node_v8.h +41 -0
- package/src/headers/{12 → 18}/node_v8_platform-inl.h +10 -0
- package/src/headers/{13 → 18}/node_version.h +7 -7
- package/src/headers/{12 → 18}/node_wasi.h +0 -0
- package/src/headers/18/node_wasm_web_api.h +55 -0
- package/src/headers/{13 → 18}/node_watchdog.h +0 -0
- package/src/headers/{10 → 18}/node_win32_etw_provider-inl.h +7 -6
- package/src/headers/{10 → 18}/node_win32_etw_provider.h +0 -0
- package/src/headers/{13 → 18}/node_worker.h +24 -17
- package/src/headers/{12 → 18}/pipe_wrap.h +2 -0
- package/src/headers/{12 → 18}/req_wrap-inl.h +0 -0
- package/src/headers/{12 → 18}/req_wrap.h +1 -1
- package/src/headers/{12 → 18}/spawn_sync.h +0 -0
- package/src/headers/{13 → 18}/stream_base-inl.h +58 -22
- package/src/headers/{13 → 18}/stream_base.h +29 -3
- package/src/headers/{13 → 18}/stream_pipe.h +8 -3
- package/src/headers/{12 → 18}/stream_wrap.h +4 -1
- package/src/headers/{13 → 18}/string_bytes.h +0 -7
- package/src/headers/{12 → 18}/string_decoder-inl.h +0 -0
- package/src/headers/{10 → 18}/string_decoder.h +0 -0
- package/src/headers/{13 → 18}/string_search.h +2 -2
- package/src/headers/{12 → 18}/tcp_wrap.h +4 -0
- package/src/headers/{12 → 18}/threadpoolwork-inl.h +0 -0
- package/src/headers/18/timer_wrap-inl.h +32 -0
- package/src/headers/18/timer_wrap.h +85 -0
- package/src/headers/{13 → 18}/tracing/agent.h +1 -1
- package/src/headers/{12 → 18}/tracing/node_trace_buffer.h +0 -0
- package/src/headers/{12 → 18}/tracing/node_trace_writer.h +0 -0
- package/src/headers/{13 → 18}/tracing/trace_event.h +23 -13
- package/src/headers/{12 → 18}/tracing/trace_event_common.h +0 -0
- package/src/headers/{12 → 18}/tracing/traced_value.h +0 -0
- package/src/headers/{13 → 18}/tty_wrap.h +2 -1
- package/src/headers/{13 → 18}/udp_wrap.h +5 -0
- package/src/headers/{13 → 18}/util-inl.h +69 -15
- package/src/headers/{13 → 18}/util.h +93 -31
- package/src/headers/18/v8-fast-api-calls.h +939 -0
- package/src/headers/{12 → 18}/v8abbr.h +2 -2
- package/src/headers/10/aliased_buffer.h +0 -241
- package/src/headers/10/async_wrap-inl.h +0 -106
- package/src/headers/10/async_wrap.h +0 -218
- package/src/headers/10/base64.h +0 -197
- package/src/headers/10/base_object-inl.h +0 -132
- package/src/headers/10/base_object.h +0 -115
- package/src/headers/10/connect_wrap.h +0 -28
- package/src/headers/10/connection_wrap.h +0 -30
- package/src/headers/10/debug_utils.h +0 -128
- package/src/headers/10/env-inl.h +0 -906
- package/src/headers/10/env.h +0 -1046
- package/src/headers/10/handle_wrap.h +0 -114
- package/src/headers/10/inspector_agent.h +0 -137
- package/src/headers/10/inspector_io.h +0 -97
- package/src/headers/10/inspector_socket.h +0 -59
- package/src/headers/10/inspector_socket_server.h +0 -104
- package/src/headers/10/js_stream.h +0 -57
- package/src/headers/10/memory_tracker-inl.h +0 -318
- package/src/headers/10/memory_tracker.h +0 -246
- package/src/headers/10/module_wrap.h +0 -100
- package/src/headers/10/node.h +0 -863
- package/src/headers/10/node_api.h +0 -752
- package/src/headers/10/node_api_types.h +0 -171
- package/src/headers/10/node_buffer.h +0 -90
- package/src/headers/10/node_code_cache.h +0 -17
- package/src/headers/10/node_constants.h +0 -74
- package/src/headers/10/node_context_data.h +0 -39
- package/src/headers/10/node_contextify.h +0 -141
- package/src/headers/10/node_counters.h +0 -59
- package/src/headers/10/node_crypto.h +0 -699
- package/src/headers/10/node_crypto_bio.h +0 -177
- package/src/headers/10/node_crypto_clienthello-inl.h +0 -92
- package/src/headers/10/node_crypto_clienthello.h +0 -131
- package/src/headers/10/node_crypto_groups.h +0 -416
- package/src/headers/10/node_dtrace.h +0 -84
- package/src/headers/10/node_errors.h +0 -118
- package/src/headers/10/node_file.h +0 -373
- package/src/headers/10/node_http2.h +0 -1304
- package/src/headers/10/node_http2_state.h +0 -158
- package/src/headers/10/node_i18n.h +0 -69
- package/src/headers/10/node_internals.h +0 -952
- package/src/headers/10/node_javascript.h +0 -41
- package/src/headers/10/node_messaging.h +0 -219
- package/src/headers/10/node_mutex.h +0 -191
- package/src/headers/10/node_object_wrap.h +0 -130
- package/src/headers/10/node_options-inl.h +0 -444
- package/src/headers/10/node_options.h +0 -397
- package/src/headers/10/node_perf.h +0 -134
- package/src/headers/10/node_perf_common.h +0 -96
- package/src/headers/10/node_persistent.h +0 -30
- package/src/headers/10/node_platform.h +0 -170
- package/src/headers/10/node_revert.h +0 -75
- package/src/headers/10/node_root_certs.h +0 -3393
- package/src/headers/10/node_stat_watcher.h +0 -65
- package/src/headers/10/node_url.h +0 -193
- package/src/headers/10/node_version.h +0 -120
- package/src/headers/10/node_watchdog.h +0 -114
- package/src/headers/10/node_worker.h +0 -94
- package/src/headers/10/pipe_wrap.h +0 -76
- package/src/headers/10/req_wrap-inl.h +0 -166
- package/src/headers/10/req_wrap.h +0 -61
- package/src/headers/10/sharedarraybuffer_metadata.h +0 -67
- package/src/headers/10/spawn_sync.h +0 -240
- package/src/headers/10/stream_base-inl.h +0 -458
- package/src/headers/10/stream_base.h +0 -378
- package/src/headers/10/stream_pipe.h +0 -72
- package/src/headers/10/stream_wrap.h +0 -130
- package/src/headers/10/string_bytes.h +0 -126
- package/src/headers/10/string_decoder-inl.h +0 -38
- package/src/headers/10/string_search.h +0 -620
- package/src/headers/10/tcp_wrap.h +0 -99
- package/src/headers/10/tls_wrap.h +0 -195
- package/src/headers/10/tracing/agent.h +0 -178
- package/src/headers/10/tracing/node_trace_buffer.h +0 -83
- package/src/headers/10/tracing/node_trace_writer.h +0 -75
- package/src/headers/10/tracing/trace_event.h +0 -706
- package/src/headers/10/tracing/trace_event_common.h +0 -1102
- package/src/headers/10/tracing/traced_value.h +0 -68
- package/src/headers/10/tty_wrap.h +0 -63
- package/src/headers/10/udp_wrap.h +0 -102
- package/src/headers/10/util-inl.h +0 -459
- package/src/headers/10/util.h +0 -508
- package/src/headers/10/v8abbr.h +0 -121
- package/src/headers/12/aliased_buffer.h +0 -263
- package/src/headers/12/debug_utils.h +0 -181
- package/src/headers/12/histogram-inl.h +0 -83
- package/src/headers/12/histogram.h +0 -98
- package/src/headers/12/http_parser_adaptor.h +0 -24
- package/src/headers/12/inspector_agent.h +0 -147
- package/src/headers/12/inspector_profiler.h +0 -137
- package/src/headers/12/js_native_api.h +0 -541
- package/src/headers/12/js_native_api_types.h +0 -139
- package/src/headers/12/memory_tracker-inl.h +0 -339
- package/src/headers/12/memory_tracker.h +0 -283
- package/src/headers/12/module_wrap.h +0 -99
- package/src/headers/12/node.h +0 -887
- package/src/headers/12/node_api.h +0 -239
- package/src/headers/12/node_buffer.h +0 -92
- package/src/headers/12/node_constants.h +0 -80
- package/src/headers/12/node_crypto.h +0 -800
- package/src/headers/12/node_crypto_bio.h +0 -195
- package/src/headers/12/node_crypto_clienthello-inl.h +0 -91
- package/src/headers/12/node_crypto_clienthello.h +0 -132
- package/src/headers/12/node_file-inl.h +0 -289
- package/src/headers/12/node_http2.h +0 -1311
- package/src/headers/12/node_http_parser_impl.h +0 -994
- package/src/headers/12/node_i18n.h +0 -144
- package/src/headers/12/node_main_instance.h +0 -97
- package/src/headers/12/node_messaging.h +0 -227
- package/src/headers/12/node_native_module_env.h +0 -65
- package/src/headers/12/node_options-inl.h +0 -447
- package/src/headers/12/node_options.h +0 -479
- package/src/headers/12/node_perf.h +0 -181
- package/src/headers/12/node_process.h +0 -41
- package/src/headers/12/node_report.h +0 -47
- package/src/headers/12/node_revert.h +0 -78
- package/src/headers/12/node_sockaddr.h +0 -123
- package/src/headers/12/node_url.h +0 -188
- package/src/headers/12/node_version.h +0 -98
- package/src/headers/12/node_watchdog.h +0 -152
- package/src/headers/12/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/12/node_win32_etw_provider.h +0 -99
- package/src/headers/12/node_worker.h +0 -142
- package/src/headers/12/sharedarraybuffer_metadata.h +0 -72
- package/src/headers/12/stream_base-inl.h +0 -323
- package/src/headers/12/stream_base.h +0 -431
- package/src/headers/12/stream_pipe.h +0 -72
- package/src/headers/12/string_bytes.h +0 -142
- package/src/headers/12/string_decoder.h +0 -50
- package/src/headers/12/string_search.h +0 -638
- package/src/headers/12/tls_wrap.h +0 -221
- package/src/headers/12/tracing/agent.h +0 -195
- package/src/headers/12/tracing/trace_event.h +0 -710
- package/src/headers/12/tty_wrap.h +0 -64
- package/src/headers/12/udp_wrap.h +0 -222
- package/src/headers/12/util-inl.h +0 -529
- package/src/headers/12/util.h +0 -765
- package/src/headers/13/async_wrap-inl.h +0 -94
- package/src/headers/13/async_wrap.h +0 -224
- package/src/headers/13/base64.h +0 -197
- package/src/headers/13/base_object-inl.h +0 -353
- package/src/headers/13/base_object.h +0 -229
- package/src/headers/13/connect_wrap.h +0 -26
- package/src/headers/13/connection_wrap.h +0 -30
- package/src/headers/13/debug_utils-inl.h +0 -223
- package/src/headers/13/diagnosticfilename-inl.h +0 -33
- package/src/headers/13/env-inl.h +0 -1293
- package/src/headers/13/env.h +0 -1469
- package/src/headers/13/handle_wrap.h +0 -117
- package/src/headers/13/histogram-inl.h +0 -83
- package/src/headers/13/histogram.h +0 -98
- package/src/headers/13/inspector_io.h +0 -78
- package/src/headers/13/inspector_socket.h +0 -60
- package/src/headers/13/inspector_socket_server.h +0 -110
- package/src/headers/13/js_native_api.h +0 -541
- package/src/headers/13/js_native_api_v8.h +0 -303
- package/src/headers/13/js_native_api_v8_internals.h +0 -38
- package/src/headers/13/js_stream.h +0 -52
- package/src/headers/13/json_utils.h +0 -160
- package/src/headers/13/node_api.h +0 -239
- package/src/headers/13/node_api_types.h +0 -44
- package/src/headers/13/node_binding.h +0 -99
- package/src/headers/13/node_context_data.h +0 -39
- package/src/headers/13/node_contextify.h +0 -161
- package/src/headers/13/node_crypto.h +0 -800
- package/src/headers/13/node_crypto_common.h +0 -138
- package/src/headers/13/node_crypto_groups.h +0 -415
- package/src/headers/13/node_dir.h +0 -52
- package/src/headers/13/node_dtrace.h +0 -86
- package/src/headers/13/node_errors.h +0 -210
- package/src/headers/13/node_file.h +0 -364
- package/src/headers/13/node_http2_state.h +0 -144
- package/src/headers/13/node_internals.h +0 -405
- package/src/headers/13/node_mem-inl.h +0 -112
- package/src/headers/13/node_mem.h +0 -41
- package/src/headers/13/node_metadata.h +0 -109
- package/src/headers/13/node_mutex.h +0 -247
- package/src/headers/13/node_native_module.h +0 -99
- package/src/headers/13/node_object_wrap.h +0 -132
- package/src/headers/13/node_perf.h +0 -181
- package/src/headers/13/node_perf_common.h +0 -97
- package/src/headers/13/node_platform.h +0 -190
- package/src/headers/13/node_process.h +0 -41
- package/src/headers/13/node_root_certs.h +0 -3424
- package/src/headers/13/node_sockaddr-inl.h +0 -170
- package/src/headers/13/node_sockaddr.h +0 -123
- package/src/headers/13/node_stat_watcher.h +0 -66
- package/src/headers/13/node_union_bytes.h +0 -103
- package/src/headers/13/node_v8_platform-inl.h +0 -184
- package/src/headers/13/node_wasi.h +0 -108
- package/src/headers/13/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/13/node_win32_etw_provider.h +0 -99
- package/src/headers/13/pipe_wrap.h +0 -78
- package/src/headers/13/req_wrap-inl.h +0 -170
- package/src/headers/13/req_wrap.h +0 -77
- package/src/headers/13/spawn_sync.h +0 -242
- package/src/headers/13/stream_wrap.h +0 -130
- package/src/headers/13/string_decoder-inl.h +0 -37
- package/src/headers/13/string_decoder.h +0 -50
- package/src/headers/13/tcp_wrap.h +0 -101
- package/src/headers/13/threadpoolwork-inl.h +0 -57
- package/src/headers/13/tracing/node_trace_buffer.h +0 -83
- package/src/headers/13/tracing/node_trace_writer.h +0 -75
- package/src/headers/13/tracing/trace_event_common.h +0 -1109
- package/src/headers/13/tracing/traced_value.h +0 -70
- package/src/headers/13/v8abbr.h +0 -124
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#ifndef SRC_TIMER_WRAP_H_
|
|
2
|
+
#define SRC_TIMER_WRAP_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "memory_tracker.h"
|
|
7
|
+
#include "env.h"
|
|
8
|
+
#include "uv.h"
|
|
9
|
+
|
|
10
|
+
#include <functional>
|
|
11
|
+
|
|
12
|
+
namespace node {
|
|
13
|
+
|
|
14
|
+
// Utility class that makes working with libuv timers a bit easier.
|
|
15
|
+
class TimerWrap final : public MemoryRetainer {
|
|
16
|
+
public:
|
|
17
|
+
using TimerCb = std::function<void()>;
|
|
18
|
+
|
|
19
|
+
template <typename... Args>
|
|
20
|
+
explicit inline TimerWrap(Environment* env, Args&&... args);
|
|
21
|
+
|
|
22
|
+
TimerWrap(const TimerWrap&) = delete;
|
|
23
|
+
|
|
24
|
+
inline Environment* env() const { return env_; }
|
|
25
|
+
|
|
26
|
+
// Stop calling the timer callback.
|
|
27
|
+
void Stop();
|
|
28
|
+
// Render the timer unusable and delete this object.
|
|
29
|
+
void Close();
|
|
30
|
+
|
|
31
|
+
// Starts / Restarts the Timer
|
|
32
|
+
void Update(uint64_t interval, uint64_t repeat = 0);
|
|
33
|
+
|
|
34
|
+
void Ref();
|
|
35
|
+
void Unref();
|
|
36
|
+
|
|
37
|
+
SET_NO_MEMORY_INFO()
|
|
38
|
+
SET_MEMORY_INFO_NAME(TimerWrap)
|
|
39
|
+
SET_SELF_SIZE(TimerWrap)
|
|
40
|
+
|
|
41
|
+
private:
|
|
42
|
+
static void TimerClosedCb(uv_handle_t* handle);
|
|
43
|
+
static void OnTimeout(uv_timer_t* timer);
|
|
44
|
+
~TimerWrap() = default;
|
|
45
|
+
|
|
46
|
+
Environment* env_;
|
|
47
|
+
TimerCb fn_;
|
|
48
|
+
uv_timer_t timer_;
|
|
49
|
+
|
|
50
|
+
friend std::unique_ptr<TimerWrap>::deleter_type;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
class TimerWrapHandle : public MemoryRetainer {
|
|
54
|
+
public:
|
|
55
|
+
template <typename... Args>
|
|
56
|
+
explicit inline TimerWrapHandle(Environment* env, Args&&... args);
|
|
57
|
+
|
|
58
|
+
TimerWrapHandle(const TimerWrapHandle&) = delete;
|
|
59
|
+
|
|
60
|
+
~TimerWrapHandle() { Close(); }
|
|
61
|
+
|
|
62
|
+
void Update(uint64_t interval, uint64_t repeat = 0);
|
|
63
|
+
|
|
64
|
+
void Ref();
|
|
65
|
+
void Unref();
|
|
66
|
+
|
|
67
|
+
void Stop();
|
|
68
|
+
void Close();
|
|
69
|
+
|
|
70
|
+
void MemoryInfo(node::MemoryTracker* tracker) const override;
|
|
71
|
+
|
|
72
|
+
SET_MEMORY_INFO_NAME(TimerWrapHandle)
|
|
73
|
+
SET_SELF_SIZE(TimerWrapHandle)
|
|
74
|
+
|
|
75
|
+
private:
|
|
76
|
+
static void CleanupHook(void* data);
|
|
77
|
+
|
|
78
|
+
TimerWrap* timer_;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
} // namespace node
|
|
82
|
+
|
|
83
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
84
|
+
|
|
85
|
+
#endif // SRC_TIMER_WRAP_H_
|
|
File without changes
|
|
File without changes
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
#ifndef SRC_TRACING_TRACE_EVENT_H_
|
|
6
6
|
#define SRC_TRACING_TRACE_EVENT_H_
|
|
7
7
|
|
|
8
|
-
#include "../node_platform.h"
|
|
9
8
|
#include "v8-platform.h"
|
|
9
|
+
#include "tracing/agent.h"
|
|
10
10
|
#include "trace_event_common.h"
|
|
11
11
|
#include <atomic>
|
|
12
12
|
|
|
@@ -70,8 +70,7 @@ enum CategoryGroupEnabledFlags {
|
|
|
70
70
|
// const uint8_t*
|
|
71
71
|
// TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(const char* category_group)
|
|
72
72
|
#define TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED \
|
|
73
|
-
node::tracing::TraceEventHelper::
|
|
74
|
-
->GetCategoryGroupEnabled
|
|
73
|
+
node::tracing::TraceEventHelper::GetCategoryGroupEnabled
|
|
75
74
|
|
|
76
75
|
// Get the number of times traces have been recorded. This is used to implement
|
|
77
76
|
// the TRACE_EVENT_IS_NEW_TRACE facility.
|
|
@@ -115,9 +114,10 @@ enum CategoryGroupEnabledFlags {
|
|
|
115
114
|
// const uint8_t* category_group_enabled,
|
|
116
115
|
// const char* name,
|
|
117
116
|
// uint64_t id)
|
|
118
|
-
#define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION
|
|
119
|
-
|
|
120
|
-
|
|
117
|
+
#define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \
|
|
118
|
+
if (auto controller = \
|
|
119
|
+
node::tracing::TraceEventHelper::GetTracingController()) \
|
|
120
|
+
controller->UpdateTraceEventDuration
|
|
121
121
|
|
|
122
122
|
// Adds a metadata event to the trace log. The |AppendValueAsTraceFormat| method
|
|
123
123
|
// on the convertable value will be called at flush time.
|
|
@@ -310,13 +310,20 @@ const int kZeroNumArgs = 0;
|
|
|
310
310
|
const decltype(nullptr) kGlobalScope = nullptr;
|
|
311
311
|
const uint64_t kNoId = 0;
|
|
312
312
|
|
|
313
|
-
|
|
314
|
-
// Refs: https://github.com/nodejs/node/pull/28724
|
|
315
|
-
class NODE_EXTERN TraceEventHelper {
|
|
313
|
+
class TraceEventHelper {
|
|
316
314
|
public:
|
|
317
|
-
static TracingController* GetTracingController();
|
|
315
|
+
static v8::TracingController* GetTracingController();
|
|
316
|
+
static void SetTracingController(v8::TracingController* controller);
|
|
317
|
+
|
|
318
318
|
static Agent* GetAgent();
|
|
319
319
|
static void SetAgent(Agent* agent);
|
|
320
|
+
|
|
321
|
+
static inline const uint8_t* GetCategoryGroupEnabled(const char* group) {
|
|
322
|
+
v8::TracingController* controller = GetTracingController();
|
|
323
|
+
static const uint8_t disabled = 0;
|
|
324
|
+
if (UNLIKELY(controller == nullptr)) return &disabled;
|
|
325
|
+
return controller->GetCategoryGroupEnabled(group);
|
|
326
|
+
}
|
|
320
327
|
};
|
|
321
328
|
|
|
322
329
|
// TraceID encapsulates an ID that can either be an integer or pointer. Pointers
|
|
@@ -465,6 +472,7 @@ static inline uint64_t AddTraceEventImpl(
|
|
|
465
472
|
// DCHECK(num_args, 2);
|
|
466
473
|
v8::TracingController* controller =
|
|
467
474
|
node::tracing::TraceEventHelper::GetTracingController();
|
|
475
|
+
if (controller == nullptr) return 0;
|
|
468
476
|
return controller->AddTraceEvent(phase, category_group_enabled, name, scope, id,
|
|
469
477
|
bind_id, num_args, arg_names, arg_types,
|
|
470
478
|
arg_values, arg_convertibles, flags);
|
|
@@ -487,6 +495,7 @@ static V8_INLINE uint64_t AddTraceEventWithTimestampImpl(
|
|
|
487
495
|
// DCHECK_LE(num_args, 2);
|
|
488
496
|
v8::TracingController* controller =
|
|
489
497
|
node::tracing::TraceEventHelper::GetTracingController();
|
|
498
|
+
if (controller == nullptr) return 0;
|
|
490
499
|
return controller->AddTraceEventWithTimestamp(
|
|
491
500
|
phase, category_group_enabled, name, scope, id, bind_id, num_args,
|
|
492
501
|
arg_names, arg_types, arg_values, arg_convertables, flags, timestamp);
|
|
@@ -505,9 +514,10 @@ static V8_INLINE void AddMetadataEventImpl(
|
|
|
505
514
|
arg_convertibles[1].reset(reinterpret_cast<v8::ConvertableToTraceFormat*>(
|
|
506
515
|
static_cast<intptr_t>(arg_values[1])));
|
|
507
516
|
}
|
|
508
|
-
node::tracing::
|
|
509
|
-
node::tracing::TraceEventHelper::
|
|
510
|
-
|
|
517
|
+
node::tracing::Agent* agent =
|
|
518
|
+
node::tracing::TraceEventHelper::GetAgent();
|
|
519
|
+
if (agent == nullptr) return;
|
|
520
|
+
return agent->GetTracingController()->AddMetadataEvent(
|
|
511
521
|
category_group_enabled, name, num_args, arg_names, arg_types, arg_values,
|
|
512
522
|
arg_convertibles, flags);
|
|
513
523
|
}
|
|
File without changes
|
|
File without changes
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
namespace node {
|
|
31
31
|
|
|
32
32
|
class Environment;
|
|
33
|
+
class ExternalReferenceRegistry;
|
|
33
34
|
|
|
34
35
|
class TTYWrap : public LibuvStreamWrap {
|
|
35
36
|
public:
|
|
@@ -37,6 +38,7 @@ class TTYWrap : public LibuvStreamWrap {
|
|
|
37
38
|
v8::Local<v8::Value> unused,
|
|
38
39
|
v8::Local<v8::Context> context,
|
|
39
40
|
void* priv);
|
|
41
|
+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
|
|
40
42
|
|
|
41
43
|
SET_NO_MEMORY_INFO()
|
|
42
44
|
SET_MEMORY_INFO_NAME(TTYWrap)
|
|
@@ -46,7 +48,6 @@ class TTYWrap : public LibuvStreamWrap {
|
|
|
46
48
|
TTYWrap(Environment* env,
|
|
47
49
|
v8::Local<v8::Object> object,
|
|
48
50
|
int fd,
|
|
49
|
-
bool readable,
|
|
50
51
|
int* init_err);
|
|
51
52
|
|
|
52
53
|
static void IsTTY(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
@@ -215,6 +215,11 @@ class UDPWrap final : public HandleWrap,
|
|
|
215
215
|
v8::Local<v8::Object> current_send_req_wrap_;
|
|
216
216
|
};
|
|
217
217
|
|
|
218
|
+
int sockaddr_for_family(int address_family,
|
|
219
|
+
const char* address,
|
|
220
|
+
const unsigned short port,
|
|
221
|
+
sockaddr_storage* addr);
|
|
222
|
+
|
|
218
223
|
} // namespace node
|
|
219
224
|
|
|
220
225
|
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
#include <cmath>
|
|
28
28
|
#include <cstring>
|
|
29
|
+
#include <locale>
|
|
29
30
|
#include "util.h"
|
|
30
31
|
|
|
31
32
|
// These are defined by <sys/byteorder.h> or <netinet/in.h> on some systems.
|
|
@@ -63,6 +64,14 @@
|
|
|
63
64
|
(((x) & 0x00000000000000FFull) << 56)
|
|
64
65
|
#endif
|
|
65
66
|
|
|
67
|
+
#define CHAR_TEST(bits, name, expr) \
|
|
68
|
+
template <typename T> \
|
|
69
|
+
bool name(const T ch) { \
|
|
70
|
+
static_assert(sizeof(ch) >= (bits) / 8, \
|
|
71
|
+
"Character must be wider than " #bits " bits"); \
|
|
72
|
+
return (expr); \
|
|
73
|
+
}
|
|
74
|
+
|
|
66
75
|
namespace node {
|
|
67
76
|
|
|
68
77
|
template <typename T>
|
|
@@ -208,8 +217,7 @@ void SwapBytes16(char* data, size_t nbytes) {
|
|
|
208
217
|
CHECK_EQ(nbytes % 2, 0);
|
|
209
218
|
|
|
210
219
|
#if defined(_MSC_VER)
|
|
211
|
-
|
|
212
|
-
if (align == 0) {
|
|
220
|
+
if (AlignUp(data, sizeof(uint16_t)) == data) {
|
|
213
221
|
// MSVC has no strict aliasing, and is able to highly optimize this case.
|
|
214
222
|
uint16_t* data16 = reinterpret_cast<uint16_t*>(data);
|
|
215
223
|
size_t len16 = nbytes / sizeof(*data16);
|
|
@@ -232,9 +240,8 @@ void SwapBytes32(char* data, size_t nbytes) {
|
|
|
232
240
|
CHECK_EQ(nbytes % 4, 0);
|
|
233
241
|
|
|
234
242
|
#if defined(_MSC_VER)
|
|
235
|
-
int align = reinterpret_cast<uintptr_t>(data) % sizeof(uint32_t);
|
|
236
243
|
// MSVC has no strict aliasing, and is able to highly optimize this case.
|
|
237
|
-
if (
|
|
244
|
+
if (AlignUp(data, sizeof(uint32_t)) == data) {
|
|
238
245
|
uint32_t* data32 = reinterpret_cast<uint32_t*>(data);
|
|
239
246
|
size_t len32 = nbytes / sizeof(*data32);
|
|
240
247
|
for (size_t i = 0; i < len32; i++) {
|
|
@@ -256,8 +263,7 @@ void SwapBytes64(char* data, size_t nbytes) {
|
|
|
256
263
|
CHECK_EQ(nbytes % 8, 0);
|
|
257
264
|
|
|
258
265
|
#if defined(_MSC_VER)
|
|
259
|
-
|
|
260
|
-
if (align == 0) {
|
|
266
|
+
if (AlignUp(data, sizeof(uint64_t)) == data) {
|
|
261
267
|
// MSVC has no strict aliasing, and is able to highly optimize this case.
|
|
262
268
|
uint64_t* data64 = reinterpret_cast<uint64_t*>(data);
|
|
263
269
|
size_t len64 = nbytes / sizeof(*data64);
|
|
@@ -277,7 +283,7 @@ void SwapBytes64(char* data, size_t nbytes) {
|
|
|
277
283
|
}
|
|
278
284
|
|
|
279
285
|
char ToLower(char c) {
|
|
280
|
-
return c
|
|
286
|
+
return std::tolower(c, std::locale::classic());
|
|
281
287
|
}
|
|
282
288
|
|
|
283
289
|
std::string ToLower(const std::string& in) {
|
|
@@ -288,7 +294,7 @@ std::string ToLower(const std::string& in) {
|
|
|
288
294
|
}
|
|
289
295
|
|
|
290
296
|
char ToUpper(char c) {
|
|
291
|
-
return c
|
|
297
|
+
return std::toupper(c, std::locale::classic());
|
|
292
298
|
}
|
|
293
299
|
|
|
294
300
|
std::string ToUpper(const std::string& in) {
|
|
@@ -299,12 +305,10 @@ std::string ToUpper(const std::string& in) {
|
|
|
299
305
|
}
|
|
300
306
|
|
|
301
307
|
bool StringEqualNoCase(const char* a, const char* b) {
|
|
302
|
-
|
|
303
|
-
if (*a == '\0')
|
|
304
|
-
return
|
|
305
|
-
|
|
306
|
-
return *a == '\0';
|
|
307
|
-
} while (ToLower(*a++) == ToLower(*b++));
|
|
308
|
+
while (ToLower(*a) == ToLower(*b++)) {
|
|
309
|
+
if (*a++ == '\0')
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
308
312
|
return false;
|
|
309
313
|
}
|
|
310
314
|
|
|
@@ -400,7 +404,7 @@ inline char* UncheckedCalloc(size_t n) { return UncheckedCalloc<char>(n); }
|
|
|
400
404
|
void ThrowErrStringTooLong(v8::Isolate* isolate);
|
|
401
405
|
|
|
402
406
|
v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
|
|
403
|
-
|
|
407
|
+
std::string_view str,
|
|
404
408
|
v8::Isolate* isolate) {
|
|
405
409
|
if (isolate == nullptr) isolate = context->GetIsolate();
|
|
406
410
|
if (UNLIKELY(str.size() >= static_cast<size_t>(v8::String::kMaxLength))) {
|
|
@@ -432,6 +436,25 @@ v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
|
|
|
432
436
|
return handle_scope.Escape(v8::Array::New(isolate, arr.out(), arr.length()));
|
|
433
437
|
}
|
|
434
438
|
|
|
439
|
+
template <typename T>
|
|
440
|
+
v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
|
|
441
|
+
const std::set<T>& set,
|
|
442
|
+
v8::Isolate* isolate) {
|
|
443
|
+
if (isolate == nullptr) isolate = context->GetIsolate();
|
|
444
|
+
v8::Local<v8::Set> set_js = v8::Set::New(isolate);
|
|
445
|
+
v8::HandleScope handle_scope(isolate);
|
|
446
|
+
|
|
447
|
+
for (const T& entry : set) {
|
|
448
|
+
v8::Local<v8::Value> value;
|
|
449
|
+
if (!ToV8Value(context, entry, isolate).ToLocal(&value))
|
|
450
|
+
return {};
|
|
451
|
+
if (set_js->Add(context, value).IsEmpty())
|
|
452
|
+
return {};
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
return set_js;
|
|
456
|
+
}
|
|
457
|
+
|
|
435
458
|
template <typename T, typename U>
|
|
436
459
|
v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
|
|
437
460
|
const std::unordered_map<T, U>& map,
|
|
@@ -533,6 +556,37 @@ inline bool IsSafeJsInt(v8::Local<v8::Value> v) {
|
|
|
533
556
|
return false;
|
|
534
557
|
}
|
|
535
558
|
|
|
559
|
+
constexpr size_t FastStringKey::HashImpl(const char* str) {
|
|
560
|
+
// Low-quality hash (djb2), but just fine for current use cases.
|
|
561
|
+
size_t h = 5381;
|
|
562
|
+
while (*str != '\0') {
|
|
563
|
+
h = h * 33 + *(str++); // NOLINT(readability/pointer_notation)
|
|
564
|
+
}
|
|
565
|
+
return h;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
constexpr size_t FastStringKey::Hash::operator()(
|
|
569
|
+
const FastStringKey& key) const {
|
|
570
|
+
return key.cached_hash_;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
constexpr bool FastStringKey::operator==(const FastStringKey& other) const {
|
|
574
|
+
const char* p1 = name_;
|
|
575
|
+
const char* p2 = other.name_;
|
|
576
|
+
if (p1 == p2) return true;
|
|
577
|
+
do {
|
|
578
|
+
if (*(p1++) != *(p2++)) return false;
|
|
579
|
+
} while (*p1 != '\0');
|
|
580
|
+
return *p2 == '\0';
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
constexpr FastStringKey::FastStringKey(const char* name)
|
|
584
|
+
: name_(name), cached_hash_(HashImpl(name)) {}
|
|
585
|
+
|
|
586
|
+
constexpr const char* FastStringKey::c_str() const {
|
|
587
|
+
return name_;
|
|
588
|
+
}
|
|
589
|
+
|
|
536
590
|
} // namespace node
|
|
537
591
|
|
|
538
592
|
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
@@ -24,30 +24,26 @@
|
|
|
24
24
|
|
|
25
25
|
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
26
26
|
|
|
27
|
-
#if (__GNUC__ >= 8) && !defined(__clang__)
|
|
28
|
-
#pragma GCC diagnostic push
|
|
29
|
-
#pragma GCC diagnostic ignored "-Wcast-function-type"
|
|
30
|
-
#endif
|
|
31
27
|
#include "v8.h"
|
|
32
|
-
#if (__GNUC__ >= 8) && !defined(__clang__)
|
|
33
|
-
#pragma GCC diagnostic pop
|
|
34
|
-
#endif
|
|
35
28
|
|
|
36
|
-
#include
|
|
37
|
-
|
|
38
|
-
#include <
|
|
29
|
+
#include "node.h"
|
|
30
|
+
|
|
31
|
+
#include <climits>
|
|
39
32
|
#include <cstddef>
|
|
40
33
|
#include <cstdio>
|
|
41
34
|
#include <cstdlib>
|
|
42
35
|
#include <cstring>
|
|
43
36
|
|
|
44
|
-
#include <
|
|
37
|
+
#include <array>
|
|
45
38
|
#include <limits>
|
|
46
|
-
#include <
|
|
39
|
+
#include <memory>
|
|
47
40
|
#include <string>
|
|
48
|
-
#include <
|
|
41
|
+
#include <string_view>
|
|
42
|
+
#include <type_traits>
|
|
43
|
+
#include <set>
|
|
49
44
|
#include <unordered_map>
|
|
50
45
|
#include <utility>
|
|
46
|
+
#include <vector>
|
|
51
47
|
|
|
52
48
|
#ifdef __GNUC__
|
|
53
49
|
#define MUST_USE_RESULT __attribute__((warn_unused_result))
|
|
@@ -100,7 +96,7 @@ inline T MultiplyWithOverflowCheck(T a, T b);
|
|
|
100
96
|
|
|
101
97
|
namespace per_process {
|
|
102
98
|
// Tells whether the per-process V8::Initialize() is called and
|
|
103
|
-
// if it is safe to call v8::Isolate::
|
|
99
|
+
// if it is safe to call v8::Isolate::TryGetCurrent().
|
|
104
100
|
extern bool v8_initialized;
|
|
105
101
|
} // namespace per_process
|
|
106
102
|
|
|
@@ -116,8 +112,8 @@ struct AssertionInfo {
|
|
|
116
112
|
const char* message;
|
|
117
113
|
const char* function;
|
|
118
114
|
};
|
|
119
|
-
[[noreturn]] void Assert(const AssertionInfo& info);
|
|
120
|
-
[[noreturn]] void Abort();
|
|
115
|
+
[[noreturn]] void NODE_EXTERN_PRIVATE Assert(const AssertionInfo& info);
|
|
116
|
+
[[noreturn]] void NODE_EXTERN_PRIVATE Abort();
|
|
121
117
|
void DumpBacktrace(FILE* fp);
|
|
122
118
|
|
|
123
119
|
// Windows 8+ does not like abort() in Release mode
|
|
@@ -328,6 +324,16 @@ inline bool StringEqualNoCase(const char* a, const char* b);
|
|
|
328
324
|
// strncasecmp() is locale-sensitive. Use StringEqualNoCaseN() instead.
|
|
329
325
|
inline bool StringEqualNoCaseN(const char* a, const char* b, size_t length);
|
|
330
326
|
|
|
327
|
+
template <typename T, size_t N>
|
|
328
|
+
constexpr size_t arraysize(const T (&)[N]) {
|
|
329
|
+
return N;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
template <typename T, size_t N>
|
|
333
|
+
constexpr size_t strsize(const T (&)[N]) {
|
|
334
|
+
return N - 1;
|
|
335
|
+
}
|
|
336
|
+
|
|
331
337
|
// Allocates an array of member type T. For up to kStackStorageSize items,
|
|
332
338
|
// the stack is used, otherwise malloc().
|
|
333
339
|
template <typename T, size_t kStackStorageSize = 1024>
|
|
@@ -367,8 +373,7 @@ class MaybeStackBuffer {
|
|
|
367
373
|
// Current maximum capacity of the buffer with which SetLength() can be used
|
|
368
374
|
// without first calling AllocateSufficientStorage().
|
|
369
375
|
size_t capacity() const {
|
|
370
|
-
return
|
|
371
|
-
IsInvalidated() ? 0 : kStackStorageSize;
|
|
376
|
+
return capacity_;
|
|
372
377
|
}
|
|
373
378
|
|
|
374
379
|
// Make sure enough space for `storage` entries is available.
|
|
@@ -404,12 +409,13 @@ class MaybeStackBuffer {
|
|
|
404
409
|
buf_[length] = T();
|
|
405
410
|
}
|
|
406
411
|
|
|
407
|
-
// Make
|
|
412
|
+
// Make dereferencing this object return nullptr.
|
|
408
413
|
// This method can be called multiple times throughout the lifetime of the
|
|
409
414
|
// buffer, but once this has been called AllocateSufficientStorage() cannot
|
|
410
415
|
// be used.
|
|
411
416
|
void Invalidate() {
|
|
412
417
|
CHECK(!IsAllocated());
|
|
418
|
+
capacity_ = 0;
|
|
413
419
|
length_ = 0;
|
|
414
420
|
buf_ = nullptr;
|
|
415
421
|
}
|
|
@@ -430,10 +436,11 @@ class MaybeStackBuffer {
|
|
|
430
436
|
CHECK(IsAllocated());
|
|
431
437
|
buf_ = buf_st_;
|
|
432
438
|
length_ = 0;
|
|
433
|
-
capacity_ =
|
|
439
|
+
capacity_ = arraysize(buf_st_);
|
|
434
440
|
}
|
|
435
441
|
|
|
436
|
-
MaybeStackBuffer()
|
|
442
|
+
MaybeStackBuffer()
|
|
443
|
+
: length_(0), capacity_(arraysize(buf_st_)), buf_(buf_st_) {
|
|
437
444
|
// Default to a zero-length, null-terminated buffer.
|
|
438
445
|
buf_[0] = T();
|
|
439
446
|
}
|
|
@@ -482,6 +489,10 @@ class Utf8Value : public MaybeStackBuffer<char> {
|
|
|
482
489
|
explicit Utf8Value(v8::Isolate* isolate, v8::Local<v8::Value> value);
|
|
483
490
|
|
|
484
491
|
inline std::string ToString() const { return std::string(out(), length()); }
|
|
492
|
+
|
|
493
|
+
inline bool operator==(const char* a) const {
|
|
494
|
+
return strcmp(out(), a) == 0;
|
|
495
|
+
}
|
|
485
496
|
};
|
|
486
497
|
|
|
487
498
|
class TwoByteValue : public MaybeStackBuffer<uint16_t> {
|
|
@@ -560,6 +571,11 @@ struct MallocedBuffer {
|
|
|
560
571
|
size = new_size;
|
|
561
572
|
}
|
|
562
573
|
|
|
574
|
+
void Realloc(size_t new_size) {
|
|
575
|
+
Truncate(new_size);
|
|
576
|
+
data = UncheckedRealloc(data, new_size);
|
|
577
|
+
}
|
|
578
|
+
|
|
563
579
|
inline bool is_empty() const { return data == nullptr; }
|
|
564
580
|
|
|
565
581
|
MallocedBuffer() : data(nullptr), size(0) {}
|
|
@@ -591,6 +607,15 @@ class NonCopyableMaybe {
|
|
|
591
607
|
return empty_;
|
|
592
608
|
}
|
|
593
609
|
|
|
610
|
+
const T* get() const {
|
|
611
|
+
return empty_ ? nullptr : &value_;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
const T* operator->() const {
|
|
615
|
+
CHECK(!empty_);
|
|
616
|
+
return &value_;
|
|
617
|
+
}
|
|
618
|
+
|
|
594
619
|
T&& Release() {
|
|
595
620
|
CHECK_EQ(empty_, false);
|
|
596
621
|
empty_ = true;
|
|
@@ -623,7 +648,7 @@ using DeleteFnPtr = typename FunctionDeleter<T, function>::Pointer;
|
|
|
623
648
|
std::vector<std::string> SplitString(const std::string& in, char delim);
|
|
624
649
|
|
|
625
650
|
inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
|
|
626
|
-
|
|
651
|
+
std::string_view str,
|
|
627
652
|
v8::Isolate* isolate = nullptr);
|
|
628
653
|
template <typename T, typename test_for_number =
|
|
629
654
|
typename std::enable_if<std::numeric_limits<T>::is_specialized, bool>::type>
|
|
@@ -634,6 +659,10 @@ template <typename T>
|
|
|
634
659
|
inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
|
|
635
660
|
const std::vector<T>& vec,
|
|
636
661
|
v8::Isolate* isolate = nullptr);
|
|
662
|
+
template <typename T>
|
|
663
|
+
inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
|
|
664
|
+
const std::set<T>& set,
|
|
665
|
+
v8::Isolate* isolate = nullptr);
|
|
637
666
|
template <typename T, typename U>
|
|
638
667
|
inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
|
|
639
668
|
const std::unordered_map<T, U>& map,
|
|
@@ -672,11 +701,9 @@ inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
|
|
|
672
701
|
do { \
|
|
673
702
|
v8::Isolate* isolate = target->GetIsolate(); \
|
|
674
703
|
v8::Local<v8::String> constant_name = \
|
|
675
|
-
v8::String::NewFromUtf8(isolate, name
|
|
676
|
-
.ToLocalChecked(); \
|
|
704
|
+
v8::String::NewFromUtf8(isolate, name).ToLocalChecked(); \
|
|
677
705
|
v8::Local<v8::String> constant_value = \
|
|
678
|
-
v8::String::NewFromUtf8(isolate, constant
|
|
679
|
-
.ToLocalChecked(); \
|
|
706
|
+
v8::String::NewFromUtf8(isolate, constant).ToLocalChecked(); \
|
|
680
707
|
v8::PropertyAttribute constant_attributes = \
|
|
681
708
|
static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete); \
|
|
682
709
|
target \
|
|
@@ -709,17 +736,19 @@ inline bool IsBigEndian() {
|
|
|
709
736
|
return GetEndianness() == kBigEndian;
|
|
710
737
|
}
|
|
711
738
|
|
|
712
|
-
template <typename T, size_t N>
|
|
713
|
-
constexpr size_t arraysize(const T (&)[N]) {
|
|
714
|
-
return N;
|
|
715
|
-
}
|
|
716
|
-
|
|
717
739
|
// Round up a to the next highest multiple of b.
|
|
718
740
|
template <typename T>
|
|
719
741
|
constexpr T RoundUp(T a, T b) {
|
|
720
742
|
return a % b != 0 ? a + b - (a % b) : a;
|
|
721
743
|
}
|
|
722
744
|
|
|
745
|
+
// Align ptr to an `alignment`-bytes boundary.
|
|
746
|
+
template <typename T, typename U>
|
|
747
|
+
constexpr T* AlignUp(T* ptr, U alignment) {
|
|
748
|
+
return reinterpret_cast<T*>(
|
|
749
|
+
RoundUp(reinterpret_cast<uintptr_t>(ptr), alignment));
|
|
750
|
+
}
|
|
751
|
+
|
|
723
752
|
class SlicedArguments : public MaybeStackBuffer<v8::Local<v8::Value>> {
|
|
724
753
|
public:
|
|
725
754
|
inline explicit SlicedArguments(
|
|
@@ -752,6 +781,7 @@ class PersistentToLocal {
|
|
|
752
781
|
template <class TypeName>
|
|
753
782
|
static inline v8::Local<TypeName> Strong(
|
|
754
783
|
const v8::PersistentBase<TypeName>& persistent) {
|
|
784
|
+
DCHECK(!persistent.IsWeak());
|
|
755
785
|
return *reinterpret_cast<v8::Local<TypeName>*>(
|
|
756
786
|
const_cast<v8::PersistentBase<TypeName>*>(&persistent));
|
|
757
787
|
}
|
|
@@ -764,6 +794,38 @@ class PersistentToLocal {
|
|
|
764
794
|
}
|
|
765
795
|
};
|
|
766
796
|
|
|
797
|
+
// Can be used as a key for std::unordered_map when lookup performance is more
|
|
798
|
+
// important than size and the keys are statically used to avoid redundant hash
|
|
799
|
+
// computations.
|
|
800
|
+
class FastStringKey {
|
|
801
|
+
public:
|
|
802
|
+
constexpr explicit FastStringKey(const char* name);
|
|
803
|
+
|
|
804
|
+
struct Hash {
|
|
805
|
+
constexpr size_t operator()(const FastStringKey& key) const;
|
|
806
|
+
};
|
|
807
|
+
constexpr bool operator==(const FastStringKey& other) const;
|
|
808
|
+
|
|
809
|
+
constexpr const char* c_str() const;
|
|
810
|
+
|
|
811
|
+
private:
|
|
812
|
+
static constexpr size_t HashImpl(const char* str);
|
|
813
|
+
|
|
814
|
+
const char* name_;
|
|
815
|
+
size_t cached_hash_;
|
|
816
|
+
};
|
|
817
|
+
|
|
818
|
+
// Like std::static_pointer_cast but for unique_ptr with the default deleter.
|
|
819
|
+
template <typename T, typename U>
|
|
820
|
+
std::unique_ptr<T> static_unique_pointer_cast(std::unique_ptr<U>&& ptr) {
|
|
821
|
+
return std::unique_ptr<T>(static_cast<T*>(ptr.release()));
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
#define MAYBE_FIELD_PTR(ptr, field) ptr == nullptr ? nullptr : &(ptr->field)
|
|
825
|
+
|
|
826
|
+
// Returns a non-zero code if it fails to open or read the file,
|
|
827
|
+
// aborts if it fails to close the file.
|
|
828
|
+
int ReadFileSync(std::string* result, const char* path);
|
|
767
829
|
} // namespace node
|
|
768
830
|
|
|
769
831
|
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|