@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
|
@@ -53,19 +53,11 @@ class RefTracker {
|
|
|
53
53
|
|
|
54
54
|
struct napi_env__ {
|
|
55
55
|
explicit napi_env__(v8::Local<v8::Context> context)
|
|
56
|
-
: isolate(context->GetIsolate()),
|
|
57
|
-
context_persistent(isolate, context) {
|
|
56
|
+
: isolate(context->GetIsolate()), context_persistent(isolate, context) {
|
|
58
57
|
CHECK_EQ(isolate, context->GetIsolate());
|
|
58
|
+
napi_clear_last_error(this);
|
|
59
59
|
}
|
|
60
|
-
virtual ~napi_env__() {
|
|
61
|
-
// First we must finalize those references that have `napi_finalizer`
|
|
62
|
-
// callbacks. The reason is that addons might store other references which
|
|
63
|
-
// they delete during their `napi_finalizer` callbacks. If we deleted such
|
|
64
|
-
// references here first, they would be doubly deleted when the
|
|
65
|
-
// `napi_finalizer` deleted them subsequently.
|
|
66
|
-
v8impl::RefTracker::FinalizeAll(&finalizing_reflist);
|
|
67
|
-
v8impl::RefTracker::FinalizeAll(&reflist);
|
|
68
|
-
}
|
|
60
|
+
virtual ~napi_env__() { FinalizeAll(); }
|
|
69
61
|
v8::Isolate* const isolate; // Shortcut for context()->GetIsolate()
|
|
70
62
|
v8impl::Persistent<v8::Context> context_persistent;
|
|
71
63
|
|
|
@@ -74,7 +66,9 @@ struct napi_env__ {
|
|
|
74
66
|
}
|
|
75
67
|
|
|
76
68
|
inline void Ref() { refs++; }
|
|
77
|
-
inline void Unref() {
|
|
69
|
+
inline void Unref() {
|
|
70
|
+
if (--refs == 0) delete this;
|
|
71
|
+
}
|
|
78
72
|
|
|
79
73
|
virtual bool can_call_into_js() const { return true; }
|
|
80
74
|
virtual v8::Maybe<bool> mark_arraybuffer_as_untransferable(
|
|
@@ -82,8 +76,12 @@ struct napi_env__ {
|
|
|
82
76
|
return v8::Just(true);
|
|
83
77
|
}
|
|
84
78
|
|
|
85
|
-
|
|
86
|
-
|
|
79
|
+
static inline void HandleThrow(napi_env env, v8::Local<v8::Value> value) {
|
|
80
|
+
env->isolate->ThrowException(value);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
template <typename T, typename U = decltype(HandleThrow)>
|
|
84
|
+
inline void CallIntoModule(T&& call, U&& handle_exception = HandleThrow) {
|
|
87
85
|
int open_handle_scopes_before = open_handle_scopes;
|
|
88
86
|
int open_callback_scopes_before = open_callback_scopes;
|
|
89
87
|
napi_clear_last_error(this);
|
|
@@ -96,11 +94,21 @@ struct napi_env__ {
|
|
|
96
94
|
}
|
|
97
95
|
}
|
|
98
96
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
});
|
|
97
|
+
// This should be overridden to schedule the finalization to a properiate
|
|
98
|
+
// timing, like next tick of the event loop.
|
|
99
|
+
virtual void CallFinalizer(napi_finalize cb, void* data, void* hint) {
|
|
100
|
+
v8::HandleScope handle_scope(isolate);
|
|
101
|
+
CallIntoModule([&](napi_env env) { cb(env, data, hint); });
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
void FinalizeAll() {
|
|
105
|
+
// First we must finalize those references that have `napi_finalizer`
|
|
106
|
+
// callbacks. The reason is that addons might store other references which
|
|
107
|
+
// they delete during their `napi_finalizer` callbacks. If we deleted such
|
|
108
|
+
// references here first, they would be doubly deleted when the
|
|
109
|
+
// `napi_finalizer` deleted them subsequently.
|
|
110
|
+
v8impl::RefTracker::FinalizeAll(&finalizing_reflist);
|
|
111
|
+
v8impl::RefTracker::FinalizeAll(&reflist);
|
|
104
112
|
}
|
|
105
113
|
|
|
106
114
|
v8impl::Persistent<v8::Value> last_exception;
|
|
@@ -117,86 +125,143 @@ struct napi_env__ {
|
|
|
117
125
|
void* instance_data = nullptr;
|
|
118
126
|
};
|
|
119
127
|
|
|
128
|
+
// This class is used to keep a napi_env live in a way that
|
|
129
|
+
// is exception safe versus calling Ref/Unref directly
|
|
130
|
+
class EnvRefHolder {
|
|
131
|
+
public:
|
|
132
|
+
explicit EnvRefHolder(napi_env env) : _env(env) { _env->Ref(); }
|
|
133
|
+
|
|
134
|
+
explicit EnvRefHolder(const EnvRefHolder& other) : _env(other.env()) {
|
|
135
|
+
_env->Ref();
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
EnvRefHolder(EnvRefHolder&& other) {
|
|
139
|
+
_env = other._env;
|
|
140
|
+
other._env = nullptr;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
~EnvRefHolder() {
|
|
144
|
+
if (_env != nullptr) {
|
|
145
|
+
_env->Unref();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
napi_env env(void) const { return _env; }
|
|
150
|
+
|
|
151
|
+
private:
|
|
152
|
+
napi_env _env;
|
|
153
|
+
};
|
|
154
|
+
|
|
120
155
|
static inline napi_status napi_clear_last_error(napi_env env) {
|
|
121
156
|
env->last_error.error_code = napi_ok;
|
|
122
157
|
|
|
123
158
|
// TODO(boingoing): Should this be a callback?
|
|
124
159
|
env->last_error.engine_error_code = 0;
|
|
125
160
|
env->last_error.engine_reserved = nullptr;
|
|
161
|
+
env->last_error.error_message = nullptr;
|
|
126
162
|
return napi_ok;
|
|
127
163
|
}
|
|
128
164
|
|
|
129
|
-
static inline
|
|
130
|
-
napi_status
|
|
131
|
-
|
|
132
|
-
|
|
165
|
+
static inline napi_status napi_set_last_error(napi_env env,
|
|
166
|
+
napi_status error_code,
|
|
167
|
+
uint32_t engine_error_code = 0,
|
|
168
|
+
void* engine_reserved = nullptr) {
|
|
133
169
|
env->last_error.error_code = error_code;
|
|
134
170
|
env->last_error.engine_error_code = engine_error_code;
|
|
135
171
|
env->last_error.engine_reserved = engine_reserved;
|
|
136
172
|
return error_code;
|
|
137
173
|
}
|
|
138
174
|
|
|
139
|
-
#define RETURN_STATUS_IF_FALSE(env, condition, status)
|
|
140
|
-
do {
|
|
141
|
-
if (!(condition)) {
|
|
142
|
-
return napi_set_last_error((env), (status));
|
|
143
|
-
}
|
|
175
|
+
#define RETURN_STATUS_IF_FALSE(env, condition, status) \
|
|
176
|
+
do { \
|
|
177
|
+
if (!(condition)) { \
|
|
178
|
+
return napi_set_last_error((env), (status)); \
|
|
179
|
+
} \
|
|
180
|
+
} while (0)
|
|
181
|
+
|
|
182
|
+
#define RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, condition, status) \
|
|
183
|
+
do { \
|
|
184
|
+
if (!(condition)) { \
|
|
185
|
+
return napi_set_last_error( \
|
|
186
|
+
(env), try_catch.HasCaught() ? napi_pending_exception : (status)); \
|
|
187
|
+
} \
|
|
144
188
|
} while (0)
|
|
145
189
|
|
|
146
|
-
#define CHECK_ENV(env)
|
|
147
|
-
do {
|
|
148
|
-
if ((env) == nullptr) {
|
|
149
|
-
return napi_invalid_arg;
|
|
150
|
-
}
|
|
190
|
+
#define CHECK_ENV(env) \
|
|
191
|
+
do { \
|
|
192
|
+
if ((env) == nullptr) { \
|
|
193
|
+
return napi_invalid_arg; \
|
|
194
|
+
} \
|
|
151
195
|
} while (0)
|
|
152
196
|
|
|
153
|
-
#define CHECK_ARG(env, arg)
|
|
197
|
+
#define CHECK_ARG(env, arg) \
|
|
154
198
|
RETURN_STATUS_IF_FALSE((env), ((arg) != nullptr), napi_invalid_arg)
|
|
155
199
|
|
|
156
|
-
#define
|
|
200
|
+
#define CHECK_ARG_WITH_PREAMBLE(env, arg) \
|
|
201
|
+
RETURN_STATUS_IF_FALSE_WITH_PREAMBLE( \
|
|
202
|
+
(env), ((arg) != nullptr), napi_invalid_arg)
|
|
203
|
+
|
|
204
|
+
#define CHECK_MAYBE_EMPTY(env, maybe, status) \
|
|
157
205
|
RETURN_STATUS_IF_FALSE((env), !((maybe).IsEmpty()), (status))
|
|
158
206
|
|
|
207
|
+
#define CHECK_MAYBE_EMPTY_WITH_PREAMBLE(env, maybe, status) \
|
|
208
|
+
RETURN_STATUS_IF_FALSE_WITH_PREAMBLE((env), !((maybe).IsEmpty()), (status))
|
|
209
|
+
|
|
159
210
|
// NAPI_PREAMBLE is not wrapped in do..while: try_catch must have function scope
|
|
160
|
-
#define NAPI_PREAMBLE(env)
|
|
161
|
-
CHECK_ENV((env));
|
|
162
|
-
RETURN_STATUS_IF_FALSE(
|
|
163
|
-
(env)
|
|
164
|
-
|
|
165
|
-
|
|
211
|
+
#define NAPI_PREAMBLE(env) \
|
|
212
|
+
CHECK_ENV((env)); \
|
|
213
|
+
RETURN_STATUS_IF_FALSE( \
|
|
214
|
+
(env), \
|
|
215
|
+
(env)->last_exception.IsEmpty() && (env)->can_call_into_js(), \
|
|
216
|
+
napi_pending_exception); \
|
|
217
|
+
napi_clear_last_error((env)); \
|
|
166
218
|
v8impl::TryCatch try_catch((env))
|
|
167
219
|
|
|
168
|
-
#define CHECK_TO_TYPE(env, type, context, result, src, status)
|
|
169
|
-
do {
|
|
170
|
-
CHECK_ARG((env), (src));
|
|
171
|
-
auto maybe = v8impl::V8LocalValueFromJsValue((src))->To##type((context));
|
|
172
|
-
CHECK_MAYBE_EMPTY((env), maybe, (status));
|
|
173
|
-
(result) = maybe.ToLocalChecked();
|
|
220
|
+
#define CHECK_TO_TYPE(env, type, context, result, src, status) \
|
|
221
|
+
do { \
|
|
222
|
+
CHECK_ARG((env), (src)); \
|
|
223
|
+
auto maybe = v8impl::V8LocalValueFromJsValue((src))->To##type((context)); \
|
|
224
|
+
CHECK_MAYBE_EMPTY((env), maybe, (status)); \
|
|
225
|
+
(result) = maybe.ToLocalChecked(); \
|
|
226
|
+
} while (0)
|
|
227
|
+
|
|
228
|
+
#define CHECK_TO_TYPE_WITH_PREAMBLE(env, type, context, result, src, status) \
|
|
229
|
+
do { \
|
|
230
|
+
CHECK_ARG_WITH_PREAMBLE((env), (src)); \
|
|
231
|
+
auto maybe = v8impl::V8LocalValueFromJsValue((src))->To##type((context)); \
|
|
232
|
+
CHECK_MAYBE_EMPTY_WITH_PREAMBLE((env), maybe, (status)); \
|
|
233
|
+
(result) = maybe.ToLocalChecked(); \
|
|
174
234
|
} while (0)
|
|
175
235
|
|
|
176
|
-
#define CHECK_TO_FUNCTION(env, result, src)
|
|
177
|
-
do {
|
|
178
|
-
CHECK_ARG((env), (src));
|
|
179
|
-
v8::Local<v8::Value> v8value = v8impl::V8LocalValueFromJsValue((src));
|
|
180
|
-
RETURN_STATUS_IF_FALSE((env), v8value->IsFunction(), napi_invalid_arg);
|
|
181
|
-
(result) = v8value.As<v8::Function>();
|
|
236
|
+
#define CHECK_TO_FUNCTION(env, result, src) \
|
|
237
|
+
do { \
|
|
238
|
+
CHECK_ARG((env), (src)); \
|
|
239
|
+
v8::Local<v8::Value> v8value = v8impl::V8LocalValueFromJsValue((src)); \
|
|
240
|
+
RETURN_STATUS_IF_FALSE((env), v8value->IsFunction(), napi_invalid_arg); \
|
|
241
|
+
(result) = v8value.As<v8::Function>(); \
|
|
182
242
|
} while (0)
|
|
183
243
|
|
|
184
|
-
#define CHECK_TO_OBJECT(env, context, result, src)
|
|
244
|
+
#define CHECK_TO_OBJECT(env, context, result, src) \
|
|
185
245
|
CHECK_TO_TYPE((env), Object, (context), (result), (src), napi_object_expected)
|
|
186
246
|
|
|
187
|
-
#define
|
|
247
|
+
#define CHECK_TO_OBJECT_WITH_PREAMBLE(env, context, result, src) \
|
|
248
|
+
CHECK_TO_TYPE_WITH_PREAMBLE( \
|
|
249
|
+
(env), Object, (context), (result), (src), napi_object_expected)
|
|
250
|
+
|
|
251
|
+
#define CHECK_TO_STRING(env, context, result, src) \
|
|
188
252
|
CHECK_TO_TYPE((env), String, (context), (result), (src), napi_string_expected)
|
|
189
253
|
|
|
190
|
-
#define GET_RETURN_STATUS(env)
|
|
191
|
-
(!try_catch.HasCaught()
|
|
192
|
-
|
|
254
|
+
#define GET_RETURN_STATUS(env) \
|
|
255
|
+
(!try_catch.HasCaught() \
|
|
256
|
+
? napi_ok \
|
|
257
|
+
: napi_set_last_error((env), napi_pending_exception))
|
|
193
258
|
|
|
194
|
-
#define THROW_RANGE_ERROR_IF_FALSE(env, condition, error, message)
|
|
195
|
-
do {
|
|
196
|
-
if (!(condition)) {
|
|
197
|
-
napi_throw_range_error((env), (error), (message));
|
|
198
|
-
return napi_set_last_error((env), napi_generic_failure);
|
|
199
|
-
}
|
|
259
|
+
#define THROW_RANGE_ERROR_IF_FALSE(env, condition, error, message) \
|
|
260
|
+
do { \
|
|
261
|
+
if (!(condition)) { \
|
|
262
|
+
napi_throw_range_error((env), (error), (message)); \
|
|
263
|
+
return napi_set_last_error((env), napi_generic_failure); \
|
|
264
|
+
} \
|
|
200
265
|
} while (0)
|
|
201
266
|
|
|
202
267
|
#define RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, condition, status) \
|
|
@@ -217,7 +282,7 @@ namespace v8impl {
|
|
|
217
282
|
// This asserts v8::Local<> will always be implemented with a single
|
|
218
283
|
// pointer field so that we can pass it around as a void*.
|
|
219
284
|
static_assert(sizeof(v8::Local<v8::Value>) == sizeof(napi_value),
|
|
220
|
-
|
|
285
|
+
"Cannot convert between v8::Local<v8::Value> and napi_value");
|
|
221
286
|
|
|
222
287
|
inline napi_value JsValueFromV8LocalValue(v8::Local<v8::Value> local) {
|
|
223
288
|
return reinterpret_cast<napi_value>(*local);
|
|
@@ -235,10 +300,7 @@ class Finalizer {
|
|
|
235
300
|
// Some Finalizers are run during shutdown when the napi_env is destroyed,
|
|
236
301
|
// and some need to keep an explicit reference to the napi_env because they
|
|
237
302
|
// are run independently.
|
|
238
|
-
enum EnvReferenceMode {
|
|
239
|
-
kNoEnvReference,
|
|
240
|
-
kKeepEnvReference
|
|
241
|
-
};
|
|
303
|
+
enum EnvReferenceMode { kNoEnvReference, kKeepEnvReference };
|
|
242
304
|
|
|
243
305
|
protected:
|
|
244
306
|
Finalizer(napi_env env,
|
|
@@ -246,18 +308,16 @@ class Finalizer {
|
|
|
246
308
|
void* finalize_data,
|
|
247
309
|
void* finalize_hint,
|
|
248
310
|
EnvReferenceMode refmode = kNoEnvReference)
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
if (_has_env_reference)
|
|
255
|
-
_env->Ref();
|
|
311
|
+
: _env(env),
|
|
312
|
+
_finalize_callback(finalize_callback),
|
|
313
|
+
_finalize_data(finalize_data),
|
|
314
|
+
_finalize_hint(finalize_hint),
|
|
315
|
+
_has_env_reference(refmode == kKeepEnvReference) {
|
|
316
|
+
if (_has_env_reference) _env->Ref();
|
|
256
317
|
}
|
|
257
318
|
|
|
258
319
|
~Finalizer() {
|
|
259
|
-
if (_has_env_reference)
|
|
260
|
-
_env->Unref();
|
|
320
|
+
if (_has_env_reference) _env->Unref();
|
|
261
321
|
}
|
|
262
322
|
|
|
263
323
|
public:
|
|
@@ -270,9 +330,7 @@ class Finalizer {
|
|
|
270
330
|
env, finalize_callback, finalize_data, finalize_hint, refmode);
|
|
271
331
|
}
|
|
272
332
|
|
|
273
|
-
static void Delete(Finalizer* finalizer) {
|
|
274
|
-
delete finalizer;
|
|
275
|
-
}
|
|
333
|
+
static void Delete(Finalizer* finalizer) { delete finalizer; }
|
|
276
334
|
|
|
277
335
|
protected:
|
|
278
336
|
napi_env _env;
|
|
@@ -285,8 +343,7 @@ class Finalizer {
|
|
|
285
343
|
|
|
286
344
|
class TryCatch : public v8::TryCatch {
|
|
287
345
|
public:
|
|
288
|
-
explicit TryCatch(napi_env env)
|
|
289
|
-
: v8::TryCatch(env->isolate), _env(env) {}
|
|
346
|
+
explicit TryCatch(napi_env env) : v8::TryCatch(env->isolate), _env(env) {}
|
|
290
347
|
|
|
291
348
|
~TryCatch() {
|
|
292
349
|
if (HasCaught()) {
|
|
@@ -298,6 +355,86 @@ class TryCatch : public v8::TryCatch {
|
|
|
298
355
|
napi_env _env;
|
|
299
356
|
};
|
|
300
357
|
|
|
358
|
+
// Wrapper around v8impl::Persistent that implements reference counting.
|
|
359
|
+
class RefBase : protected Finalizer, RefTracker {
|
|
360
|
+
protected:
|
|
361
|
+
RefBase(napi_env env,
|
|
362
|
+
uint32_t initial_refcount,
|
|
363
|
+
bool delete_self,
|
|
364
|
+
napi_finalize finalize_callback,
|
|
365
|
+
void* finalize_data,
|
|
366
|
+
void* finalize_hint);
|
|
367
|
+
|
|
368
|
+
public:
|
|
369
|
+
static RefBase* New(napi_env env,
|
|
370
|
+
uint32_t initial_refcount,
|
|
371
|
+
bool delete_self,
|
|
372
|
+
napi_finalize finalize_callback,
|
|
373
|
+
void* finalize_data,
|
|
374
|
+
void* finalize_hint);
|
|
375
|
+
|
|
376
|
+
static inline void Delete(RefBase* reference);
|
|
377
|
+
|
|
378
|
+
virtual ~RefBase();
|
|
379
|
+
void* Data();
|
|
380
|
+
uint32_t Ref();
|
|
381
|
+
uint32_t Unref();
|
|
382
|
+
uint32_t RefCount();
|
|
383
|
+
|
|
384
|
+
protected:
|
|
385
|
+
void Finalize(bool is_env_teardown = false) override;
|
|
386
|
+
|
|
387
|
+
private:
|
|
388
|
+
uint32_t _refcount;
|
|
389
|
+
bool _delete_self;
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
class Reference : public RefBase {
|
|
393
|
+
using SecondPassCallParameterRef = Reference*;
|
|
394
|
+
|
|
395
|
+
protected:
|
|
396
|
+
template <typename... Args>
|
|
397
|
+
Reference(napi_env env, v8::Local<v8::Value> value, Args&&... args);
|
|
398
|
+
|
|
399
|
+
public:
|
|
400
|
+
static Reference* New(napi_env env,
|
|
401
|
+
v8::Local<v8::Value> value,
|
|
402
|
+
uint32_t initial_refcount,
|
|
403
|
+
bool delete_self,
|
|
404
|
+
napi_finalize finalize_callback = nullptr,
|
|
405
|
+
void* finalize_data = nullptr,
|
|
406
|
+
void* finalize_hint = nullptr);
|
|
407
|
+
|
|
408
|
+
virtual ~Reference();
|
|
409
|
+
uint32_t Ref();
|
|
410
|
+
uint32_t Unref();
|
|
411
|
+
v8::Local<v8::Value> Get();
|
|
412
|
+
|
|
413
|
+
protected:
|
|
414
|
+
void Finalize(bool is_env_teardown = false) override;
|
|
415
|
+
|
|
416
|
+
private:
|
|
417
|
+
void ClearWeak();
|
|
418
|
+
void SetWeak();
|
|
419
|
+
|
|
420
|
+
static void FinalizeCallback(
|
|
421
|
+
const v8::WeakCallbackInfo<SecondPassCallParameterRef>& data);
|
|
422
|
+
static void SecondPassCallback(
|
|
423
|
+
const v8::WeakCallbackInfo<SecondPassCallParameterRef>& data);
|
|
424
|
+
|
|
425
|
+
v8impl::Persistent<v8::Value> _persistent;
|
|
426
|
+
SecondPassCallParameterRef* _secondPassParameter;
|
|
427
|
+
bool _secondPassScheduled;
|
|
428
|
+
|
|
429
|
+
FRIEND_TEST(JsNativeApiV8Test, Reference);
|
|
430
|
+
};
|
|
431
|
+
|
|
301
432
|
} // end of namespace v8impl
|
|
302
433
|
|
|
434
|
+
#define STATUS_CALL(call) \
|
|
435
|
+
do { \
|
|
436
|
+
napi_status status = (call); \
|
|
437
|
+
if (status != napi_ok) return status; \
|
|
438
|
+
} while (0)
|
|
439
|
+
|
|
303
440
|
#endif // SRC_JS_NATIVE_API_V8_H_
|
|
@@ -14,17 +14,18 @@
|
|
|
14
14
|
// included below, defines `NAPI_VERSION`.
|
|
15
15
|
|
|
16
16
|
#include "node_version.h"
|
|
17
|
+
|
|
17
18
|
#include "env.h"
|
|
19
|
+
#include "gtest/gtest_prod.h"
|
|
18
20
|
#include "node_internals.h"
|
|
19
21
|
|
|
20
|
-
#define NAPI_ARRAYSIZE(array)
|
|
21
|
-
node::arraysize((array))
|
|
22
|
+
#define NAPI_ARRAYSIZE(array) node::arraysize((array))
|
|
22
23
|
|
|
23
|
-
#define NAPI_FIXED_ONE_BYTE_STRING(isolate, string)
|
|
24
|
+
#define NAPI_FIXED_ONE_BYTE_STRING(isolate, string) \
|
|
24
25
|
node::FIXED_ONE_BYTE_STRING((isolate), (string))
|
|
25
26
|
|
|
26
|
-
#define NAPI_PRIVATE_KEY(context, suffix)
|
|
27
|
-
(node::Environment::GetCurrent((context))->napi_
|
|
27
|
+
#define NAPI_PRIVATE_KEY(context, suffix) \
|
|
28
|
+
(node::Environment::GetCurrent((context))->napi_##suffix())
|
|
28
29
|
|
|
29
30
|
namespace v8impl {
|
|
30
31
|
|
|
File without changes
|
|
File without changes
|
|
@@ -22,7 +22,7 @@ inline const char* GetNodeName(const char* node_name, const char* edge_name) {
|
|
|
22
22
|
class MemoryRetainerNode : public v8::EmbedderGraph::Node {
|
|
23
23
|
public:
|
|
24
24
|
inline MemoryRetainerNode(MemoryTracker* tracker,
|
|
25
|
-
|
|
25
|
+
const MemoryRetainer* retainer)
|
|
26
26
|
: retainer_(retainer) {
|
|
27
27
|
CHECK_NOT_NULL(retainer_);
|
|
28
28
|
v8::HandleScope handle_scope(tracker->isolate());
|
|
@@ -34,9 +34,9 @@ class MemoryRetainerNode : public v8::EmbedderGraph::Node {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
inline MemoryRetainerNode(MemoryTracker* tracker,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
const char* name,
|
|
38
|
+
size_t size,
|
|
39
|
+
bool is_root_node = false)
|
|
40
40
|
: retainer_(nullptr) {
|
|
41
41
|
name_ = name;
|
|
42
42
|
size_ = size;
|
|
@@ -131,7 +131,7 @@ template <typename T, bool kIsWeak>
|
|
|
131
131
|
void MemoryTracker::TrackField(const char* edge_name,
|
|
132
132
|
const BaseObjectPtrImpl<T, kIsWeak>& value,
|
|
133
133
|
const char* node_name) {
|
|
134
|
-
if (value.get() == nullptr) return;
|
|
134
|
+
if (value.get() == nullptr || kIsWeak) return;
|
|
135
135
|
TrackField(edge_name, value.get(), node_name);
|
|
136
136
|
}
|
|
137
137
|
|
|
@@ -214,6 +214,7 @@ template <typename T>
|
|
|
214
214
|
void MemoryTracker::TrackField(const char* edge_name,
|
|
215
215
|
const v8::PersistentBase<T>& value,
|
|
216
216
|
const char* node_name) {
|
|
217
|
+
if (value.IsWeak()) return;
|
|
217
218
|
TrackField(edge_name, value.Get(isolate_));
|
|
218
219
|
}
|
|
219
220
|
|
|
@@ -216,13 +216,6 @@ class MemoryTracker {
|
|
|
216
216
|
inline void TrackField(const char* edge_name,
|
|
217
217
|
const v8::BackingStore* value,
|
|
218
218
|
const char* node_name = nullptr);
|
|
219
|
-
// We do not implement CleanupHookCallback as MemoryRetainer
|
|
220
|
-
// but instead specialize the method here to avoid the cost of
|
|
221
|
-
// virtual pointers.
|
|
222
|
-
// TODO(joyeecheung): do this for BaseObject and remove WrappedObject()
|
|
223
|
-
void TrackField(const char* edge_name,
|
|
224
|
-
const CleanupHookCallback& value,
|
|
225
|
-
const char* node_name = nullptr);
|
|
226
219
|
inline void TrackField(const char* edge_name,
|
|
227
220
|
const uv_buf_t& value,
|
|
228
221
|
const char* node_name = nullptr);
|
|
@@ -12,6 +12,10 @@ namespace node {
|
|
|
12
12
|
|
|
13
13
|
class Environment;
|
|
14
14
|
|
|
15
|
+
namespace contextify {
|
|
16
|
+
class ContextifyContext;
|
|
17
|
+
}
|
|
18
|
+
|
|
15
19
|
namespace loader {
|
|
16
20
|
|
|
17
21
|
enum ScriptType : int {
|
|
@@ -28,6 +32,14 @@ enum HostDefinedOptions : int {
|
|
|
28
32
|
|
|
29
33
|
class ModuleWrap : public BaseObject {
|
|
30
34
|
public:
|
|
35
|
+
enum InternalFields {
|
|
36
|
+
kModuleWrapBaseField = BaseObject::kInternalFieldCount,
|
|
37
|
+
kURLSlot,
|
|
38
|
+
kSyntheticEvaluationStepsSlot,
|
|
39
|
+
kContextObjectSlot, // Object whose creation context is the target Context
|
|
40
|
+
kInternalFieldCount
|
|
41
|
+
};
|
|
42
|
+
|
|
31
43
|
static void Initialize(v8::Local<v8::Object> target,
|
|
32
44
|
v8::Local<v8::Value> unused,
|
|
33
45
|
v8::Local<v8::Context> context,
|
|
@@ -38,16 +50,22 @@ class ModuleWrap : public BaseObject {
|
|
|
38
50
|
v8::Local<v8::Object> meta);
|
|
39
51
|
|
|
40
52
|
void MemoryInfo(MemoryTracker* tracker) const override {
|
|
41
|
-
tracker->TrackField("url", url_);
|
|
42
53
|
tracker->TrackField("resolve_cache", resolve_cache_);
|
|
43
54
|
}
|
|
44
55
|
|
|
45
56
|
inline uint32_t id() { return id_; }
|
|
57
|
+
v8::Local<v8::Context> context() const;
|
|
46
58
|
static ModuleWrap* GetFromID(node::Environment*, uint32_t id);
|
|
47
59
|
|
|
48
60
|
SET_MEMORY_INFO_NAME(ModuleWrap)
|
|
49
61
|
SET_SELF_SIZE(ModuleWrap)
|
|
50
62
|
|
|
63
|
+
bool IsNotIndicativeOfMemoryLeakAtExit() const override {
|
|
64
|
+
// XXX: The garbage collection rules for ModuleWrap are *super* unclear.
|
|
65
|
+
// Do these objects ever get GC'd? Are we just okay with leaking them?
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
|
|
51
69
|
private:
|
|
52
70
|
ModuleWrap(Environment* env,
|
|
53
71
|
v8::Local<v8::Object> object,
|
|
@@ -75,19 +93,18 @@ class ModuleWrap : public BaseObject {
|
|
|
75
93
|
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
76
94
|
static void CreateCachedData(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
77
95
|
|
|
78
|
-
static v8::MaybeLocal<v8::Module>
|
|
96
|
+
static v8::MaybeLocal<v8::Module> ResolveModuleCallback(
|
|
79
97
|
v8::Local<v8::Context> context,
|
|
80
98
|
v8::Local<v8::String> specifier,
|
|
99
|
+
v8::Local<v8::FixedArray> import_assertions,
|
|
81
100
|
v8::Local<v8::Module> referrer);
|
|
82
101
|
static ModuleWrap* GetFromModule(node::Environment*, v8::Local<v8::Module>);
|
|
83
102
|
|
|
84
|
-
v8::Global<v8::Function> synthetic_evaluation_steps_;
|
|
85
|
-
bool synthetic_ = false;
|
|
86
103
|
v8::Global<v8::Module> module_;
|
|
87
|
-
v8::Global<v8::String> url_;
|
|
88
|
-
bool linked_ = false;
|
|
89
104
|
std::unordered_map<std::string, v8::Global<v8::Promise>> resolve_cache_;
|
|
90
|
-
|
|
105
|
+
contextify::ContextifyContext* contextify_context_ = nullptr;
|
|
106
|
+
bool synthetic_ = false;
|
|
107
|
+
bool linked_ = false;
|
|
91
108
|
uint32_t id_;
|
|
92
109
|
};
|
|
93
110
|
|