@kungfu-tech/libnode-win32-x64 0.0.0-bootstrap.0 → 22.22.3-kf.1
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/LICENSE +201 -0
- package/README.md +3 -0
- package/dist/node/include/acorn_version.h +6 -0
- package/dist/node/include/aliased_buffer-inl.h +244 -0
- package/dist/node/include/aliased_buffer.h +206 -0
- package/dist/node/include/aliased_struct-inl.h +54 -0
- package/dist/node/include/aliased_struct.h +63 -0
- package/dist/node/include/amaro_version.h +6 -0
- package/dist/node/include/async_context_frame.h +33 -0
- package/dist/node/include/async_wrap-inl.h +96 -0
- package/dist/node/include/async_wrap.h +243 -0
- package/dist/node/include/base_object-inl.h +335 -0
- package/dist/node/include/base_object.h +342 -0
- package/dist/node/include/base_object_types.h +74 -0
- package/dist/node/include/blob_serializer_deserializer-inl.h +385 -0
- package/dist/node/include/blob_serializer_deserializer.h +132 -0
- package/dist/node/include/callback_queue-inl.h +97 -0
- package/dist/node/include/callback_queue.h +79 -0
- package/dist/node/include/cares_wrap.h +447 -0
- package/dist/node/include/cjs_module_lexer_version.h +6 -0
- package/dist/node/include/cleanup_queue-inl.h +36 -0
- package/dist/node/include/cleanup_queue.h +79 -0
- package/dist/node/include/compile_cache.h +104 -0
- package/dist/node/include/connect_wrap.h +26 -0
- package/dist/node/include/connection_wrap.h +30 -0
- package/dist/node/include/cppgc/allocation.h +310 -0
- package/dist/node/include/cppgc/common.h +28 -0
- package/dist/node/include/cppgc/cross-thread-persistent.h +466 -0
- package/dist/node/include/cppgc/custom-space.h +97 -0
- package/dist/node/include/cppgc/default-platform.h +67 -0
- package/dist/node/include/cppgc/ephemeron-pair.h +30 -0
- package/dist/node/include/cppgc/explicit-management.h +100 -0
- package/dist/node/include/cppgc/garbage-collected.h +106 -0
- package/dist/node/include/cppgc/heap-consistency.h +309 -0
- package/dist/node/include/cppgc/heap-handle.h +48 -0
- package/dist/node/include/cppgc/heap-state.h +82 -0
- package/dist/node/include/cppgc/heap-statistics.h +120 -0
- package/dist/node/include/cppgc/heap.h +202 -0
- package/dist/node/include/cppgc/internal/api-constants.h +87 -0
- package/dist/node/include/cppgc/internal/atomic-entry-flag.h +48 -0
- package/dist/node/include/cppgc/internal/base-page-handle.h +45 -0
- package/dist/node/include/cppgc/internal/caged-heap-local-data.h +121 -0
- package/dist/node/include/cppgc/internal/caged-heap.h +68 -0
- package/dist/node/include/cppgc/internal/compiler-specific.h +38 -0
- package/dist/node/include/cppgc/internal/finalizer-trait.h +93 -0
- package/dist/node/include/cppgc/internal/gc-info.h +148 -0
- package/dist/node/include/cppgc/internal/logging.h +50 -0
- package/dist/node/include/cppgc/internal/member-storage.h +256 -0
- package/dist/node/include/cppgc/internal/name-trait.h +137 -0
- package/dist/node/include/cppgc/internal/persistent-node.h +214 -0
- package/dist/node/include/cppgc/internal/pointer-policies.h +243 -0
- package/dist/node/include/cppgc/internal/write-barrier.h +487 -0
- package/dist/node/include/cppgc/liveness-broker.h +78 -0
- package/dist/node/include/cppgc/macros.h +35 -0
- package/dist/node/include/cppgc/member.h +629 -0
- package/dist/node/include/cppgc/name-provider.h +65 -0
- package/dist/node/include/cppgc/object-size-trait.h +58 -0
- package/dist/node/include/cppgc/persistent.h +377 -0
- package/dist/node/include/cppgc/platform.h +163 -0
- package/dist/node/include/cppgc/prefinalizer.h +75 -0
- package/dist/node/include/cppgc/process-heap-statistics.h +36 -0
- package/dist/node/include/cppgc/sentinel-pointer.h +39 -0
- package/dist/node/include/cppgc/source-location.h +16 -0
- package/dist/node/include/cppgc/testing.h +106 -0
- package/dist/node/include/cppgc/trace-trait.h +128 -0
- package/dist/node/include/cppgc/type-traits.h +271 -0
- package/dist/node/include/cppgc/visitor.h +504 -0
- package/dist/node/include/crypto/crypto_aes.h +88 -0
- package/dist/node/include/crypto/crypto_bio.h +193 -0
- package/dist/node/include/crypto/crypto_cipher.h +293 -0
- package/dist/node/include/crypto/crypto_clienthello-inl.h +90 -0
- package/dist/node/include/crypto/crypto_clienthello.h +131 -0
- package/dist/node/include/crypto/crypto_common.h +64 -0
- package/dist/node/include/crypto/crypto_context.h +171 -0
- package/dist/node/include/crypto/crypto_dh.h +126 -0
- package/dist/node/include/crypto/crypto_dsa.h +52 -0
- package/dist/node/include/crypto/crypto_ec.h +164 -0
- package/dist/node/include/crypto/crypto_hash.h +91 -0
- package/dist/node/include/crypto/crypto_hkdf.h +61 -0
- package/dist/node/include/crypto/crypto_hmac.h +92 -0
- package/dist/node/include/crypto/crypto_keygen.h +299 -0
- package/dist/node/include/crypto/crypto_keys.h +392 -0
- package/dist/node/include/crypto/crypto_pbkdf2.h +74 -0
- package/dist/node/include/crypto/crypto_random.h +124 -0
- package/dist/node/include/crypto/crypto_rsa.h +136 -0
- package/dist/node/include/crypto/crypto_scrypt.h +85 -0
- package/dist/node/include/crypto/crypto_sig.h +165 -0
- package/dist/node/include/crypto/crypto_spkac.h +21 -0
- package/dist/node/include/crypto/crypto_timing.h +20 -0
- package/dist/node/include/crypto/crypto_tls.h +305 -0
- package/dist/node/include/crypto/crypto_util.h +725 -0
- package/dist/node/include/crypto/crypto_x509.h +140 -0
- package/dist/node/include/dataqueue/queue.h +306 -0
- package/dist/node/include/debug_utils-inl.h +278 -0
- package/dist/node/include/debug_utils.h +196 -0
- package/dist/node/include/diagnosticfilename-inl.h +33 -0
- package/dist/node/include/embedded_data.h +17 -0
- package/dist/node/include/encoding_binding.h +61 -0
- package/dist/node/include/env-inl.h +984 -0
- package/dist/node/include/env.h +1287 -0
- package/dist/node/include/env_properties.h +540 -0
- package/dist/node/include/handle_wrap.h +123 -0
- package/dist/node/include/histogram-inl.h +107 -0
- package/dist/node/include/histogram.h +279 -0
- package/dist/node/include/inspector/io_agent.h +30 -0
- package/dist/node/include/inspector/main_thread_interface.h +116 -0
- package/dist/node/include/inspector/network_agent.h +94 -0
- package/dist/node/include/inspector/network_inspector.h +45 -0
- package/dist/node/include/inspector/network_requests_buffer.h +195 -0
- package/dist/node/include/inspector/network_resource_manager.h +29 -0
- package/dist/node/include/inspector/node_json.h +24 -0
- package/dist/node/include/inspector/node_string.h +101 -0
- package/dist/node/include/inspector/protocol_helper.h +27 -0
- package/dist/node/include/inspector/runtime_agent.h +41 -0
- package/dist/node/include/inspector/target_agent.h +75 -0
- package/dist/node/include/inspector/tracing_agent.h +43 -0
- package/dist/node/include/inspector/worker_agent.h +40 -0
- package/dist/node/include/inspector/worker_inspector.h +124 -0
- package/dist/node/include/inspector_agent.h +165 -0
- package/dist/node/include/inspector_io.h +78 -0
- package/dist/node/include/inspector_profiler.h +149 -0
- package/dist/node/include/inspector_socket.h +60 -0
- package/dist/node/include/inspector_socket_server.h +110 -0
- package/dist/node/include/js_native_api.h +607 -0
- package/dist/node/include/js_native_api_types.h +226 -0
- package/dist/node/include/js_native_api_v8.h +485 -0
- package/dist/node/include/js_native_api_v8_internals.h +45 -0
- package/dist/node/include/js_stream.h +52 -0
- package/dist/node/include/json_utils.h +172 -0
- package/dist/node/include/large_pages/node_large_page.h +34 -0
- package/dist/node/include/libplatform/libplatform-export.h +29 -0
- package/dist/node/include/libplatform/libplatform.h +112 -0
- package/dist/node/include/libplatform/v8-tracing.h +333 -0
- package/dist/node/include/memory_tracker-inl.h +359 -0
- package/dist/node/include/memory_tracker.h +289 -0
- package/dist/node/include/module_wrap.h +216 -0
- package/dist/node/include/node.h +1593 -0
- package/dist/node/include/node_api.h +265 -0
- package/dist/node/include/node_api_internals.h +48 -0
- package/dist/node/include/node_api_types.h +56 -0
- package/dist/node/include/node_binding.h +161 -0
- package/dist/node/include/node_blob.h +159 -0
- package/dist/node/include/node_bob-inl.h +36 -0
- package/dist/node/include/node_bob.h +107 -0
- package/dist/node/include/node_buffer.h +92 -0
- package/dist/node/include/node_builtins.h +220 -0
- package/dist/node/include/node_config_file.h +46 -0
- package/dist/node/include/node_constants.h +82 -0
- package/dist/node/include/node_context_data.h +168 -0
- package/dist/node/include/node_contextify.h +204 -0
- package/dist/node/include/node_crypto.h +56 -0
- package/dist/node/include/node_debug.h +30 -0
- package/dist/node/include/node_dir.h +52 -0
- package/dist/node/include/node_dotenv.h +45 -0
- package/dist/node/include/node_errors.h +380 -0
- package/dist/node/include/node_exit_code.h +54 -0
- package/dist/node/include/node_external_reference.h +165 -0
- package/dist/node/include/node_file-inl.h +406 -0
- package/dist/node/include/node_file.h +537 -0
- package/dist/node/include/node_http2.h +1177 -0
- package/dist/node/include/node_http2_state.h +159 -0
- package/dist/node/include/node_http_common-inl.h +202 -0
- package/dist/node/include/node_http_common.h +535 -0
- package/dist/node/include/node_i18n.h +132 -0
- package/dist/node/include/node_internals.h +483 -0
- package/dist/node/include/node_main_instance.h +67 -0
- package/dist/node/include/node_mem-inl.h +113 -0
- package/dist/node/include/node_mem.h +45 -0
- package/dist/node/include/node_messaging.h +389 -0
- package/dist/node/include/node_metadata.h +164 -0
- package/dist/node/include/node_modules.h +91 -0
- package/dist/node/include/node_mutex.h +323 -0
- package/dist/node/include/node_object_wrap.h +132 -0
- package/dist/node/include/node_options-inl.h +490 -0
- package/dist/node/include/node_options.h +615 -0
- package/dist/node/include/node_perf.h +166 -0
- package/dist/node/include/node_perf_common.h +102 -0
- package/dist/node/include/node_platform.h +238 -0
- package/dist/node/include/node_process-inl.h +26 -0
- package/dist/node/include/node_process.h +112 -0
- package/dist/node/include/node_realm-inl.h +151 -0
- package/dist/node/include/node_realm.h +183 -0
- package/dist/node/include/node_report.h +43 -0
- package/dist/node/include/node_revert.h +82 -0
- package/dist/node/include/node_root_certs.h +3520 -0
- package/dist/node/include/node_sea.h +74 -0
- package/dist/node/include/node_shadow_realm.h +46 -0
- package/dist/node/include/node_snapshot_builder.h +57 -0
- package/dist/node/include/node_snapshotable.h +174 -0
- package/dist/node/include/node_sockaddr-inl.h +257 -0
- package/dist/node/include/node_sockaddr.h +394 -0
- package/dist/node/include/node_sqlite.h +270 -0
- package/dist/node/include/node_stat_watcher.h +73 -0
- package/dist/node/include/node_task_runner.h +92 -0
- package/dist/node/include/node_threadsafe_cow-inl.h +54 -0
- package/dist/node/include/node_threadsafe_cow.h +105 -0
- package/dist/node/include/node_union_bytes.h +81 -0
- package/dist/node/include/node_url.h +96 -0
- package/dist/node/include/node_v8.h +77 -0
- package/dist/node/include/node_v8_platform-inl.h +185 -0
- package/dist/node/include/node_version.h +110 -0
- package/dist/node/include/node_wasi.h +184 -0
- package/dist/node/include/node_wasm_web_api.h +55 -0
- package/dist/node/include/node_watchdog.h +154 -0
- package/dist/node/include/node_webstorage.h +60 -0
- package/dist/node/include/node_worker.h +158 -0
- package/dist/node/include/path.h +33 -0
- package/dist/node/include/permission/addon_permission.h +31 -0
- package/dist/node/include/permission/child_process_permission.h +31 -0
- package/dist/node/include/permission/fs_permission.h +167 -0
- package/dist/node/include/permission/inspector_permission.h +31 -0
- package/dist/node/include/permission/permission.h +138 -0
- package/dist/node/include/permission/permission_base.h +65 -0
- package/dist/node/include/permission/wasi_permission.h +31 -0
- package/dist/node/include/permission/worker_permission.h +31 -0
- package/dist/node/include/pipe_wrap.h +80 -0
- package/dist/node/include/quic/application.h +159 -0
- package/dist/node/include/quic/bindingdata.h +272 -0
- package/dist/node/include/quic/cid.h +127 -0
- package/dist/node/include/quic/data.h +148 -0
- package/dist/node/include/quic/defs.h +245 -0
- package/dist/node/include/quic/endpoint.h +458 -0
- package/dist/node/include/quic/http3.h +15 -0
- package/dist/node/include/quic/logstream.h +81 -0
- package/dist/node/include/quic/packet.h +152 -0
- package/dist/node/include/quic/preferredaddress.h +72 -0
- package/dist/node/include/quic/session.h +443 -0
- package/dist/node/include/quic/sessionticket.h +108 -0
- package/dist/node/include/quic/streams.h +232 -0
- package/dist/node/include/quic/tlscontext.h +227 -0
- package/dist/node/include/quic/tokens.h +256 -0
- package/dist/node/include/quic/transportparams.h +165 -0
- package/dist/node/include/req_wrap-inl.h +171 -0
- package/dist/node/include/req_wrap.h +77 -0
- package/dist/node/include/spawn_sync.h +243 -0
- package/dist/node/include/stream_base-inl.h +173 -0
- package/dist/node/include/stream_base.h +478 -0
- package/dist/node/include/stream_pipe.h +76 -0
- package/dist/node/include/stream_wrap.h +132 -0
- package/dist/node/include/string_bytes.h +113 -0
- package/dist/node/include/string_decoder-inl.h +31 -0
- package/dist/node/include/string_decoder.h +49 -0
- package/dist/node/include/tcp_wrap.h +105 -0
- package/dist/node/include/threadpoolwork-inl.h +70 -0
- package/dist/node/include/timer_wrap-inl.h +32 -0
- package/dist/node/include/timer_wrap.h +85 -0
- package/dist/node/include/timers.h +70 -0
- package/dist/node/include/tracing/agent.h +195 -0
- package/dist/node/include/tracing/node_trace_buffer.h +83 -0
- package/dist/node/include/tracing/node_trace_writer.h +75 -0
- package/dist/node/include/tracing/trace_event.h +722 -0
- package/dist/node/include/tracing/trace_event_common.h +1109 -0
- package/dist/node/include/tracing/traced_value.h +129 -0
- package/dist/node/include/tty_wrap.h +65 -0
- package/dist/node/include/udp_wrap.h +230 -0
- package/dist/node/include/undici_version.h +6 -0
- package/dist/node/include/util-inl.h +700 -0
- package/dist/node/include/util.h +1021 -0
- package/dist/node/include/uv/aix.h +32 -0
- package/dist/node/include/uv/bsd.h +34 -0
- package/dist/node/include/uv/darwin.h +61 -0
- package/dist/node/include/uv/errno.h +483 -0
- package/dist/node/include/uv/linux.h +34 -0
- package/dist/node/include/uv/os390.h +33 -0
- package/dist/node/include/uv/posix.h +31 -0
- package/dist/node/include/uv/sunos.h +44 -0
- package/dist/node/include/uv/threadpool.h +37 -0
- package/dist/node/include/uv/tree.h +521 -0
- package/dist/node/include/uv/unix.h +512 -0
- package/dist/node/include/uv/version.h +43 -0
- package/dist/node/include/uv/win.h +698 -0
- package/dist/node/include/uv.h +1990 -0
- package/dist/node/include/v8-array-buffer.h +525 -0
- package/dist/node/include/v8-callbacks.h +462 -0
- package/dist/node/include/v8-container.h +183 -0
- package/dist/node/include/v8-context.h +485 -0
- package/dist/node/include/v8-cppgc.h +245 -0
- package/dist/node/include/v8-data.h +80 -0
- package/dist/node/include/v8-date.h +48 -0
- package/dist/node/include/v8-debug.h +168 -0
- package/dist/node/include/v8-embedder-heap.h +82 -0
- package/dist/node/include/v8-embedder-state-scope.h +52 -0
- package/dist/node/include/v8-exception.h +223 -0
- package/dist/node/include/v8-extension.h +62 -0
- package/dist/node/include/v8-external.h +37 -0
- package/dist/node/include/v8-fast-api-calls.h +984 -0
- package/dist/node/include/v8-forward.h +82 -0
- package/dist/node/include/v8-function-callback.h +607 -0
- package/dist/node/include/v8-function.h +140 -0
- package/dist/node/include/v8-handle-base.h +137 -0
- package/dist/node/include/v8-initialization.h +289 -0
- package/dist/node/include/v8-inspector-protocol.h +13 -0
- package/dist/node/include/v8-inspector.h +419 -0
- package/dist/node/include/v8-internal.h +1397 -0
- package/dist/node/include/v8-isolate.h +1767 -0
- package/dist/node/include/v8-json.h +47 -0
- package/dist/node/include/v8-local-handle.h +758 -0
- package/dist/node/include/v8-locker.h +138 -0
- package/dist/node/include/v8-maybe.h +160 -0
- package/dist/node/include/v8-memory-span.h +198 -0
- package/dist/node/include/v8-message.h +233 -0
- package/dist/node/include/v8-metrics.h +264 -0
- package/dist/node/include/v8-microtask-queue.h +157 -0
- package/dist/node/include/v8-microtask.h +28 -0
- package/dist/node/include/v8-object.h +824 -0
- package/dist/node/include/v8-persistent-handle.h +582 -0
- package/dist/node/include/v8-platform.h +1358 -0
- package/dist/node/include/v8-primitive-object.h +118 -0
- package/dist/node/include/v8-primitive.h +877 -0
- package/dist/node/include/v8-profiler.h +1302 -0
- package/dist/node/include/v8-promise.h +174 -0
- package/dist/node/include/v8-proxy.h +50 -0
- package/dist/node/include/v8-regexp.h +106 -0
- package/dist/node/include/v8-script.h +904 -0
- package/dist/node/include/v8-snapshot.h +266 -0
- package/dist/node/include/v8-source-location.h +92 -0
- package/dist/node/include/v8-statistics.h +238 -0
- package/dist/node/include/v8-template.h +1297 -0
- package/dist/node/include/v8-traced-handle.h +432 -0
- package/dist/node/include/v8-typed-array.h +390 -0
- package/dist/node/include/v8-unwinder-state.h +31 -0
- package/dist/node/include/v8-unwinder.h +132 -0
- package/dist/node/include/v8-util.h +665 -0
- package/dist/node/include/v8-value-serializer-version.h +24 -0
- package/dist/node/include/v8-value-serializer.h +316 -0
- package/dist/node/include/v8-value.h +655 -0
- package/dist/node/include/v8-version-string.h +38 -0
- package/dist/node/include/v8-version.h +20 -0
- package/dist/node/include/v8-wasm-trap-handler-posix.h +31 -0
- package/dist/node/include/v8-wasm-trap-handler-win.h +28 -0
- package/dist/node/include/v8-wasm.h +201 -0
- package/dist/node/include/v8-weak-callback-info.h +80 -0
- package/dist/node/include/v8.h +88 -0
- package/dist/node/include/v8config.h +981 -0
- package/dist/node/include/zlib_version.h +6 -0
- package/dist/node/libnode.dll +0 -0
- package/dist/node/libnode.lib +0 -0
- package/dist/node/libnodebuildinfo.json +10 -0
- package/dist/node/link_node.lib +0 -0
- package/dist/node/link_node.node +0 -0
- package/index.js +5 -0
- package/libnode.release.json +8 -0
- package/package.json +29 -1
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
// Copyright 2021 the V8 project authors. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
#ifndef INCLUDE_V8_TRACED_HANDLE_H_
|
|
6
|
+
#define INCLUDE_V8_TRACED_HANDLE_H_
|
|
7
|
+
|
|
8
|
+
#include <stddef.h>
|
|
9
|
+
#include <stdint.h>
|
|
10
|
+
#include <stdio.h>
|
|
11
|
+
|
|
12
|
+
#include <atomic>
|
|
13
|
+
#include <memory>
|
|
14
|
+
#include <type_traits>
|
|
15
|
+
#include <utility>
|
|
16
|
+
|
|
17
|
+
#include "v8-internal.h" // NOLINT(build/include_directory)
|
|
18
|
+
#include "v8-local-handle.h" // NOLINT(build/include_directory)
|
|
19
|
+
#include "v8-weak-callback-info.h" // NOLINT(build/include_directory)
|
|
20
|
+
#include "v8config.h" // NOLINT(build/include_directory)
|
|
21
|
+
|
|
22
|
+
namespace v8 {
|
|
23
|
+
|
|
24
|
+
class Value;
|
|
25
|
+
|
|
26
|
+
namespace internal {
|
|
27
|
+
|
|
28
|
+
class BasicTracedReferenceExtractor;
|
|
29
|
+
|
|
30
|
+
enum class TracedReferenceStoreMode {
|
|
31
|
+
kInitializingStore,
|
|
32
|
+
kAssigningStore,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
enum class TracedReferenceHandling {
|
|
36
|
+
kDefault, // See EmbedderRootsHandler::IsRoot().
|
|
37
|
+
kDroppable
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
V8_EXPORT internal::Address* GlobalizeTracedReference(
|
|
41
|
+
internal::Isolate* isolate, internal::Address value,
|
|
42
|
+
internal::Address* slot, TracedReferenceStoreMode store_mode,
|
|
43
|
+
internal::TracedReferenceHandling reference_handling);
|
|
44
|
+
V8_EXPORT void MoveTracedReference(internal::Address** from,
|
|
45
|
+
internal::Address** to);
|
|
46
|
+
V8_EXPORT void CopyTracedReference(const internal::Address* const* from,
|
|
47
|
+
internal::Address** to);
|
|
48
|
+
V8_EXPORT void DisposeTracedReference(internal::Address* global_handle);
|
|
49
|
+
|
|
50
|
+
} // namespace internal
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* An indirect handle, where the indirect pointer points to a GlobalHandles
|
|
54
|
+
* node.
|
|
55
|
+
*/
|
|
56
|
+
class TracedReferenceBase : public api_internal::IndirectHandleBase {
|
|
57
|
+
public:
|
|
58
|
+
/**
|
|
59
|
+
* If non-empty, destroy the underlying storage cell. |IsEmpty| will return
|
|
60
|
+
* true after this call.
|
|
61
|
+
*/
|
|
62
|
+
V8_INLINE void Reset();
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Construct a Local<Value> from this handle.
|
|
66
|
+
*/
|
|
67
|
+
V8_INLINE Local<Value> Get(Isolate* isolate) const {
|
|
68
|
+
if (IsEmpty()) return Local<Value>();
|
|
69
|
+
return Local<Value>::New(isolate, this->value<Value>());
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Returns true if this TracedReference is empty, i.e., has not been
|
|
74
|
+
* assigned an object. This version of IsEmpty is thread-safe.
|
|
75
|
+
*/
|
|
76
|
+
bool IsEmptyThreadSafe() const {
|
|
77
|
+
return this->GetSlotThreadSafe() == nullptr;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
protected:
|
|
81
|
+
V8_INLINE TracedReferenceBase() = default;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Update this reference in a thread-safe way.
|
|
85
|
+
*/
|
|
86
|
+
void SetSlotThreadSafe(void* new_val) {
|
|
87
|
+
reinterpret_cast<std::atomic<void*>*>(&slot())->store(
|
|
88
|
+
new_val, std::memory_order_relaxed);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Get this reference in a thread-safe way
|
|
93
|
+
*/
|
|
94
|
+
const void* GetSlotThreadSafe() const {
|
|
95
|
+
return reinterpret_cast<std::atomic<const void*> const*>(&slot())->load(
|
|
96
|
+
std::memory_order_relaxed);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
V8_EXPORT void CheckValue() const;
|
|
100
|
+
|
|
101
|
+
friend class internal::BasicTracedReferenceExtractor;
|
|
102
|
+
template <typename F>
|
|
103
|
+
friend class Local;
|
|
104
|
+
template <typename U>
|
|
105
|
+
friend bool operator==(const TracedReferenceBase&, const Local<U>&);
|
|
106
|
+
friend bool operator==(const TracedReferenceBase&,
|
|
107
|
+
const TracedReferenceBase&);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* A traced handle with copy and move semantics. The handle is to be used
|
|
112
|
+
* together as part of GarbageCollected objects (see v8-cppgc.h) or from stack
|
|
113
|
+
* and specifies edges from C++ objects to JavaScript.
|
|
114
|
+
*
|
|
115
|
+
* The exact semantics are:
|
|
116
|
+
* - Tracing garbage collections using CppHeap.
|
|
117
|
+
* - Non-tracing garbage collections refer to
|
|
118
|
+
* |v8::EmbedderRootsHandler::IsRoot()| whether the handle should
|
|
119
|
+
* be treated as root or not.
|
|
120
|
+
*
|
|
121
|
+
* Note that the base class cannot be instantiated itself, use |TracedReference|
|
|
122
|
+
* instead.
|
|
123
|
+
*/
|
|
124
|
+
template <typename T>
|
|
125
|
+
class BasicTracedReference : public TracedReferenceBase {
|
|
126
|
+
public:
|
|
127
|
+
/**
|
|
128
|
+
* Construct a Local<T> from this handle.
|
|
129
|
+
*/
|
|
130
|
+
Local<T> Get(Isolate* isolate) const { return Local<T>::New(isolate, *this); }
|
|
131
|
+
|
|
132
|
+
template <class S>
|
|
133
|
+
V8_INLINE BasicTracedReference<S>& As() const {
|
|
134
|
+
return reinterpret_cast<BasicTracedReference<S>&>(
|
|
135
|
+
const_cast<BasicTracedReference<T>&>(*this));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
V8_DEPRECATE_SOON("Use Get to convert to Local instead")
|
|
139
|
+
V8_INLINE T* operator->() const {
|
|
140
|
+
#ifdef V8_ENABLE_CHECKS
|
|
141
|
+
CheckValue();
|
|
142
|
+
#endif // V8_ENABLE_CHECKS
|
|
143
|
+
return this->template value<T>();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
V8_DEPRECATE_SOON("Use Get to convert to Local instead")
|
|
147
|
+
V8_INLINE T* operator*() const { return this->operator->(); }
|
|
148
|
+
|
|
149
|
+
private:
|
|
150
|
+
/**
|
|
151
|
+
* An empty BasicTracedReference without storage cell.
|
|
152
|
+
*/
|
|
153
|
+
BasicTracedReference() = default;
|
|
154
|
+
|
|
155
|
+
V8_INLINE static internal::Address* NewFromNonEmptyValue(
|
|
156
|
+
Isolate* isolate, T* that, internal::Address** slot,
|
|
157
|
+
internal::TracedReferenceStoreMode store_mode,
|
|
158
|
+
internal::TracedReferenceHandling reference_handling);
|
|
159
|
+
|
|
160
|
+
template <typename F>
|
|
161
|
+
friend class Local;
|
|
162
|
+
friend class Object;
|
|
163
|
+
template <typename F>
|
|
164
|
+
friend class TracedReference;
|
|
165
|
+
template <typename F>
|
|
166
|
+
friend class BasicTracedReference;
|
|
167
|
+
template <typename F>
|
|
168
|
+
friend class ReturnValue;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* A traced handle without destructor that clears the handle. The embedder needs
|
|
173
|
+
* to ensure that the handle is not accessed once the V8 object has been
|
|
174
|
+
* reclaimed. For more details see BasicTracedReference.
|
|
175
|
+
*/
|
|
176
|
+
template <typename T>
|
|
177
|
+
class TracedReference : public BasicTracedReference<T> {
|
|
178
|
+
public:
|
|
179
|
+
struct IsDroppable {};
|
|
180
|
+
|
|
181
|
+
using BasicTracedReference<T>::Reset;
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* An empty TracedReference without storage cell.
|
|
185
|
+
*/
|
|
186
|
+
V8_INLINE TracedReference() = default;
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Construct a TracedReference from a Local.
|
|
190
|
+
*
|
|
191
|
+
* When the Local is non-empty, a new storage cell is created
|
|
192
|
+
* pointing to the same object.
|
|
193
|
+
*/
|
|
194
|
+
template <class S>
|
|
195
|
+
TracedReference(Isolate* isolate, Local<S> that) : BasicTracedReference<T>() {
|
|
196
|
+
static_assert(std::is_base_of<T, S>::value, "type check");
|
|
197
|
+
if (V8_UNLIKELY(that.IsEmpty())) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
this->slot() = this->NewFromNonEmptyValue(
|
|
201
|
+
isolate, *that, &this->slot(),
|
|
202
|
+
internal::TracedReferenceStoreMode::kInitializingStore,
|
|
203
|
+
internal::TracedReferenceHandling::kDefault);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Construct a droppable TracedReference from a Local. Droppable means that V8
|
|
208
|
+
* is free to reclaim the pointee if it is unmodified and otherwise
|
|
209
|
+
* unreachable
|
|
210
|
+
*
|
|
211
|
+
* When the Local is non-empty, a new storage cell is created
|
|
212
|
+
* pointing to the same object.
|
|
213
|
+
*/
|
|
214
|
+
template <class S>
|
|
215
|
+
TracedReference(Isolate* isolate, Local<S> that, IsDroppable)
|
|
216
|
+
: BasicTracedReference<T>() {
|
|
217
|
+
static_assert(std::is_base_of<T, S>::value, "type check");
|
|
218
|
+
if (V8_UNLIKELY(that.IsEmpty())) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
this->slot() = this->NewFromNonEmptyValue(
|
|
222
|
+
isolate, *that, &this->slot(),
|
|
223
|
+
internal::TracedReferenceStoreMode::kInitializingStore,
|
|
224
|
+
internal::TracedReferenceHandling::kDroppable);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Move constructor initializing TracedReference from an
|
|
229
|
+
* existing one.
|
|
230
|
+
*/
|
|
231
|
+
V8_INLINE TracedReference(TracedReference&& other) noexcept {
|
|
232
|
+
// Forward to operator=.
|
|
233
|
+
*this = std::move(other);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Move constructor initializing TracedReference from an
|
|
238
|
+
* existing one.
|
|
239
|
+
*/
|
|
240
|
+
template <typename S>
|
|
241
|
+
V8_INLINE TracedReference(TracedReference<S>&& other) noexcept {
|
|
242
|
+
// Forward to operator=.
|
|
243
|
+
*this = std::move(other);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Copy constructor initializing TracedReference from an
|
|
248
|
+
* existing one.
|
|
249
|
+
*/
|
|
250
|
+
V8_INLINE TracedReference(const TracedReference& other) {
|
|
251
|
+
// Forward to operator=;
|
|
252
|
+
*this = other;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Copy constructor initializing TracedReference from an
|
|
257
|
+
* existing one.
|
|
258
|
+
*/
|
|
259
|
+
template <typename S>
|
|
260
|
+
V8_INLINE TracedReference(const TracedReference<S>& other) {
|
|
261
|
+
// Forward to operator=;
|
|
262
|
+
*this = other;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Move assignment operator initializing TracedReference from an existing one.
|
|
267
|
+
*/
|
|
268
|
+
V8_INLINE TracedReference& operator=(TracedReference&& rhs) noexcept;
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Move assignment operator initializing TracedReference from an existing one.
|
|
272
|
+
*/
|
|
273
|
+
template <class S>
|
|
274
|
+
V8_INLINE TracedReference& operator=(TracedReference<S>&& rhs) noexcept;
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Copy assignment operator initializing TracedReference from an existing one.
|
|
278
|
+
*/
|
|
279
|
+
V8_INLINE TracedReference& operator=(const TracedReference& rhs);
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Copy assignment operator initializing TracedReference from an existing one.
|
|
283
|
+
*/
|
|
284
|
+
template <class S>
|
|
285
|
+
V8_INLINE TracedReference& operator=(const TracedReference<S>& rhs);
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Always resets the reference. Creates a new reference from `other` if it is
|
|
289
|
+
* non-empty.
|
|
290
|
+
*/
|
|
291
|
+
template <class S>
|
|
292
|
+
V8_INLINE void Reset(Isolate* isolate, const Local<S>& other);
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Always resets the reference. Creates a new reference from `other` if it is
|
|
296
|
+
* non-empty. The new reference is droppable, see constructor.
|
|
297
|
+
*/
|
|
298
|
+
template <class S>
|
|
299
|
+
V8_INLINE void Reset(Isolate* isolate, const Local<S>& other, IsDroppable);
|
|
300
|
+
|
|
301
|
+
template <class S>
|
|
302
|
+
V8_INLINE TracedReference<S>& As() const {
|
|
303
|
+
return reinterpret_cast<TracedReference<S>&>(
|
|
304
|
+
const_cast<TracedReference<T>&>(*this));
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
// --- Implementation ---
|
|
309
|
+
template <class T>
|
|
310
|
+
internal::Address* BasicTracedReference<T>::NewFromNonEmptyValue(
|
|
311
|
+
Isolate* isolate, T* that, internal::Address** slot,
|
|
312
|
+
internal::TracedReferenceStoreMode store_mode,
|
|
313
|
+
internal::TracedReferenceHandling reference_handling) {
|
|
314
|
+
return internal::GlobalizeTracedReference(
|
|
315
|
+
reinterpret_cast<internal::Isolate*>(isolate),
|
|
316
|
+
internal::ValueHelper::ValueAsAddress(that),
|
|
317
|
+
reinterpret_cast<internal::Address*>(slot), store_mode,
|
|
318
|
+
reference_handling);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
void TracedReferenceBase::Reset() {
|
|
322
|
+
if (V8_UNLIKELY(IsEmpty())) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
internal::DisposeTracedReference(slot());
|
|
326
|
+
SetSlotThreadSafe(nullptr);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
V8_INLINE bool operator==(const TracedReferenceBase& lhs,
|
|
330
|
+
const TracedReferenceBase& rhs) {
|
|
331
|
+
return internal::HandleHelper::EqualHandles(lhs, rhs);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
template <typename U>
|
|
335
|
+
V8_INLINE bool operator==(const TracedReferenceBase& lhs,
|
|
336
|
+
const v8::Local<U>& rhs) {
|
|
337
|
+
return internal::HandleHelper::EqualHandles(lhs, rhs);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
template <typename U>
|
|
341
|
+
V8_INLINE bool operator==(const v8::Local<U>& lhs,
|
|
342
|
+
const TracedReferenceBase& rhs) {
|
|
343
|
+
return rhs == lhs;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
V8_INLINE bool operator!=(const TracedReferenceBase& lhs,
|
|
347
|
+
const TracedReferenceBase& rhs) {
|
|
348
|
+
return !(lhs == rhs);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
template <typename U>
|
|
352
|
+
V8_INLINE bool operator!=(const TracedReferenceBase& lhs,
|
|
353
|
+
const v8::Local<U>& rhs) {
|
|
354
|
+
return !(lhs == rhs);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
template <typename U>
|
|
358
|
+
V8_INLINE bool operator!=(const v8::Local<U>& lhs,
|
|
359
|
+
const TracedReferenceBase& rhs) {
|
|
360
|
+
return !(rhs == lhs);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
template <class T>
|
|
364
|
+
template <class S>
|
|
365
|
+
void TracedReference<T>::Reset(Isolate* isolate, const Local<S>& other) {
|
|
366
|
+
static_assert(std::is_base_of<T, S>::value, "type check");
|
|
367
|
+
this->Reset();
|
|
368
|
+
if (V8_UNLIKELY(other.IsEmpty())) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
this->SetSlotThreadSafe(this->NewFromNonEmptyValue(
|
|
372
|
+
isolate, *other, &this->slot(),
|
|
373
|
+
internal::TracedReferenceStoreMode::kAssigningStore,
|
|
374
|
+
internal::TracedReferenceHandling::kDefault));
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
template <class T>
|
|
378
|
+
template <class S>
|
|
379
|
+
void TracedReference<T>::Reset(Isolate* isolate, const Local<S>& other,
|
|
380
|
+
IsDroppable) {
|
|
381
|
+
static_assert(std::is_base_of<T, S>::value, "type check");
|
|
382
|
+
this->Reset();
|
|
383
|
+
if (V8_UNLIKELY(other.IsEmpty())) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
this->SetSlotThreadSafe(this->NewFromNonEmptyValue(
|
|
387
|
+
isolate, *other, &this->slot(),
|
|
388
|
+
internal::TracedReferenceStoreMode::kAssigningStore,
|
|
389
|
+
internal::TracedReferenceHandling::kDroppable));
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
template <class T>
|
|
393
|
+
template <class S>
|
|
394
|
+
TracedReference<T>& TracedReference<T>::operator=(
|
|
395
|
+
TracedReference<S>&& rhs) noexcept {
|
|
396
|
+
static_assert(std::is_base_of<T, S>::value, "type check");
|
|
397
|
+
*this = std::move(rhs.template As<T>());
|
|
398
|
+
return *this;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
template <class T>
|
|
402
|
+
template <class S>
|
|
403
|
+
TracedReference<T>& TracedReference<T>::operator=(
|
|
404
|
+
const TracedReference<S>& rhs) {
|
|
405
|
+
static_assert(std::is_base_of<T, S>::value, "type check");
|
|
406
|
+
*this = rhs.template As<T>();
|
|
407
|
+
return *this;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
template <class T>
|
|
411
|
+
TracedReference<T>& TracedReference<T>::operator=(
|
|
412
|
+
TracedReference&& rhs) noexcept {
|
|
413
|
+
if (this != &rhs) {
|
|
414
|
+
internal::MoveTracedReference(&rhs.slot(), &this->slot());
|
|
415
|
+
}
|
|
416
|
+
return *this;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
template <class T>
|
|
420
|
+
TracedReference<T>& TracedReference<T>::operator=(const TracedReference& rhs) {
|
|
421
|
+
if (this != &rhs) {
|
|
422
|
+
this->Reset();
|
|
423
|
+
if (!rhs.IsEmpty()) {
|
|
424
|
+
internal::CopyTracedReference(&rhs.slot(), &this->slot());
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
return *this;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
} // namespace v8
|
|
431
|
+
|
|
432
|
+
#endif // INCLUDE_V8_TRACED_HANDLE_H_
|