@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,655 @@
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_VALUE_H_
6
+ #define INCLUDE_V8_VALUE_H_
7
+
8
+ #include "v8-data.h" // NOLINT(build/include_directory)
9
+ #include "v8-internal.h" // NOLINT(build/include_directory)
10
+ #include "v8-local-handle.h" // NOLINT(build/include_directory)
11
+ #include "v8-maybe.h" // NOLINT(build/include_directory)
12
+ #include "v8config.h" // NOLINT(build/include_directory)
13
+
14
+ /**
15
+ * The v8 JavaScript engine.
16
+ */
17
+ namespace v8 {
18
+
19
+ class Primitive;
20
+ class Numeric;
21
+ class BigInt;
22
+ class Int32;
23
+ class Integer;
24
+ class Number;
25
+ class Object;
26
+ class String;
27
+ class Uint32;
28
+
29
+ /**
30
+ * The superclass of all JavaScript values and objects.
31
+ */
32
+ class V8_EXPORT Value : public Data {
33
+ public:
34
+ /**
35
+ * Returns true if this value is the undefined value. See ECMA-262
36
+ * 4.3.10.
37
+ *
38
+ * This is equivalent to `value === undefined` in JS.
39
+ */
40
+ V8_INLINE bool IsUndefined() const;
41
+
42
+ /**
43
+ * Returns true if this value is the null value. See ECMA-262
44
+ * 4.3.11.
45
+ *
46
+ * This is equivalent to `value === null` in JS.
47
+ */
48
+ V8_INLINE bool IsNull() const;
49
+
50
+ /**
51
+ * Returns true if this value is either the null or the undefined value.
52
+ * See ECMA-262
53
+ * 4.3.11. and 4.3.12
54
+ *
55
+ * This is equivalent to `value == null` in JS.
56
+ */
57
+ V8_INLINE bool IsNullOrUndefined() const;
58
+
59
+ /**
60
+ * Returns true if this value is true.
61
+ *
62
+ * This is not the same as `BooleanValue()`. The latter performs a
63
+ * conversion to boolean, i.e. the result of `Boolean(value)` in JS, whereas
64
+ * this checks `value === true`.
65
+ */
66
+ V8_INLINE bool IsTrue() const;
67
+
68
+ /**
69
+ * Returns true if this value is false.
70
+ *
71
+ * This is not the same as `!BooleanValue()`. The latter performs a
72
+ * conversion to boolean, i.e. the result of `!Boolean(value)` in JS, whereas
73
+ * this checks `value === false`.
74
+ */
75
+ V8_INLINE bool IsFalse() const;
76
+
77
+ /**
78
+ * Returns true if this value is a symbol or a string.
79
+ *
80
+ * This is equivalent to
81
+ * `typeof value === 'string' || typeof value === 'symbol'` in JS.
82
+ */
83
+ bool IsName() const;
84
+
85
+ /**
86
+ * Returns true if this value is an instance of the String type.
87
+ * See ECMA-262 8.4.
88
+ *
89
+ * This is equivalent to `typeof value === 'string'` in JS.
90
+ */
91
+ V8_INLINE bool IsString() const;
92
+
93
+ /**
94
+ * Returns true if this value is a symbol.
95
+ *
96
+ * This is equivalent to `typeof value === 'symbol'` in JS.
97
+ */
98
+ bool IsSymbol() const;
99
+
100
+ /**
101
+ * Returns true if this value is a function.
102
+ *
103
+ * This is equivalent to `typeof value === 'function'` in JS.
104
+ */
105
+ bool IsFunction() const;
106
+
107
+ /**
108
+ * Returns true if this value is an array. Note that it will return false for
109
+ * an Proxy for an array.
110
+ */
111
+ bool IsArray() const;
112
+
113
+ /**
114
+ * Returns true if this value is an object.
115
+ */
116
+ bool IsObject() const;
117
+
118
+ /**
119
+ * Returns true if this value is a bigint.
120
+ *
121
+ * This is equivalent to `typeof value === 'bigint'` in JS.
122
+ */
123
+ bool IsBigInt() const;
124
+
125
+ /**
126
+ * Returns true if this value is boolean.
127
+ *
128
+ * This is equivalent to `typeof value === 'boolean'` in JS.
129
+ */
130
+ bool IsBoolean() const;
131
+
132
+ /**
133
+ * Returns true if this value is a number.
134
+ *
135
+ * This is equivalent to `typeof value === 'number'` in JS.
136
+ */
137
+ bool IsNumber() const;
138
+
139
+ /**
140
+ * Returns true if this value is an `External` object.
141
+ */
142
+ bool IsExternal() const;
143
+
144
+ /**
145
+ * Returns true if this value is a 32-bit signed integer.
146
+ */
147
+ bool IsInt32() const;
148
+
149
+ /**
150
+ * Returns true if this value is a 32-bit unsigned integer.
151
+ */
152
+ bool IsUint32() const;
153
+
154
+ /**
155
+ * Returns true if this value is a Date.
156
+ */
157
+ bool IsDate() const;
158
+
159
+ /**
160
+ * Returns true if this value is an Arguments object.
161
+ */
162
+ bool IsArgumentsObject() const;
163
+
164
+ /**
165
+ * Returns true if this value is a BigInt object.
166
+ */
167
+ bool IsBigIntObject() const;
168
+
169
+ /**
170
+ * Returns true if this value is a Boolean object.
171
+ */
172
+ bool IsBooleanObject() const;
173
+
174
+ /**
175
+ * Returns true if this value is a Number object.
176
+ */
177
+ bool IsNumberObject() const;
178
+
179
+ /**
180
+ * Returns true if this value is a String object.
181
+ */
182
+ bool IsStringObject() const;
183
+
184
+ /**
185
+ * Returns true if this value is a Symbol object.
186
+ */
187
+ bool IsSymbolObject() const;
188
+
189
+ /**
190
+ * Returns true if this value is a NativeError.
191
+ */
192
+ bool IsNativeError() const;
193
+
194
+ /**
195
+ * Returns true if this value is a RegExp.
196
+ */
197
+ bool IsRegExp() const;
198
+
199
+ /**
200
+ * Returns true if this value is an async function.
201
+ */
202
+ bool IsAsyncFunction() const;
203
+
204
+ /**
205
+ * Returns true if this value is a Generator function.
206
+ */
207
+ bool IsGeneratorFunction() const;
208
+
209
+ /**
210
+ * Returns true if this value is a Generator object (iterator).
211
+ */
212
+ bool IsGeneratorObject() const;
213
+
214
+ /**
215
+ * Returns true if this value is a Promise.
216
+ */
217
+ bool IsPromise() const;
218
+
219
+ /**
220
+ * Returns true if this value is a Map.
221
+ */
222
+ bool IsMap() const;
223
+
224
+ /**
225
+ * Returns true if this value is a Set.
226
+ */
227
+ bool IsSet() const;
228
+
229
+ /**
230
+ * Returns true if this value is a Map Iterator.
231
+ */
232
+ bool IsMapIterator() const;
233
+
234
+ /**
235
+ * Returns true if this value is a Set Iterator.
236
+ */
237
+ bool IsSetIterator() const;
238
+
239
+ /**
240
+ * Returns true if this value is a WeakMap.
241
+ */
242
+ bool IsWeakMap() const;
243
+
244
+ /**
245
+ * Returns true if this value is a WeakSet.
246
+ */
247
+ bool IsWeakSet() const;
248
+
249
+ /**
250
+ * Returns true if this value is a WeakRef.
251
+ */
252
+ bool IsWeakRef() const;
253
+
254
+ /**
255
+ * Returns true if this value is an ArrayBuffer.
256
+ */
257
+ bool IsArrayBuffer() const;
258
+
259
+ /**
260
+ * Returns true if this value is an ArrayBufferView.
261
+ */
262
+ bool IsArrayBufferView() const;
263
+
264
+ /**
265
+ * Returns true if this value is one of TypedArrays.
266
+ */
267
+ bool IsTypedArray() const;
268
+
269
+ /**
270
+ * Returns true if this value is an Uint8Array.
271
+ */
272
+ bool IsUint8Array() const;
273
+
274
+ /**
275
+ * Returns true if this value is an Uint8ClampedArray.
276
+ */
277
+ bool IsUint8ClampedArray() const;
278
+
279
+ /**
280
+ * Returns true if this value is an Int8Array.
281
+ */
282
+ bool IsInt8Array() const;
283
+
284
+ /**
285
+ * Returns true if this value is an Uint16Array.
286
+ */
287
+ bool IsUint16Array() const;
288
+
289
+ /**
290
+ * Returns true if this value is an Int16Array.
291
+ */
292
+ bool IsInt16Array() const;
293
+
294
+ /**
295
+ * Returns true if this value is an Uint32Array.
296
+ */
297
+ bool IsUint32Array() const;
298
+
299
+ /**
300
+ * Returns true if this value is an Int32Array.
301
+ */
302
+ bool IsInt32Array() const;
303
+
304
+ /**
305
+ * Returns true if this value is a Float16Array.
306
+ */
307
+ bool IsFloat16Array() const;
308
+
309
+ /**
310
+ * Returns true if this value is a Float32Array.
311
+ */
312
+ bool IsFloat32Array() const;
313
+
314
+ /**
315
+ * Returns true if this value is a Float64Array.
316
+ */
317
+ bool IsFloat64Array() const;
318
+
319
+ /**
320
+ * Returns true if this value is a BigInt64Array.
321
+ */
322
+ bool IsBigInt64Array() const;
323
+
324
+ /**
325
+ * Returns true if this value is a BigUint64Array.
326
+ */
327
+ bool IsBigUint64Array() const;
328
+
329
+ /**
330
+ * Returns true if this value is a DataView.
331
+ */
332
+ bool IsDataView() const;
333
+
334
+ /**
335
+ * Returns true if this value is a SharedArrayBuffer.
336
+ */
337
+ bool IsSharedArrayBuffer() const;
338
+
339
+ /**
340
+ * Returns true if this value is a JavaScript Proxy.
341
+ */
342
+ bool IsProxy() const;
343
+
344
+ /**
345
+ * Returns true if this value is a WasmMemoryObject.
346
+ */
347
+ bool IsWasmMemoryObject() const;
348
+
349
+ /**
350
+ * Returns true if this value is a WasmModuleObject.
351
+ */
352
+ bool IsWasmModuleObject() const;
353
+
354
+ /**
355
+ * Returns true if this value is the WasmNull object.
356
+ */
357
+ bool IsWasmNull() const;
358
+
359
+ /**
360
+ * Returns true if the value is a Module Namespace Object.
361
+ */
362
+ bool IsModuleNamespaceObject() const;
363
+
364
+ /**
365
+ * Perform `ToPrimitive(value)` as specified in:
366
+ * https://tc39.es/ecma262/#sec-toprimitive.
367
+ */
368
+ V8_WARN_UNUSED_RESULT MaybeLocal<Primitive> ToPrimitive(
369
+ Local<Context> context) const;
370
+ /**
371
+ * Perform `ToNumeric(value)` as specified in:
372
+ * https://tc39.es/ecma262/#sec-tonumeric.
373
+ */
374
+ V8_WARN_UNUSED_RESULT MaybeLocal<Numeric> ToNumeric(
375
+ Local<Context> context) const;
376
+ /**
377
+ * Perform the equivalent of `BigInt(value)` in JS.
378
+ */
379
+ V8_WARN_UNUSED_RESULT MaybeLocal<BigInt> ToBigInt(
380
+ Local<Context> context) const;
381
+ /**
382
+ * Perform the equivalent of `Number(value)` in JS.
383
+ */
384
+ V8_WARN_UNUSED_RESULT MaybeLocal<Number> ToNumber(
385
+ Local<Context> context) const;
386
+ /**
387
+ * Perform the equivalent of `String(value)` in JS.
388
+ */
389
+ V8_WARN_UNUSED_RESULT MaybeLocal<String> ToString(
390
+ Local<Context> context) const;
391
+ /**
392
+ * Provide a string representation of this value usable for debugging.
393
+ * This operation has no observable side effects and will succeed
394
+ * unless e.g. execution is being terminated.
395
+ */
396
+ V8_WARN_UNUSED_RESULT MaybeLocal<String> ToDetailString(
397
+ Local<Context> context) const;
398
+ /**
399
+ * Perform the equivalent of `Tagged<Object>(value)` in JS.
400
+ */
401
+ V8_WARN_UNUSED_RESULT MaybeLocal<Object> ToObject(
402
+ Local<Context> context) const;
403
+ /**
404
+ * Perform the equivalent of `Number(value)` in JS and convert the result
405
+ * to an integer. Negative values are rounded up, positive values are rounded
406
+ * down. NaN is converted to 0. Infinite values yield undefined results.
407
+ */
408
+ V8_WARN_UNUSED_RESULT MaybeLocal<Integer> ToInteger(
409
+ Local<Context> context) const;
410
+ /**
411
+ * Perform the equivalent of `Number(value)` in JS and convert the result
412
+ * to an unsigned 32-bit integer by performing the steps in
413
+ * https://tc39.es/ecma262/#sec-touint32.
414
+ */
415
+ V8_WARN_UNUSED_RESULT MaybeLocal<Uint32> ToUint32(
416
+ Local<Context> context) const;
417
+ /**
418
+ * Perform the equivalent of `Number(value)` in JS and convert the result
419
+ * to a signed 32-bit integer by performing the steps in
420
+ * https://tc39.es/ecma262/#sec-toint32.
421
+ */
422
+ V8_WARN_UNUSED_RESULT MaybeLocal<Int32> ToInt32(Local<Context> context) const;
423
+
424
+ /**
425
+ * Perform the equivalent of `Boolean(value)` in JS. This can never fail.
426
+ */
427
+ Local<Boolean> ToBoolean(Isolate* isolate) const;
428
+
429
+ /**
430
+ * Attempts to convert a string to an array index.
431
+ * Returns an empty handle if the conversion fails.
432
+ */
433
+ V8_WARN_UNUSED_RESULT MaybeLocal<Uint32> ToArrayIndex(
434
+ Local<Context> context) const;
435
+
436
+ /** Returns the equivalent of `ToBoolean()->Value()`. */
437
+ bool BooleanValue(Isolate* isolate) const;
438
+
439
+ /** Returns the equivalent of `ToNumber()->Value()`. */
440
+ V8_WARN_UNUSED_RESULT Maybe<double> NumberValue(Local<Context> context) const;
441
+ /** Returns the equivalent of `ToInteger()->Value()`. */
442
+ V8_WARN_UNUSED_RESULT Maybe<int64_t> IntegerValue(
443
+ Local<Context> context) const;
444
+ /** Returns the equivalent of `ToUint32()->Value()`. */
445
+ V8_WARN_UNUSED_RESULT Maybe<uint32_t> Uint32Value(
446
+ Local<Context> context) const;
447
+ /** Returns the equivalent of `ToInt32()->Value()`. */
448
+ V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
449
+
450
+ /** JS == */
451
+ V8_WARN_UNUSED_RESULT Maybe<bool> Equals(Local<Context> context,
452
+ Local<Value> that) const;
453
+ bool StrictEquals(Local<Value> that) const;
454
+ bool SameValue(Local<Value> that) const;
455
+
456
+ template <class T>
457
+ V8_INLINE static Value* Cast(T* value) {
458
+ return static_cast<Value*>(value);
459
+ }
460
+
461
+ Local<String> TypeOf(Isolate*);
462
+
463
+ Maybe<bool> InstanceOf(Local<Context> context, Local<Object> object);
464
+
465
+ private:
466
+ V8_INLINE bool QuickIsUndefined() const;
467
+ V8_INLINE bool QuickIsNull() const;
468
+ V8_INLINE bool QuickIsNullOrUndefined() const;
469
+ #if V8_STATIC_ROOTS_BOOL
470
+ V8_INLINE bool QuickIsTrue() const;
471
+ V8_INLINE bool QuickIsFalse() const;
472
+ #endif // V8_STATIC_ROOTS_BOOL
473
+ V8_INLINE bool QuickIsString() const;
474
+ bool FullIsUndefined() const;
475
+ bool FullIsNull() const;
476
+ bool FullIsTrue() const;
477
+ bool FullIsFalse() const;
478
+ bool FullIsString() const;
479
+
480
+ static void CheckCast(Data* that);
481
+ };
482
+
483
+ /**
484
+ * Can be used to avoid repeated expensive type checks for groups of objects
485
+ * that are expected to be similar (e.g. when Blink converts a bunch of
486
+ * JavaScript objects to "ScriptWrappable" after a "HasInstance" check) by
487
+ * making use of V8-internal "hidden classes". An object that has passed the
488
+ * full check can be remembered via {Update}; further objects can be queried
489
+ * using {Matches}.
490
+ * Note that the answer will be conservative/"best-effort": when {Matches}
491
+ * returns true, then the {candidate} can be relied upon to have the same
492
+ * shape/constructor/prototype/etc. as the {baseline}. Otherwise, no reliable
493
+ * statement can be made (the objects might still have indistinguishable shapes
494
+ * for all intents and purposes, but this mechanism, being optimized for speed,
495
+ * couldn't determine that quickly).
496
+ */
497
+ class V8_EXPORT TypecheckWitness {
498
+ public:
499
+ explicit TypecheckWitness(Isolate* isolate);
500
+
501
+ /**
502
+ * Checks whether {candidate} can cheaply be identified as being "similar"
503
+ * to the {baseline} that was passed to {Update} earlier.
504
+ * It's safe to call this on an uninitialized {TypecheckWitness} instance:
505
+ * it will then return {false} for any input.
506
+ */
507
+ V8_INLINE bool Matches(Local<Value> candidate) const;
508
+
509
+ /**
510
+ * Remembers a new baseline for future {Matches} queries.
511
+ */
512
+ void Update(Local<Value> baseline);
513
+
514
+ private:
515
+ Local<Data> cached_map_;
516
+ };
517
+
518
+ template <>
519
+ V8_INLINE Value* Value::Cast(Data* value) {
520
+ #ifdef V8_ENABLE_CHECKS
521
+ CheckCast(value);
522
+ #endif
523
+ return static_cast<Value*>(value);
524
+ }
525
+
526
+ bool Value::IsUndefined() const {
527
+ #ifdef V8_ENABLE_CHECKS
528
+ return FullIsUndefined();
529
+ #else
530
+ return QuickIsUndefined();
531
+ #endif
532
+ }
533
+
534
+ bool Value::QuickIsUndefined() const {
535
+ using A = internal::Address;
536
+ using I = internal::Internals;
537
+ A obj = internal::ValueHelper::ValueAsAddress(this);
538
+ #if V8_STATIC_ROOTS_BOOL
539
+ return I::is_identical(obj, I::StaticReadOnlyRoot::kUndefinedValue);
540
+ #else
541
+ if (!I::HasHeapObjectTag(obj)) return false;
542
+ if (I::GetInstanceType(obj) != I::kOddballType) return false;
543
+ return (I::GetOddballKind(obj) == I::kUndefinedOddballKind);
544
+ #endif // V8_STATIC_ROOTS_BOOL
545
+ }
546
+
547
+ bool Value::IsNull() const {
548
+ #ifdef V8_ENABLE_CHECKS
549
+ return FullIsNull();
550
+ #else
551
+ return QuickIsNull();
552
+ #endif
553
+ }
554
+
555
+ bool Value::QuickIsNull() const {
556
+ using A = internal::Address;
557
+ using I = internal::Internals;
558
+ A obj = internal::ValueHelper::ValueAsAddress(this);
559
+ #if V8_STATIC_ROOTS_BOOL
560
+ return I::is_identical(obj, I::StaticReadOnlyRoot::kNullValue);
561
+ #else
562
+ if (!I::HasHeapObjectTag(obj)) return false;
563
+ if (I::GetInstanceType(obj) != I::kOddballType) return false;
564
+ return (I::GetOddballKind(obj) == I::kNullOddballKind);
565
+ #endif // V8_STATIC_ROOTS_BOOL
566
+ }
567
+
568
+ bool Value::IsNullOrUndefined() const {
569
+ #ifdef V8_ENABLE_CHECKS
570
+ return FullIsNull() || FullIsUndefined();
571
+ #else
572
+ return QuickIsNullOrUndefined();
573
+ #endif
574
+ }
575
+
576
+ bool Value::QuickIsNullOrUndefined() const {
577
+ #if V8_STATIC_ROOTS_BOOL
578
+ return QuickIsNull() || QuickIsUndefined();
579
+ #else
580
+ using A = internal::Address;
581
+ using I = internal::Internals;
582
+ A obj = internal::ValueHelper::ValueAsAddress(this);
583
+ if (!I::HasHeapObjectTag(obj)) return false;
584
+ if (I::GetInstanceType(obj) != I::kOddballType) return false;
585
+ int kind = I::GetOddballKind(obj);
586
+ return kind == I::kNullOddballKind || kind == I::kUndefinedOddballKind;
587
+ #endif // V8_STATIC_ROOTS_BOOL
588
+ }
589
+
590
+ bool Value::IsTrue() const {
591
+ #if V8_STATIC_ROOTS_BOOL && !defined(V8_ENABLE_CHECKS)
592
+ return QuickIsTrue();
593
+ #else
594
+ return FullIsTrue();
595
+ #endif
596
+ }
597
+
598
+ #if V8_STATIC_ROOTS_BOOL
599
+ bool Value::QuickIsTrue() const {
600
+ using A = internal::Address;
601
+ using I = internal::Internals;
602
+ A obj = internal::ValueHelper::ValueAsAddress(this);
603
+ return I::is_identical(obj, I::StaticReadOnlyRoot::kTrueValue);
604
+ }
605
+ #endif // V8_STATIC_ROOTS_BOOL
606
+
607
+ bool Value::IsFalse() const {
608
+ #if V8_STATIC_ROOTS_BOOL && !defined(V8_ENABLE_CHECKS)
609
+ return QuickIsFalse();
610
+ #else
611
+ return FullIsFalse();
612
+ #endif
613
+ }
614
+
615
+ #if V8_STATIC_ROOTS_BOOL
616
+ bool Value::QuickIsFalse() const {
617
+ using A = internal::Address;
618
+ using I = internal::Internals;
619
+ A obj = internal::ValueHelper::ValueAsAddress(this);
620
+ return I::is_identical(obj, I::StaticReadOnlyRoot::kFalseValue);
621
+ }
622
+ #endif // V8_STATIC_ROOTS_BOOL
623
+
624
+ bool Value::IsString() const {
625
+ #ifdef V8_ENABLE_CHECKS
626
+ return FullIsString();
627
+ #else
628
+ return QuickIsString();
629
+ #endif
630
+ }
631
+
632
+ bool Value::QuickIsString() const {
633
+ using A = internal::Address;
634
+ using I = internal::Internals;
635
+ A obj = internal::ValueHelper::ValueAsAddress(this);
636
+ if (!I::HasHeapObjectTag(obj)) return false;
637
+ #if V8_STATIC_ROOTS_BOOL && !V8_MAP_PACKING
638
+ return I::CheckInstanceMapRange(obj, I::StaticReadOnlyRoot::kFirstStringMap,
639
+ I::StaticReadOnlyRoot::kLastStringMap);
640
+ #else
641
+ return (I::GetInstanceType(obj) < I::kFirstNonstringType);
642
+ #endif // V8_STATIC_ROOTS_BOOL
643
+ }
644
+
645
+ bool TypecheckWitness::Matches(Local<Value> candidate) const {
646
+ internal::Address obj = internal::ValueHelper::ValueAsAddress(*candidate);
647
+ internal::Address obj_map = internal::Internals::LoadMap(obj);
648
+ internal::Address cached =
649
+ internal::ValueHelper::ValueAsAddress(*cached_map_);
650
+ return obj_map == cached;
651
+ }
652
+
653
+ } // namespace v8
654
+
655
+ #endif // INCLUDE_V8_VALUE_H_
@@ -0,0 +1,38 @@
1
+ // Copyright 2017 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 V8_VERSION_STRING_H_
6
+ #define V8_VERSION_STRING_H_
7
+
8
+ #include "v8-version.h" // NOLINT(build/include_directory)
9
+
10
+ // This is here rather than v8-version.h to keep that file simple and
11
+ // machine-processable.
12
+
13
+ #if V8_IS_CANDIDATE_VERSION
14
+ #define V8_CANDIDATE_STRING " (candidate)"
15
+ #else
16
+ #define V8_CANDIDATE_STRING ""
17
+ #endif
18
+
19
+ #ifndef V8_EMBEDDER_STRING
20
+ #define V8_EMBEDDER_STRING ""
21
+ #endif
22
+
23
+ #define V8_SX(x) #x
24
+ #define V8_S(x) V8_SX(x)
25
+
26
+ #if V8_PATCH_LEVEL > 0
27
+ #define V8_VERSION_STRING \
28
+ V8_S(V8_MAJOR_VERSION) \
29
+ "." V8_S(V8_MINOR_VERSION) "." V8_S(V8_BUILD_NUMBER) "." V8_S( \
30
+ V8_PATCH_LEVEL) V8_EMBEDDER_STRING V8_CANDIDATE_STRING
31
+ #else
32
+ #define V8_VERSION_STRING \
33
+ V8_S(V8_MAJOR_VERSION) \
34
+ "." V8_S(V8_MINOR_VERSION) "." V8_S(V8_BUILD_NUMBER) \
35
+ V8_EMBEDDER_STRING V8_CANDIDATE_STRING
36
+ #endif
37
+
38
+ #endif // V8_VERSION_STRING_H_
@@ -0,0 +1,20 @@
1
+ // Copyright 2015 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 V8_INCLUDE_VERSION_H_ // V8_VERSION_H_ conflicts with src/version.h
6
+ #define V8_INCLUDE_VERSION_H_
7
+
8
+ // These macros define the version number for the current version.
9
+ // NOTE these macros are used by some of the tool scripts and the build
10
+ // system so their names cannot be changed without changing the scripts.
11
+ #define V8_MAJOR_VERSION 12
12
+ #define V8_MINOR_VERSION 4
13
+ #define V8_BUILD_NUMBER 254
14
+ #define V8_PATCH_LEVEL 21
15
+
16
+ // Use 1 for candidates and 0 otherwise.
17
+ // (Boolean macro values are not supported by all preprocessors.)
18
+ #define V8_IS_CANDIDATE_VERSION 0
19
+
20
+ #endif // V8_INCLUDE_VERSION_H_