@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.
Files changed (343) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/dist/node/include/acorn_version.h +6 -0
  4. package/dist/node/include/aliased_buffer-inl.h +244 -0
  5. package/dist/node/include/aliased_buffer.h +206 -0
  6. package/dist/node/include/aliased_struct-inl.h +54 -0
  7. package/dist/node/include/aliased_struct.h +63 -0
  8. package/dist/node/include/amaro_version.h +6 -0
  9. package/dist/node/include/async_context_frame.h +33 -0
  10. package/dist/node/include/async_wrap-inl.h +96 -0
  11. package/dist/node/include/async_wrap.h +243 -0
  12. package/dist/node/include/base_object-inl.h +335 -0
  13. package/dist/node/include/base_object.h +342 -0
  14. package/dist/node/include/base_object_types.h +74 -0
  15. package/dist/node/include/blob_serializer_deserializer-inl.h +385 -0
  16. package/dist/node/include/blob_serializer_deserializer.h +132 -0
  17. package/dist/node/include/callback_queue-inl.h +97 -0
  18. package/dist/node/include/callback_queue.h +79 -0
  19. package/dist/node/include/cares_wrap.h +447 -0
  20. package/dist/node/include/cjs_module_lexer_version.h +6 -0
  21. package/dist/node/include/cleanup_queue-inl.h +36 -0
  22. package/dist/node/include/cleanup_queue.h +79 -0
  23. package/dist/node/include/compile_cache.h +104 -0
  24. package/dist/node/include/connect_wrap.h +26 -0
  25. package/dist/node/include/connection_wrap.h +30 -0
  26. package/dist/node/include/cppgc/allocation.h +310 -0
  27. package/dist/node/include/cppgc/common.h +28 -0
  28. package/dist/node/include/cppgc/cross-thread-persistent.h +466 -0
  29. package/dist/node/include/cppgc/custom-space.h +97 -0
  30. package/dist/node/include/cppgc/default-platform.h +67 -0
  31. package/dist/node/include/cppgc/ephemeron-pair.h +30 -0
  32. package/dist/node/include/cppgc/explicit-management.h +100 -0
  33. package/dist/node/include/cppgc/garbage-collected.h +106 -0
  34. package/dist/node/include/cppgc/heap-consistency.h +309 -0
  35. package/dist/node/include/cppgc/heap-handle.h +48 -0
  36. package/dist/node/include/cppgc/heap-state.h +82 -0
  37. package/dist/node/include/cppgc/heap-statistics.h +120 -0
  38. package/dist/node/include/cppgc/heap.h +202 -0
  39. package/dist/node/include/cppgc/internal/api-constants.h +87 -0
  40. package/dist/node/include/cppgc/internal/atomic-entry-flag.h +48 -0
  41. package/dist/node/include/cppgc/internal/base-page-handle.h +45 -0
  42. package/dist/node/include/cppgc/internal/caged-heap-local-data.h +121 -0
  43. package/dist/node/include/cppgc/internal/caged-heap.h +68 -0
  44. package/dist/node/include/cppgc/internal/compiler-specific.h +38 -0
  45. package/dist/node/include/cppgc/internal/finalizer-trait.h +93 -0
  46. package/dist/node/include/cppgc/internal/gc-info.h +148 -0
  47. package/dist/node/include/cppgc/internal/logging.h +50 -0
  48. package/dist/node/include/cppgc/internal/member-storage.h +256 -0
  49. package/dist/node/include/cppgc/internal/name-trait.h +137 -0
  50. package/dist/node/include/cppgc/internal/persistent-node.h +214 -0
  51. package/dist/node/include/cppgc/internal/pointer-policies.h +243 -0
  52. package/dist/node/include/cppgc/internal/write-barrier.h +487 -0
  53. package/dist/node/include/cppgc/liveness-broker.h +78 -0
  54. package/dist/node/include/cppgc/macros.h +35 -0
  55. package/dist/node/include/cppgc/member.h +629 -0
  56. package/dist/node/include/cppgc/name-provider.h +65 -0
  57. package/dist/node/include/cppgc/object-size-trait.h +58 -0
  58. package/dist/node/include/cppgc/persistent.h +377 -0
  59. package/dist/node/include/cppgc/platform.h +163 -0
  60. package/dist/node/include/cppgc/prefinalizer.h +75 -0
  61. package/dist/node/include/cppgc/process-heap-statistics.h +36 -0
  62. package/dist/node/include/cppgc/sentinel-pointer.h +39 -0
  63. package/dist/node/include/cppgc/source-location.h +16 -0
  64. package/dist/node/include/cppgc/testing.h +106 -0
  65. package/dist/node/include/cppgc/trace-trait.h +128 -0
  66. package/dist/node/include/cppgc/type-traits.h +271 -0
  67. package/dist/node/include/cppgc/visitor.h +504 -0
  68. package/dist/node/include/crypto/crypto_aes.h +88 -0
  69. package/dist/node/include/crypto/crypto_bio.h +193 -0
  70. package/dist/node/include/crypto/crypto_cipher.h +293 -0
  71. package/dist/node/include/crypto/crypto_clienthello-inl.h +90 -0
  72. package/dist/node/include/crypto/crypto_clienthello.h +131 -0
  73. package/dist/node/include/crypto/crypto_common.h +64 -0
  74. package/dist/node/include/crypto/crypto_context.h +171 -0
  75. package/dist/node/include/crypto/crypto_dh.h +126 -0
  76. package/dist/node/include/crypto/crypto_dsa.h +52 -0
  77. package/dist/node/include/crypto/crypto_ec.h +164 -0
  78. package/dist/node/include/crypto/crypto_hash.h +91 -0
  79. package/dist/node/include/crypto/crypto_hkdf.h +61 -0
  80. package/dist/node/include/crypto/crypto_hmac.h +92 -0
  81. package/dist/node/include/crypto/crypto_keygen.h +299 -0
  82. package/dist/node/include/crypto/crypto_keys.h +392 -0
  83. package/dist/node/include/crypto/crypto_pbkdf2.h +74 -0
  84. package/dist/node/include/crypto/crypto_random.h +124 -0
  85. package/dist/node/include/crypto/crypto_rsa.h +136 -0
  86. package/dist/node/include/crypto/crypto_scrypt.h +85 -0
  87. package/dist/node/include/crypto/crypto_sig.h +165 -0
  88. package/dist/node/include/crypto/crypto_spkac.h +21 -0
  89. package/dist/node/include/crypto/crypto_timing.h +20 -0
  90. package/dist/node/include/crypto/crypto_tls.h +305 -0
  91. package/dist/node/include/crypto/crypto_util.h +725 -0
  92. package/dist/node/include/crypto/crypto_x509.h +140 -0
  93. package/dist/node/include/dataqueue/queue.h +306 -0
  94. package/dist/node/include/debug_utils-inl.h +278 -0
  95. package/dist/node/include/debug_utils.h +196 -0
  96. package/dist/node/include/diagnosticfilename-inl.h +33 -0
  97. package/dist/node/include/embedded_data.h +17 -0
  98. package/dist/node/include/encoding_binding.h +61 -0
  99. package/dist/node/include/env-inl.h +984 -0
  100. package/dist/node/include/env.h +1287 -0
  101. package/dist/node/include/env_properties.h +540 -0
  102. package/dist/node/include/handle_wrap.h +123 -0
  103. package/dist/node/include/histogram-inl.h +107 -0
  104. package/dist/node/include/histogram.h +279 -0
  105. package/dist/node/include/inspector/io_agent.h +30 -0
  106. package/dist/node/include/inspector/main_thread_interface.h +116 -0
  107. package/dist/node/include/inspector/network_agent.h +94 -0
  108. package/dist/node/include/inspector/network_inspector.h +45 -0
  109. package/dist/node/include/inspector/network_requests_buffer.h +195 -0
  110. package/dist/node/include/inspector/network_resource_manager.h +29 -0
  111. package/dist/node/include/inspector/node_json.h +24 -0
  112. package/dist/node/include/inspector/node_string.h +101 -0
  113. package/dist/node/include/inspector/protocol_helper.h +27 -0
  114. package/dist/node/include/inspector/runtime_agent.h +41 -0
  115. package/dist/node/include/inspector/target_agent.h +75 -0
  116. package/dist/node/include/inspector/tracing_agent.h +43 -0
  117. package/dist/node/include/inspector/worker_agent.h +40 -0
  118. package/dist/node/include/inspector/worker_inspector.h +124 -0
  119. package/dist/node/include/inspector_agent.h +165 -0
  120. package/dist/node/include/inspector_io.h +78 -0
  121. package/dist/node/include/inspector_profiler.h +149 -0
  122. package/dist/node/include/inspector_socket.h +60 -0
  123. package/dist/node/include/inspector_socket_server.h +110 -0
  124. package/dist/node/include/js_native_api.h +607 -0
  125. package/dist/node/include/js_native_api_types.h +226 -0
  126. package/dist/node/include/js_native_api_v8.h +485 -0
  127. package/dist/node/include/js_native_api_v8_internals.h +45 -0
  128. package/dist/node/include/js_stream.h +52 -0
  129. package/dist/node/include/json_utils.h +172 -0
  130. package/dist/node/include/large_pages/node_large_page.h +34 -0
  131. package/dist/node/include/libplatform/libplatform-export.h +29 -0
  132. package/dist/node/include/libplatform/libplatform.h +112 -0
  133. package/dist/node/include/libplatform/v8-tracing.h +333 -0
  134. package/dist/node/include/memory_tracker-inl.h +359 -0
  135. package/dist/node/include/memory_tracker.h +289 -0
  136. package/dist/node/include/module_wrap.h +216 -0
  137. package/dist/node/include/node.h +1593 -0
  138. package/dist/node/include/node_api.h +265 -0
  139. package/dist/node/include/node_api_internals.h +48 -0
  140. package/dist/node/include/node_api_types.h +56 -0
  141. package/dist/node/include/node_binding.h +161 -0
  142. package/dist/node/include/node_blob.h +159 -0
  143. package/dist/node/include/node_bob-inl.h +36 -0
  144. package/dist/node/include/node_bob.h +107 -0
  145. package/dist/node/include/node_buffer.h +92 -0
  146. package/dist/node/include/node_builtins.h +220 -0
  147. package/dist/node/include/node_config_file.h +46 -0
  148. package/dist/node/include/node_constants.h +82 -0
  149. package/dist/node/include/node_context_data.h +168 -0
  150. package/dist/node/include/node_contextify.h +204 -0
  151. package/dist/node/include/node_crypto.h +56 -0
  152. package/dist/node/include/node_debug.h +30 -0
  153. package/dist/node/include/node_dir.h +52 -0
  154. package/dist/node/include/node_dotenv.h +45 -0
  155. package/dist/node/include/node_errors.h +380 -0
  156. package/dist/node/include/node_exit_code.h +54 -0
  157. package/dist/node/include/node_external_reference.h +165 -0
  158. package/dist/node/include/node_file-inl.h +406 -0
  159. package/dist/node/include/node_file.h +537 -0
  160. package/dist/node/include/node_http2.h +1177 -0
  161. package/dist/node/include/node_http2_state.h +159 -0
  162. package/dist/node/include/node_http_common-inl.h +202 -0
  163. package/dist/node/include/node_http_common.h +535 -0
  164. package/dist/node/include/node_i18n.h +132 -0
  165. package/dist/node/include/node_internals.h +483 -0
  166. package/dist/node/include/node_main_instance.h +67 -0
  167. package/dist/node/include/node_mem-inl.h +113 -0
  168. package/dist/node/include/node_mem.h +45 -0
  169. package/dist/node/include/node_messaging.h +389 -0
  170. package/dist/node/include/node_metadata.h +164 -0
  171. package/dist/node/include/node_modules.h +91 -0
  172. package/dist/node/include/node_mutex.h +323 -0
  173. package/dist/node/include/node_object_wrap.h +132 -0
  174. package/dist/node/include/node_options-inl.h +490 -0
  175. package/dist/node/include/node_options.h +615 -0
  176. package/dist/node/include/node_perf.h +166 -0
  177. package/dist/node/include/node_perf_common.h +102 -0
  178. package/dist/node/include/node_platform.h +238 -0
  179. package/dist/node/include/node_process-inl.h +26 -0
  180. package/dist/node/include/node_process.h +112 -0
  181. package/dist/node/include/node_realm-inl.h +151 -0
  182. package/dist/node/include/node_realm.h +183 -0
  183. package/dist/node/include/node_report.h +43 -0
  184. package/dist/node/include/node_revert.h +82 -0
  185. package/dist/node/include/node_root_certs.h +3520 -0
  186. package/dist/node/include/node_sea.h +74 -0
  187. package/dist/node/include/node_shadow_realm.h +46 -0
  188. package/dist/node/include/node_snapshot_builder.h +57 -0
  189. package/dist/node/include/node_snapshotable.h +174 -0
  190. package/dist/node/include/node_sockaddr-inl.h +257 -0
  191. package/dist/node/include/node_sockaddr.h +394 -0
  192. package/dist/node/include/node_sqlite.h +270 -0
  193. package/dist/node/include/node_stat_watcher.h +73 -0
  194. package/dist/node/include/node_task_runner.h +92 -0
  195. package/dist/node/include/node_threadsafe_cow-inl.h +54 -0
  196. package/dist/node/include/node_threadsafe_cow.h +105 -0
  197. package/dist/node/include/node_union_bytes.h +81 -0
  198. package/dist/node/include/node_url.h +96 -0
  199. package/dist/node/include/node_v8.h +77 -0
  200. package/dist/node/include/node_v8_platform-inl.h +185 -0
  201. package/dist/node/include/node_version.h +110 -0
  202. package/dist/node/include/node_wasi.h +184 -0
  203. package/dist/node/include/node_wasm_web_api.h +55 -0
  204. package/dist/node/include/node_watchdog.h +154 -0
  205. package/dist/node/include/node_webstorage.h +60 -0
  206. package/dist/node/include/node_worker.h +158 -0
  207. package/dist/node/include/path.h +33 -0
  208. package/dist/node/include/permission/addon_permission.h +31 -0
  209. package/dist/node/include/permission/child_process_permission.h +31 -0
  210. package/dist/node/include/permission/fs_permission.h +167 -0
  211. package/dist/node/include/permission/inspector_permission.h +31 -0
  212. package/dist/node/include/permission/permission.h +138 -0
  213. package/dist/node/include/permission/permission_base.h +65 -0
  214. package/dist/node/include/permission/wasi_permission.h +31 -0
  215. package/dist/node/include/permission/worker_permission.h +31 -0
  216. package/dist/node/include/pipe_wrap.h +80 -0
  217. package/dist/node/include/quic/application.h +159 -0
  218. package/dist/node/include/quic/bindingdata.h +272 -0
  219. package/dist/node/include/quic/cid.h +127 -0
  220. package/dist/node/include/quic/data.h +148 -0
  221. package/dist/node/include/quic/defs.h +245 -0
  222. package/dist/node/include/quic/endpoint.h +458 -0
  223. package/dist/node/include/quic/http3.h +15 -0
  224. package/dist/node/include/quic/logstream.h +81 -0
  225. package/dist/node/include/quic/packet.h +152 -0
  226. package/dist/node/include/quic/preferredaddress.h +72 -0
  227. package/dist/node/include/quic/session.h +443 -0
  228. package/dist/node/include/quic/sessionticket.h +108 -0
  229. package/dist/node/include/quic/streams.h +232 -0
  230. package/dist/node/include/quic/tlscontext.h +227 -0
  231. package/dist/node/include/quic/tokens.h +256 -0
  232. package/dist/node/include/quic/transportparams.h +165 -0
  233. package/dist/node/include/req_wrap-inl.h +171 -0
  234. package/dist/node/include/req_wrap.h +77 -0
  235. package/dist/node/include/spawn_sync.h +243 -0
  236. package/dist/node/include/stream_base-inl.h +173 -0
  237. package/dist/node/include/stream_base.h +478 -0
  238. package/dist/node/include/stream_pipe.h +76 -0
  239. package/dist/node/include/stream_wrap.h +132 -0
  240. package/dist/node/include/string_bytes.h +113 -0
  241. package/dist/node/include/string_decoder-inl.h +31 -0
  242. package/dist/node/include/string_decoder.h +49 -0
  243. package/dist/node/include/tcp_wrap.h +105 -0
  244. package/dist/node/include/threadpoolwork-inl.h +70 -0
  245. package/dist/node/include/timer_wrap-inl.h +32 -0
  246. package/dist/node/include/timer_wrap.h +85 -0
  247. package/dist/node/include/timers.h +70 -0
  248. package/dist/node/include/tracing/agent.h +195 -0
  249. package/dist/node/include/tracing/node_trace_buffer.h +83 -0
  250. package/dist/node/include/tracing/node_trace_writer.h +75 -0
  251. package/dist/node/include/tracing/trace_event.h +722 -0
  252. package/dist/node/include/tracing/trace_event_common.h +1109 -0
  253. package/dist/node/include/tracing/traced_value.h +129 -0
  254. package/dist/node/include/tty_wrap.h +65 -0
  255. package/dist/node/include/udp_wrap.h +230 -0
  256. package/dist/node/include/undici_version.h +6 -0
  257. package/dist/node/include/util-inl.h +700 -0
  258. package/dist/node/include/util.h +1021 -0
  259. package/dist/node/include/uv/aix.h +32 -0
  260. package/dist/node/include/uv/bsd.h +34 -0
  261. package/dist/node/include/uv/darwin.h +61 -0
  262. package/dist/node/include/uv/errno.h +483 -0
  263. package/dist/node/include/uv/linux.h +34 -0
  264. package/dist/node/include/uv/os390.h +33 -0
  265. package/dist/node/include/uv/posix.h +31 -0
  266. package/dist/node/include/uv/sunos.h +44 -0
  267. package/dist/node/include/uv/threadpool.h +37 -0
  268. package/dist/node/include/uv/tree.h +521 -0
  269. package/dist/node/include/uv/unix.h +512 -0
  270. package/dist/node/include/uv/version.h +43 -0
  271. package/dist/node/include/uv/win.h +698 -0
  272. package/dist/node/include/uv.h +1990 -0
  273. package/dist/node/include/v8-array-buffer.h +525 -0
  274. package/dist/node/include/v8-callbacks.h +462 -0
  275. package/dist/node/include/v8-container.h +183 -0
  276. package/dist/node/include/v8-context.h +485 -0
  277. package/dist/node/include/v8-cppgc.h +245 -0
  278. package/dist/node/include/v8-data.h +80 -0
  279. package/dist/node/include/v8-date.h +48 -0
  280. package/dist/node/include/v8-debug.h +168 -0
  281. package/dist/node/include/v8-embedder-heap.h +82 -0
  282. package/dist/node/include/v8-embedder-state-scope.h +52 -0
  283. package/dist/node/include/v8-exception.h +223 -0
  284. package/dist/node/include/v8-extension.h +62 -0
  285. package/dist/node/include/v8-external.h +37 -0
  286. package/dist/node/include/v8-fast-api-calls.h +984 -0
  287. package/dist/node/include/v8-forward.h +82 -0
  288. package/dist/node/include/v8-function-callback.h +607 -0
  289. package/dist/node/include/v8-function.h +140 -0
  290. package/dist/node/include/v8-handle-base.h +137 -0
  291. package/dist/node/include/v8-initialization.h +289 -0
  292. package/dist/node/include/v8-inspector-protocol.h +13 -0
  293. package/dist/node/include/v8-inspector.h +419 -0
  294. package/dist/node/include/v8-internal.h +1397 -0
  295. package/dist/node/include/v8-isolate.h +1767 -0
  296. package/dist/node/include/v8-json.h +47 -0
  297. package/dist/node/include/v8-local-handle.h +758 -0
  298. package/dist/node/include/v8-locker.h +138 -0
  299. package/dist/node/include/v8-maybe.h +160 -0
  300. package/dist/node/include/v8-memory-span.h +198 -0
  301. package/dist/node/include/v8-message.h +233 -0
  302. package/dist/node/include/v8-metrics.h +264 -0
  303. package/dist/node/include/v8-microtask-queue.h +157 -0
  304. package/dist/node/include/v8-microtask.h +28 -0
  305. package/dist/node/include/v8-object.h +824 -0
  306. package/dist/node/include/v8-persistent-handle.h +582 -0
  307. package/dist/node/include/v8-platform.h +1358 -0
  308. package/dist/node/include/v8-primitive-object.h +118 -0
  309. package/dist/node/include/v8-primitive.h +877 -0
  310. package/dist/node/include/v8-profiler.h +1302 -0
  311. package/dist/node/include/v8-promise.h +174 -0
  312. package/dist/node/include/v8-proxy.h +50 -0
  313. package/dist/node/include/v8-regexp.h +106 -0
  314. package/dist/node/include/v8-script.h +904 -0
  315. package/dist/node/include/v8-snapshot.h +266 -0
  316. package/dist/node/include/v8-source-location.h +92 -0
  317. package/dist/node/include/v8-statistics.h +238 -0
  318. package/dist/node/include/v8-template.h +1297 -0
  319. package/dist/node/include/v8-traced-handle.h +432 -0
  320. package/dist/node/include/v8-typed-array.h +390 -0
  321. package/dist/node/include/v8-unwinder-state.h +31 -0
  322. package/dist/node/include/v8-unwinder.h +132 -0
  323. package/dist/node/include/v8-util.h +665 -0
  324. package/dist/node/include/v8-value-serializer-version.h +24 -0
  325. package/dist/node/include/v8-value-serializer.h +316 -0
  326. package/dist/node/include/v8-value.h +655 -0
  327. package/dist/node/include/v8-version-string.h +38 -0
  328. package/dist/node/include/v8-version.h +20 -0
  329. package/dist/node/include/v8-wasm-trap-handler-posix.h +31 -0
  330. package/dist/node/include/v8-wasm-trap-handler-win.h +28 -0
  331. package/dist/node/include/v8-wasm.h +201 -0
  332. package/dist/node/include/v8-weak-callback-info.h +80 -0
  333. package/dist/node/include/v8.h +88 -0
  334. package/dist/node/include/v8config.h +981 -0
  335. package/dist/node/include/zlib_version.h +6 -0
  336. package/dist/node/libnode.dll +0 -0
  337. package/dist/node/libnode.lib +0 -0
  338. package/dist/node/libnodebuildinfo.json +10 -0
  339. package/dist/node/link_node.lib +0 -0
  340. package/dist/node/link_node.node +0 -0
  341. package/index.js +5 -0
  342. package/libnode.release.json +8 -0
  343. 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_