/src/node/deps/v8/include/v8-internal.h
Line | Count | Source |
1 | | // Copyright 2018 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_INTERNAL_H_ |
6 | | #define INCLUDE_V8_INTERNAL_H_ |
7 | | |
8 | | #include <stddef.h> |
9 | | #include <stdint.h> |
10 | | #include <string.h> |
11 | | |
12 | | #include <atomic> |
13 | | #include <compare> |
14 | | #include <concepts> |
15 | | #include <iterator> |
16 | | #include <limits> |
17 | | #include <memory> |
18 | | #include <optional> |
19 | | #include <type_traits> |
20 | | |
21 | | #include "v8config.h" // NOLINT(build/include_directory) |
22 | | |
23 | | namespace v8 { |
24 | | |
25 | | class Array; |
26 | | class Context; |
27 | | class Data; |
28 | | class Isolate; |
29 | | |
30 | | namespace internal { |
31 | | |
32 | | class Heap; |
33 | | class LocalHeap; |
34 | | class Isolate; |
35 | | class IsolateGroup; |
36 | | class LocalIsolate; |
37 | | |
38 | | typedef uintptr_t Address; |
39 | | static constexpr Address kNullAddress = 0; |
40 | | |
41 | | constexpr int KB = 1024; |
42 | | constexpr int MB = KB * 1024; |
43 | | constexpr int GB = MB * 1024; |
44 | | #ifdef V8_TARGET_ARCH_X64 |
45 | | constexpr size_t TB = size_t{GB} * 1024; |
46 | | #endif |
47 | | |
48 | | /** |
49 | | * Configuration of tagging scheme. |
50 | | */ |
51 | | const int kApiSystemPointerSize = sizeof(void*); |
52 | | const int kApiDoubleSize = sizeof(double); |
53 | | const int kApiInt32Size = sizeof(int32_t); |
54 | | const int kApiInt64Size = sizeof(int64_t); |
55 | | const int kApiSizetSize = sizeof(size_t); |
56 | | |
57 | | // Tag information for HeapObject. |
58 | | const int kHeapObjectTag = 1; |
59 | | const int kWeakHeapObjectTag = 3; |
60 | | const int kHeapObjectTagSize = 2; |
61 | | const intptr_t kHeapObjectTagMask = (1 << kHeapObjectTagSize) - 1; |
62 | | const intptr_t kHeapObjectReferenceTagMask = 1 << (kHeapObjectTagSize - 1); |
63 | | |
64 | | // Tag information for fowarding pointers stored in object headers. |
65 | | // 0b00 at the lowest 2 bits in the header indicates that the map word is a |
66 | | // forwarding pointer. |
67 | | const int kForwardingTag = 0; |
68 | | const int kForwardingTagSize = 2; |
69 | | const intptr_t kForwardingTagMask = (1 << kForwardingTagSize) - 1; |
70 | | |
71 | | // Tag information for Smi. |
72 | | const int kSmiTag = 0; |
73 | | const int kSmiTagSize = 1; |
74 | | const intptr_t kSmiTagMask = (1 << kSmiTagSize) - 1; |
75 | | |
76 | | template <size_t tagged_ptr_size> |
77 | | struct SmiTagging; |
78 | | |
79 | | constexpr intptr_t kIntptrAllBitsSet = intptr_t{-1}; |
80 | | constexpr uintptr_t kUintptrAllBitsSet = |
81 | | static_cast<uintptr_t>(kIntptrAllBitsSet); |
82 | | |
83 | | // Smi constants for systems where tagged pointer is a 32-bit value. |
84 | | template <> |
85 | | struct SmiTagging<4> { |
86 | | enum { kSmiShiftSize = 0, kSmiValueSize = 31 }; |
87 | | |
88 | | static constexpr intptr_t kSmiMinValue = |
89 | | static_cast<intptr_t>(kUintptrAllBitsSet << (kSmiValueSize - 1)); |
90 | | static constexpr intptr_t kSmiMaxValue = -(kSmiMinValue + 1); |
91 | | |
92 | 0 | V8_INLINE static constexpr int SmiToInt(Address value) { |
93 | 0 | int shift_bits = kSmiTagSize + kSmiShiftSize; |
94 | 0 | // Truncate and shift down (requires >> to be sign extending). |
95 | 0 | return static_cast<int32_t>(static_cast<uint32_t>(value)) >> shift_bits; |
96 | 0 | } |
97 | | |
98 | | template <class T, typename std::enable_if_t<std::is_integral_v<T> && |
99 | | std::is_signed_v<T>>* = nullptr> |
100 | | V8_INLINE static constexpr bool IsValidSmi(T value) { |
101 | | // Is value in range [kSmiMinValue, kSmiMaxValue]. |
102 | | // Use unsigned operations in order to avoid undefined behaviour in case of |
103 | | // signed integer overflow. |
104 | | return (static_cast<uintptr_t>(value) - |
105 | | static_cast<uintptr_t>(kSmiMinValue)) <= |
106 | | (static_cast<uintptr_t>(kSmiMaxValue) - |
107 | | static_cast<uintptr_t>(kSmiMinValue)); |
108 | | } |
109 | | |
110 | | template <class T, |
111 | | typename std::enable_if_t<std::is_integral_v<T> && |
112 | | std::is_unsigned_v<T>>* = nullptr> |
113 | | V8_INLINE static constexpr bool IsValidSmi(T value) { |
114 | | static_assert(kSmiMaxValue <= std::numeric_limits<uintptr_t>::max()); |
115 | | return value <= static_cast<uintptr_t>(kSmiMaxValue); |
116 | | } |
117 | | |
118 | | // Same as the `intptr_t` version but works with int64_t on 32-bit builds |
119 | | // without slowing down anything else. |
120 | 0 | V8_INLINE static constexpr bool IsValidSmi(int64_t value) { |
121 | 0 | return (static_cast<uint64_t>(value) - |
122 | 0 | static_cast<uint64_t>(kSmiMinValue)) <= |
123 | 0 | (static_cast<uint64_t>(kSmiMaxValue) - |
124 | 0 | static_cast<uint64_t>(kSmiMinValue)); |
125 | 0 | } |
126 | | |
127 | 0 | V8_INLINE static constexpr bool IsValidSmi(uint64_t value) { |
128 | 0 | static_assert(kSmiMaxValue <= std::numeric_limits<uint64_t>::max()); |
129 | 0 | return value <= static_cast<uint64_t>(kSmiMaxValue); |
130 | 0 | } |
131 | | }; |
132 | | |
133 | | // Smi constants for systems where tagged pointer is a 64-bit value. |
134 | | template <> |
135 | | struct SmiTagging<8> { |
136 | | enum { kSmiShiftSize = 31, kSmiValueSize = 32 }; |
137 | | |
138 | | static constexpr intptr_t kSmiMinValue = |
139 | | static_cast<intptr_t>(kUintptrAllBitsSet << (kSmiValueSize - 1)); |
140 | | static constexpr intptr_t kSmiMaxValue = -(kSmiMinValue + 1); |
141 | | |
142 | 0 | V8_INLINE static constexpr int SmiToInt(Address value) { |
143 | 0 | int shift_bits = kSmiTagSize + kSmiShiftSize; |
144 | | // Shift down and throw away top 32 bits. |
145 | 0 | return static_cast<int>(static_cast<intptr_t>(value) >> shift_bits); |
146 | 0 | } |
147 | | |
148 | | template <class T, typename std::enable_if_t<std::is_integral_v<T> && |
149 | | std::is_signed_v<T>>* = nullptr> |
150 | 0 | V8_INLINE static constexpr bool IsValidSmi(T value) { |
151 | | // To be representable as a long smi, the value must be a 32-bit integer. |
152 | 0 | return std::numeric_limits<int32_t>::min() <= value && |
153 | 0 | value <= std::numeric_limits<int32_t>::max(); |
154 | 0 | } Unexecuted instantiation: _ZN2v88internal10SmiTaggingILm8EE10IsValidSmiIsTnPNSt3__19enable_ifIXaasr3stdE13is_integral_vIT_Esr3stdE11is_signed_vIS6_EEvE4typeELPv0EEEbS6_ Unexecuted instantiation: _ZN2v88internal10SmiTaggingILm8EE10IsValidSmiIiTnPNSt3__19enable_ifIXaasr3stdE13is_integral_vIT_Esr3stdE11is_signed_vIS6_EEvE4typeELPv0EEEbS6_ Unexecuted instantiation: _ZN2v88internal10SmiTaggingILm8EE10IsValidSmiIlTnPNSt3__19enable_ifIXaasr3stdE13is_integral_vIT_Esr3stdE11is_signed_vIS6_EEvE4typeELPv0EEEbS6_ |
155 | | |
156 | | template <class T, |
157 | | typename std::enable_if_t<std::is_integral_v<T> && |
158 | | std::is_unsigned_v<T>>* = nullptr> |
159 | 35 | V8_INLINE static constexpr bool IsValidSmi(T value) { |
160 | 35 | return value <= std::numeric_limits<int32_t>::max(); |
161 | 35 | } Unexecuted instantiation: _ZN2v88internal10SmiTaggingILm8EE10IsValidSmiItTnPNSt3__19enable_ifIXaasr3stdE13is_integral_vIT_Esr3stdE13is_unsigned_vIS6_EEvE4typeELPv0EEEbS6_ _ZN2v88internal10SmiTaggingILm8EE10IsValidSmiIjTnPNSt3__19enable_ifIXaasr3stdE13is_integral_vIT_Esr3stdE13is_unsigned_vIS6_EEvE4typeELPv0EEEbS6_ Line | Count | Source | 159 | 35 | V8_INLINE static constexpr bool IsValidSmi(T value) { | 160 | 35 | return value <= std::numeric_limits<int32_t>::max(); | 161 | 35 | } |
Unexecuted instantiation: _ZN2v88internal10SmiTaggingILm8EE10IsValidSmiImTnPNSt3__19enable_ifIXaasr3stdE13is_integral_vIT_Esr3stdE13is_unsigned_vIS6_EEvE4typeELPv0EEEbS6_ |
162 | | }; |
163 | | |
164 | | #ifdef V8_COMPRESS_POINTERS |
165 | | // See v8:7703 or src/common/ptr-compr-inl.h for details about pointer |
166 | | // compression. |
167 | | constexpr size_t kPtrComprCageReservationSize = size_t{1} << 32; |
168 | | constexpr size_t kPtrComprCageBaseAlignment = size_t{1} << 32; |
169 | | |
170 | | static_assert( |
171 | | kApiSystemPointerSize == kApiInt64Size, |
172 | | "Pointer compression can be enabled only for 64-bit architectures"); |
173 | | const int kApiTaggedSize = kApiInt32Size; |
174 | | #else |
175 | | const int kApiTaggedSize = kApiSystemPointerSize; |
176 | | #endif |
177 | | |
178 | 0 | constexpr bool PointerCompressionIsEnabled() { |
179 | 0 | return kApiTaggedSize != kApiSystemPointerSize; |
180 | 0 | } |
181 | | |
182 | | #ifdef V8_31BIT_SMIS_ON_64BIT_ARCH |
183 | | using PlatformSmiTagging = SmiTagging<kApiInt32Size>; |
184 | | #else |
185 | | using PlatformSmiTagging = SmiTagging<kApiTaggedSize>; |
186 | | #endif |
187 | | |
188 | | // TODO(ishell): Consinder adding kSmiShiftBits = kSmiShiftSize + kSmiTagSize |
189 | | // since it's used much more often than the inividual constants. |
190 | | const int kSmiShiftSize = PlatformSmiTagging::kSmiShiftSize; |
191 | | const int kSmiValueSize = PlatformSmiTagging::kSmiValueSize; |
192 | | const int kSmiMinValue = static_cast<int>(PlatformSmiTagging::kSmiMinValue); |
193 | | const int kSmiMaxValue = static_cast<int>(PlatformSmiTagging::kSmiMaxValue); |
194 | 0 | constexpr bool SmiValuesAre31Bits() { return kSmiValueSize == 31; } |
195 | 0 | constexpr bool SmiValuesAre32Bits() { return kSmiValueSize == 32; } |
196 | 0 | constexpr bool Is64() { return kApiSystemPointerSize == sizeof(int64_t); } |
197 | | |
198 | 0 | V8_INLINE static constexpr Address IntToSmi(int value) { |
199 | 0 | return (static_cast<Address>(value) << (kSmiTagSize + kSmiShiftSize)) | |
200 | 0 | kSmiTag; |
201 | 0 | } Unexecuted instantiation: node_snapshot_stub.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_common.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_sign_verify.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: environment.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: hooks.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: async_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: base_object.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: cleanup_queue.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: env.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: heap_utils.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: module_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_api.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_binding.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_blob.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_buffer.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_builtins.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_config.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_config_file.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_constants.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_contextify.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_credentials.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_dir.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_dotenv.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_env_var.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_errors.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_file.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_http_parser.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_http2.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_i18n.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_locks.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_main_instance.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_messaging.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_metadata.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_modules.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_options.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_os.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_perf.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_platform.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_process_events.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_process_methods.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_process_object.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_realm.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_report.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_report_module.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_report_utils.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_sea.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_serdes.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_shadow_realm.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_snapshotable.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_sockaddr.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_stat_watcher.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_symbols.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_task_queue.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_task_runner.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_trace_events.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_types.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_url.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_url_pattern.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_util.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_v8.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_wasi.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_wasm_web_api.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_watchdog.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_worker.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_zlib.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: path.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: permission.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: wasi_permission.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: worker_permission.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: net_permission.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: addon_permission.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: pipe_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: process_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: signal_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: spawn_sync.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: stream_base.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: stream_pipe.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: stream_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: string_bytes.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: string_decoder.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: tcp_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: timers.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: agent.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_trace_buffer.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_trace_writer.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: trace_event.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: traced_value.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: tty_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: udp_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: util.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: uv.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: quic.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: cppgc_helpers.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_large_page.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_sqlite.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_webstorage.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: inspector_agent.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: inspector_io.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: inspector_profiler.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: inspector_js_api.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: inspector_socket_server.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: main_thread_interface.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_json.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_string.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: runtime_agent.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: tracing_agent.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: worker_agent.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: network_inspector.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: network_agent.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: target_agent.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: worker_inspector.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: io_agent.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: network_resource_manager.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_context.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_util.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_keys.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_tls.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_x509.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_crypto.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_javascript.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: Protocol.cpp:v8::internal::IntToSmi(int) Unexecuted instantiation: NodeWorker.cpp:v8::internal::IntToSmi(int) Unexecuted instantiation: NodeTracing.cpp:v8::internal::IntToSmi(int) Unexecuted instantiation: NodeRuntime.cpp:v8::internal::IntToSmi(int) Unexecuted instantiation: Network.cpp:v8::internal::IntToSmi(int) Unexecuted instantiation: Target.cpp:v8::internal::IntToSmi(int) Unexecuted instantiation: IO.cpp:v8::internal::IntToSmi(int) Unexecuted instantiation: async_resource.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: callback.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: embed_helpers.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: encoding.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: exceptions.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: utils.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: async_context_frame.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: cares_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: compile_cache.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: connect_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: connection_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: queue.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: debug_utils.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: encoding_binding.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fs_event_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: handle_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: histogram.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: internal_only_v8.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: js_native_api_v8.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: js_stream.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: js_udp_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: node_external_reference.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: child_process_permission.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fs_permission.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: inspector_permission.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: timer_wrap.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: bindingdata.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: endpoint.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: http3.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: session.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: streams.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: tlscontext.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: transportparams.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: inspector_socket.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_aes.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_argon2.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_bio.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_chacha20_poly1305.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_common.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_dsa.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_hkdf.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_pbkdf2.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_sig.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_timing.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_cipher.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_ec.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_ml_dsa.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_kem.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_hmac.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_kmac.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_random.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_rsa.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_spkac.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_clienthello.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_dh.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_hash.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_keygen.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: crypto_scrypt.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: cid.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: data.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: logstream.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: packet.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: preferredaddress.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: sessionticket.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: tokens.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: application.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_path_resolve.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_createPrivateKeyDER.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_querystring_parse.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_path_relative.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_tls_socket_request.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_createPrivateKeyJWK.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_buffer_equals.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_path_toNamespacedPath.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_fs_write_open_read.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_path_isAbsolute.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_zlib_brotliDecompress.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_diffieHellmanJWK.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_zlib_createBrotliDecompress.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_ClientHelloParser.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_path_basename.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_strings.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_string_decoder.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_path_parse.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_blob.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_diffieHellmanPEM.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_path_join.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_path_extname.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_path_format.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_path_dirname.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_buffer_compare.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_stream1.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_zlib_gzip_createUnzip.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_createPrivateKeyPEM.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_fs_write_read_append.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_path_normalize.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_zlib_brotliCompress.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_httpparser1.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_x509.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_diffieHellmanDER.cc:v8::internal::IntToSmi(int) Unexecuted instantiation: fuzz_buffer_includes.cc:v8::internal::IntToSmi(int) |
202 | | |
203 | | /* |
204 | | * Sandbox related types, constants, and functions. |
205 | | */ |
206 | 0 | constexpr bool SandboxIsEnabled() { |
207 | 0 | #ifdef V8_ENABLE_SANDBOX |
208 | 0 | return true; |
209 | 0 | #else |
210 | 0 | return false; |
211 | 0 | #endif |
212 | 0 | } |
213 | | |
214 | | // SandboxedPointers are guaranteed to point into the sandbox. This is achieved |
215 | | // for example by storing them as offset rather than as raw pointers. |
216 | | using SandboxedPointer_t = Address; |
217 | | |
218 | | #ifdef V8_ENABLE_SANDBOX |
219 | | |
220 | | // Size of the sandbox, excluding the guard regions surrounding it. |
221 | | #if defined(V8_TARGET_OS_ANDROID) |
222 | | // On Android, most 64-bit devices seem to be configured with only 39 bits of |
223 | | // virtual address space for userspace. As such, limit the sandbox to 128GB (a |
224 | | // quarter of the total available address space). |
225 | | constexpr size_t kSandboxSizeLog2 = 37; // 128 GB |
226 | | #elif defined(V8_TARGET_OS_IOS) |
227 | | // On iOS, we only get 64 GB of usable virtual address space even with the |
228 | | // "jumbo" extended virtual addressing entitlement. Limit the sandbox size to |
229 | | // 16 GB so that the base address + size for the emulated virtual address space |
230 | | // lies within the 64 GB total virtual address space. |
231 | | constexpr size_t kSandboxSizeLog2 = 34; // 16 GB |
232 | | #else |
233 | | // Everywhere else use a 1TB sandbox. |
234 | | constexpr size_t kSandboxSizeLog2 = 40; // 1 TB |
235 | | #endif // V8_TARGET_OS_ANDROID |
236 | | constexpr size_t kSandboxSize = 1ULL << kSandboxSizeLog2; |
237 | | |
238 | | // Required alignment of the sandbox. For simplicity, we require the |
239 | | // size of the guard regions to be a multiple of this, so that this specifies |
240 | | // the alignment of the sandbox including and excluding surrounding guard |
241 | | // regions. The alignment requirement is due to the pointer compression cage |
242 | | // being located at the start of the sandbox. |
243 | | constexpr size_t kSandboxAlignment = kPtrComprCageBaseAlignment; |
244 | | |
245 | | // Sandboxed pointers are stored inside the heap as offset from the sandbox |
246 | | // base shifted to the left. This way, it is guaranteed that the offset is |
247 | | // smaller than the sandbox size after shifting it to the right again. This |
248 | | // constant specifies the shift amount. |
249 | | constexpr uint64_t kSandboxedPointerShift = 64 - kSandboxSizeLog2; |
250 | | |
251 | | // Size of the guard regions surrounding the sandbox. This assumes a worst-case |
252 | | // scenario of a 32-bit unsigned index used to access an array of 64-bit values |
253 | | // with an additional 4GB (compressed pointer) offset. In particular, accesses |
254 | | // to TypedArrays are effectively computed as |
255 | | // `entry_pointer = array->base + array->offset + index * array->element_size`. |
256 | | // See also https://crbug.com/40070746 for more details. |
257 | | constexpr size_t kSandboxGuardRegionSize = 32ULL * GB + 4ULL * GB; |
258 | | |
259 | | static_assert((kSandboxGuardRegionSize % kSandboxAlignment) == 0, |
260 | | "The size of the guard regions around the sandbox must be a " |
261 | | "multiple of its required alignment."); |
262 | | |
263 | | // On OSes where reserving virtual memory is too expensive to reserve the |
264 | | // entire address space backing the sandbox, notably Windows pre 8.1, we create |
265 | | // a partially reserved sandbox that doesn't actually reserve most of the |
266 | | // memory, and so doesn't have the desired security properties as unrelated |
267 | | // memory allocations could end up inside of it, but which still ensures that |
268 | | // objects that should be located inside the sandbox are allocated within |
269 | | // kSandboxSize bytes from the start of the sandbox. The minimum size of the |
270 | | // region that is actually reserved for such a sandbox is specified by this |
271 | | // constant and should be big enough to contain the pointer compression cage as |
272 | | // well as the ArrayBuffer partition. |
273 | | constexpr size_t kSandboxMinimumReservationSize = 8ULL * GB; |
274 | | |
275 | | static_assert(kSandboxMinimumReservationSize > kPtrComprCageReservationSize, |
276 | | "The minimum reservation size for a sandbox must be larger than " |
277 | | "the pointer compression cage contained within it."); |
278 | | |
279 | | // The maximum buffer size allowed inside the sandbox. This is mostly dependent |
280 | | // on the size of the guard regions around the sandbox: an attacker must not be |
281 | | // able to construct a buffer that appears larger than the guard regions and |
282 | | // thereby "reach out of" the sandbox. |
283 | | constexpr size_t kMaxSafeBufferSizeForSandbox = 32ULL * GB - 1; |
284 | | static_assert(kMaxSafeBufferSizeForSandbox <= kSandboxGuardRegionSize, |
285 | | "The maximum allowed buffer size must not be larger than the " |
286 | | "sandbox's guard regions"); |
287 | | |
288 | | constexpr size_t kBoundedSizeShift = 29; |
289 | | static_assert(1ULL << (64 - kBoundedSizeShift) == |
290 | | kMaxSafeBufferSizeForSandbox + 1, |
291 | | "The maximum size of a BoundedSize must be synchronized with the " |
292 | | "kMaxSafeBufferSizeForSandbox"); |
293 | | |
294 | | #endif // V8_ENABLE_SANDBOX |
295 | | |
296 | | #ifdef V8_COMPRESS_POINTERS |
297 | | |
298 | | #ifdef V8_TARGET_OS_ANDROID |
299 | | // The size of the virtual memory reservation for an external pointer table. |
300 | | // This determines the maximum number of entries in a table. Using a maximum |
301 | | // size allows omitting bounds checks on table accesses if the indices are |
302 | | // guaranteed (e.g. through shifting) to be below the maximum index. This |
303 | | // value must be a power of two. |
304 | | constexpr size_t kExternalPointerTableReservationSize = 256 * MB; |
305 | | |
306 | | // The external pointer table indices stored in HeapObjects as external |
307 | | // pointers are shifted to the left by this amount to guarantee that they are |
308 | | // smaller than the maximum table size even after the C++ compiler multiplies |
309 | | // them by 8 to be used as indexes into a table of 64 bit pointers. |
310 | | constexpr uint32_t kExternalPointerIndexShift = 7; |
311 | | #else |
312 | | constexpr size_t kExternalPointerTableReservationSize = 512 * MB; |
313 | | constexpr uint32_t kExternalPointerIndexShift = 6; |
314 | | #endif // V8_TARGET_OS_ANDROID |
315 | | |
316 | | // The maximum number of entries in an external pointer table. |
317 | | constexpr int kExternalPointerTableEntrySize = 8; |
318 | | constexpr int kExternalPointerTableEntrySizeLog2 = 3; |
319 | | constexpr size_t kMaxExternalPointers = |
320 | | kExternalPointerTableReservationSize / kExternalPointerTableEntrySize; |
321 | | static_assert((1 << (32 - kExternalPointerIndexShift)) == kMaxExternalPointers, |
322 | | "kExternalPointerTableReservationSize and " |
323 | | "kExternalPointerIndexShift don't match"); |
324 | | |
325 | | #else // !V8_COMPRESS_POINTERS |
326 | | |
327 | | // Needed for the V8.SandboxedExternalPointersCount histogram. |
328 | | constexpr size_t kMaxExternalPointers = 0; |
329 | | |
330 | | #endif // V8_COMPRESS_POINTERS |
331 | | |
332 | | constexpr uint64_t kExternalPointerMarkBit = 1ULL << 48; |
333 | | constexpr uint64_t kExternalPointerTagShift = 49; |
334 | | constexpr uint64_t kExternalPointerTagMask = 0x00fe000000000000ULL; |
335 | | constexpr uint64_t kExternalPointerShiftedTagMask = |
336 | | kExternalPointerTagMask >> kExternalPointerTagShift; |
337 | | static_assert(kExternalPointerShiftedTagMask << kExternalPointerTagShift == |
338 | | kExternalPointerTagMask); |
339 | | constexpr uint64_t kExternalPointerTagAndMarkbitMask = 0x00ff000000000000ULL; |
340 | | constexpr uint64_t kExternalPointerPayloadMask = 0xff00ffffffffffffULL; |
341 | | |
342 | | // A ExternalPointerHandle represents a (opaque) reference to an external |
343 | | // pointer that can be stored inside the sandbox. A ExternalPointerHandle has |
344 | | // meaning only in combination with an (active) Isolate as it references an |
345 | | // external pointer stored in the currently active Isolate's |
346 | | // ExternalPointerTable. Internally, an ExternalPointerHandles is simply an |
347 | | // index into an ExternalPointerTable that is shifted to the left to guarantee |
348 | | // that it is smaller than the size of the table. |
349 | | using ExternalPointerHandle = uint32_t; |
350 | | |
351 | | // ExternalPointers point to objects located outside the sandbox. When the V8 |
352 | | // sandbox is enabled, these are stored on heap as ExternalPointerHandles, |
353 | | // otherwise they are simply raw pointers. |
354 | | #ifdef V8_ENABLE_SANDBOX |
355 | | using ExternalPointer_t = ExternalPointerHandle; |
356 | | #else |
357 | | using ExternalPointer_t = Address; |
358 | | #endif |
359 | | |
360 | | constexpr ExternalPointer_t kNullExternalPointer = 0; |
361 | | constexpr ExternalPointerHandle kNullExternalPointerHandle = 0; |
362 | | |
363 | | // See `ExternalPointerHandle` for the main documentation. The difference to |
364 | | // `ExternalPointerHandle` is that the handle does not represent an arbitrary |
365 | | // external pointer but always refers to an object managed by `CppHeap`. The |
366 | | // handles are using in combination with a dedicated table for `CppHeap` |
367 | | // references. |
368 | | using CppHeapPointerHandle = uint32_t; |
369 | | |
370 | | // The actual pointer to objects located on the `CppHeap`. When pointer |
371 | | // compression is enabled these pointers are stored as `CppHeapPointerHandle`. |
372 | | // In non-compressed configurations the pointers are simply stored as raw |
373 | | // pointers. |
374 | | #ifdef V8_COMPRESS_POINTERS |
375 | | using CppHeapPointer_t = CppHeapPointerHandle; |
376 | | #else |
377 | | using CppHeapPointer_t = Address; |
378 | | #endif |
379 | | |
380 | | constexpr CppHeapPointer_t kNullCppHeapPointer = 0; |
381 | | constexpr CppHeapPointerHandle kNullCppHeapPointerHandle = 0; |
382 | | |
383 | | constexpr uint64_t kCppHeapPointerMarkBit = 1ULL; |
384 | | constexpr uint64_t kCppHeapPointerTagShift = 1; |
385 | | constexpr uint64_t kCppHeapPointerPayloadShift = 16; |
386 | | |
387 | | #ifdef V8_COMPRESS_POINTERS |
388 | | // CppHeapPointers use a dedicated pointer table. These constants control the |
389 | | // size and layout of the table. See the corresponding constants for the |
390 | | // external pointer table for further details. |
391 | | constexpr size_t kCppHeapPointerTableReservationSize = |
392 | | kExternalPointerTableReservationSize; |
393 | | constexpr uint32_t kCppHeapPointerIndexShift = kExternalPointerIndexShift; |
394 | | |
395 | | constexpr int kCppHeapPointerTableEntrySize = 8; |
396 | | constexpr int kCppHeapPointerTableEntrySizeLog2 = 3; |
397 | | constexpr size_t kMaxCppHeapPointers = |
398 | | kCppHeapPointerTableReservationSize / kCppHeapPointerTableEntrySize; |
399 | | static_assert((1 << (32 - kCppHeapPointerIndexShift)) == kMaxCppHeapPointers, |
400 | | "kCppHeapPointerTableReservationSize and " |
401 | | "kCppHeapPointerIndexShift don't match"); |
402 | | |
403 | | #else // !V8_COMPRESS_POINTERS |
404 | | |
405 | | // Needed for the V8.SandboxedCppHeapPointersCount histogram. |
406 | | constexpr size_t kMaxCppHeapPointers = 0; |
407 | | |
408 | | #endif // V8_COMPRESS_POINTERS |
409 | | |
410 | | // The number of tags reserved for embedder data stored in internal fields. The |
411 | | // value is picked arbitrarily, and is slightly larger than the number of tags |
412 | | // currently used in Chrome. |
413 | | #define V8_EMBEDDER_DATA_TAG_COUNT 15 |
414 | | |
415 | | // The number of tags reserved for pointers stored in v8::External. The value is |
416 | | // picked arbitrarily, and is slightly larger than the number of tags currently |
417 | | // used in Chrome. |
418 | | #define V8_EXTERNAL_POINTER_TAG_COUNT 40 |
419 | | |
420 | | // Generic tag range struct to represent ranges of type tags. |
421 | | // |
422 | | // When referencing external objects via pointer tables, type tags are |
423 | | // frequently necessary to guarantee type safety for the external objects. When |
424 | | // support for subtyping is necessary, range-based type checks are used in |
425 | | // which all subtypes of a given supertype use contiguous tags. This struct can |
426 | | // then be used to represent such a type range. |
427 | | // |
428 | | // In addition, there is an option for performance tweaks: if the size of the |
429 | | // type range corresponding to a supertype is a power of two and starts at a |
430 | | // power of two (e.g. [0x100, 0x13f]), then the compiler can often optimize |
431 | | // the type check to use even fewer instructions (essentially replace a AND + |
432 | | // SUB with a single AND). |
433 | | // |
434 | | template <typename Tag> |
435 | | struct TagRange { |
436 | | static_assert(std::is_enum_v<Tag> && |
437 | | std::is_same_v<std::underlying_type_t<Tag>, uint16_t>, |
438 | | "Tag parameter must be an enum with base type uint16_t"); |
439 | | |
440 | | // Construct the inclusive tag range [first, last]. |
441 | | constexpr TagRange(Tag first, Tag last) : first(first), last(last) {} |
442 | | |
443 | | // Construct a tag range consisting of a single tag. |
444 | | // |
445 | | // A single tag is always implicitly convertible to a tag range. This greatly |
446 | | // increases readability as most of the time, the exact tag of a field is |
447 | | // known and so no tag range needs to explicitly be created for it. |
448 | | constexpr TagRange(Tag tag) // NOLINT(runtime/explicit) |
449 | 1.72M | : first(tag), last(tag) {} |
450 | | |
451 | | // Construct an empty tag range. |
452 | | constexpr TagRange() : TagRange(static_cast<Tag>(0)) {} |
453 | | |
454 | | // A tag range is considered empty if it only contains the null tag. |
455 | | constexpr bool IsEmpty() const { return first == 0 && last == 0; } |
456 | | |
457 | | constexpr size_t Size() const { |
458 | | if (IsEmpty()) { |
459 | | return 0; |
460 | | } else { |
461 | | return last - first + 1; |
462 | | } |
463 | | } |
464 | | |
465 | 0 | constexpr bool Contains(Tag tag) const { |
466 | 0 | // Need to perform the math with uint32_t. Otherwise, the uint16_ts would |
467 | 0 | // be promoted to (signed) int, allowing the compiler to (wrongly) assume |
468 | 0 | // that an underflow cannot happen as that would be undefined behavior. |
469 | 0 | return static_cast<uint32_t>(tag) - first <= |
470 | 0 | static_cast<uint32_t>(last) - first; |
471 | 0 | } |
472 | | |
473 | 0 | constexpr bool Contains(TagRange tag_range) const { |
474 | 0 | return tag_range.first >= first && tag_range.last <= last; |
475 | 0 | } |
476 | | |
477 | | constexpr bool operator==(const TagRange other) const { |
478 | | return first == other.first && last == other.last; |
479 | | } |
480 | | |
481 | | constexpr size_t hash_value() const { |
482 | | static_assert(std::is_same_v<std::underlying_type_t<Tag>, uint16_t>); |
483 | | return (static_cast<size_t>(first) << 16) | last; |
484 | | } |
485 | | |
486 | | // Internally we represent tag ranges as half-open ranges [first, last). |
487 | | const Tag first; |
488 | | const Tag last; |
489 | | }; |
490 | | |
491 | | // |
492 | | // External Pointers. |
493 | | // |
494 | | // When the sandbox is enabled, external pointers are stored in an external |
495 | | // pointer table and are referenced from HeapObjects through an index (a |
496 | | // "handle"). When stored in the table, the pointers are tagged with per-type |
497 | | // tags to prevent type confusion attacks between different external objects. |
498 | | // |
499 | | // When loading an external pointer, a range of allowed tags can be specified. |
500 | | // This way, type hierarchies can be supported. The main requirement for that |
501 | | // is that all (transitive) child classes of a given parent class have type ids |
502 | | // in the same range, and that there are no unrelated types in that range. For |
503 | | // more details about how to assign type tags to types, see the TagRange class. |
504 | | // |
505 | | // The external pointer sandboxing mechanism ensures that every access to an |
506 | | // external pointer field will result in a valid pointer of the expected type |
507 | | // even in the presence of an attacker able to corrupt memory inside the |
508 | | // sandbox. However, if any data related to the external object is stored |
509 | | // inside the sandbox it may still be corrupted and so must be validated before |
510 | | // use or moved into the external object. Further, an attacker will always be |
511 | | // able to substitute different external pointers of the same type for each |
512 | | // other. Therefore, code using external pointers must be written in a |
513 | | // "substitution-safe" way, i.e. it must always be possible to substitute |
514 | | // external pointers of the same type without causing memory corruption outside |
515 | | // of the sandbox. Generally this is achieved by referencing any group of |
516 | | // related external objects through a single external pointer. |
517 | | // |
518 | | // Currently we use bit 62 for the marking bit which should always be unused as |
519 | | // it's part of the non-canonical address range. When Arm's top-byte ignore |
520 | | // (TBI) is enabled, this bit will be part of the ignored byte, and we assume |
521 | | // that the Embedder is not using this byte (really only this one bit) for any |
522 | | // other purpose. This bit also does not collide with the memory tagging |
523 | | // extension (MTE) which would use bits [56, 60). |
524 | | // |
525 | | // External pointer tables are also available even when the sandbox is off but |
526 | | // pointer compression is on. In that case, the mechanism can be used to ease |
527 | | // alignment requirements as it turns unaligned 64-bit raw pointers into |
528 | | // aligned 32-bit indices. To "opt-in" to the external pointer table mechanism |
529 | | // for this purpose, instead of using the ExternalPointer accessors one needs to |
530 | | // use ExternalPointerHandles directly and use them to access the pointers in an |
531 | | // ExternalPointerTable. |
532 | | // |
533 | | // The tag is currently in practice limited to 15 bits since it needs to fit |
534 | | // together with a marking bit into the unused parts of a pointer. |
535 | | enum ExternalPointerTag : uint16_t { |
536 | | kFirstExternalPointerTag = 0, |
537 | | kExternalPointerNullTag = 0, |
538 | | |
539 | | // When adding new tags, please ensure that the code using these tags is |
540 | | // "substitution-safe", i.e. still operate safely if external pointers of the |
541 | | // same type are swapped by an attacker. See comment above for more details. |
542 | | |
543 | | // Shared external pointers are owned by the shared Isolate and stored in the |
544 | | // shared external pointer table associated with that Isolate, where they can |
545 | | // be accessed from multiple threads at the same time. The objects referenced |
546 | | // in this way must therefore always be thread-safe. |
547 | | kFirstSharedExternalPointerTag, |
548 | | kWaiterQueueNodeTag = kFirstSharedExternalPointerTag, |
549 | | kExternalStringResourceTag, |
550 | | kExternalStringResourceDataTag, |
551 | | kLastSharedExternalPointerTag = kExternalStringResourceDataTag, |
552 | | |
553 | | // External pointers using these tags are kept in a per-Isolate external |
554 | | // pointer table and can only be accessed when this Isolate is active. |
555 | | kNativeContextMicrotaskQueueTag, |
556 | | |
557 | | // Placeholders for embedder data. |
558 | | kFirstEmbedderDataTag, |
559 | | kLastEmbedderDataTag = kFirstEmbedderDataTag + V8_EMBEDDER_DATA_TAG_COUNT - 1, |
560 | | |
561 | | // Placeholders for pointers store in v8::External. |
562 | | kFirstExternalTypeTag, |
563 | | kLastExternalTypeTag = |
564 | | kFirstExternalTypeTag + V8_EXTERNAL_POINTER_TAG_COUNT - 1, |
565 | | // This tag is used when a fast-api callback as a parameter of type |
566 | | // `kPointer`. The V8 fast API is only able to use this generic tag, and is |
567 | | // therefore not supposed to be used in Chrome. |
568 | | kFastApiExternalTypeTag = kLastExternalTypeTag, |
569 | | kFirstMaybeReadOnlyExternalPointerTag, |
570 | | kFunctionTemplateInfoCallbackTag = kFirstMaybeReadOnlyExternalPointerTag, |
571 | | kAccessorInfoGetterTag, |
572 | | kAccessorInfoSetterTag, |
573 | | |
574 | | // InterceptorInfo external pointers. |
575 | | kFirstInterceptorInfoExternalPointerTag, |
576 | | kApiNamedPropertyQueryCallbackTag = kFirstInterceptorInfoExternalPointerTag, |
577 | | kApiNamedPropertyGetterCallbackTag, |
578 | | kApiNamedPropertySetterCallbackTag, |
579 | | kApiNamedPropertyDescriptorCallbackTag, |
580 | | kApiNamedPropertyDefinerCallbackTag, |
581 | | kApiNamedPropertyDeleterCallbackTag, |
582 | | kApiNamedPropertyEnumeratorCallbackTag, |
583 | | kApiIndexedPropertyQueryCallbackTag, |
584 | | kApiIndexedPropertyGetterCallbackTag, |
585 | | kApiIndexedPropertySetterCallbackTag, |
586 | | kApiIndexedPropertyDescriptorCallbackTag, |
587 | | kApiIndexedPropertyDefinerCallbackTag, |
588 | | kApiIndexedPropertyDeleterCallbackTag, |
589 | | kApiIndexedPropertyEnumeratorCallbackTag, |
590 | | kLastInterceptorInfoExternalPointerTag = |
591 | | kApiIndexedPropertyEnumeratorCallbackTag, |
592 | | |
593 | | kLastMaybeReadOnlyExternalPointerTag = kLastInterceptorInfoExternalPointerTag, |
594 | | |
595 | | kWasmStackMemoryTag, |
596 | | |
597 | | // Foreigns |
598 | | kFirstForeignExternalPointerTag, |
599 | | kGenericForeignTag = kFirstForeignExternalPointerTag, |
600 | | |
601 | | kApiAccessCheckCallbackTag, |
602 | | kApiAbortScriptExecutionCallbackTag, |
603 | | kSyntheticModuleTag, |
604 | | kMicrotaskCallbackTag, |
605 | | kMicrotaskCallbackDataTag, |
606 | | kCFunctionTag, |
607 | | kCFunctionInfoTag, |
608 | | kMessageListenerTag, |
609 | | kWaiterQueueForeignTag, |
610 | | |
611 | | // Managed |
612 | | kFirstManagedResourceTag, |
613 | | kFirstManagedExternalPointerTag = kFirstManagedResourceTag, |
614 | | kGenericManagedTag = kFirstManagedExternalPointerTag, |
615 | | kWasmWasmStreamingTag, |
616 | | kWasmFuncDataTag, |
617 | | kWasmManagedDataTag, |
618 | | kWasmNativeModuleTag, |
619 | | kIcuBreakIteratorTag, |
620 | | kIcuUnicodeStringTag, |
621 | | kIcuListFormatterTag, |
622 | | kIcuLocaleTag, |
623 | | kIcuSimpleDateFormatTag, |
624 | | kIcuDateIntervalFormatTag, |
625 | | kIcuRelativeDateTimeFormatterTag, |
626 | | kIcuLocalizedNumberFormatterTag, |
627 | | kIcuPluralRulesTag, |
628 | | kIcuCollatorTag, |
629 | | kTemporalDurationTag, |
630 | | kTemporalInstantTag, |
631 | | kTemporalPlainDateTag, |
632 | | kTemporalPlainTimeTag, |
633 | | kTemporalPlainDateTimeTag, |
634 | | kTemporalPlainYearMonthTag, |
635 | | kTemporalPlainMonthDayTag, |
636 | | kTemporalZonedDateTimeTag, |
637 | | kDisplayNamesInternalTag, |
638 | | kD8WorkerTag, |
639 | | kD8ModuleEmbedderDataTag, |
640 | | kLastForeignExternalPointerTag = kD8ModuleEmbedderDataTag, |
641 | | kLastManagedExternalPointerTag = kLastForeignExternalPointerTag, |
642 | | // External resources whose lifetime is tied to their entry in the external |
643 | | // pointer table but which are not referenced via a Managed |
644 | | kArrayBufferExtensionTag, |
645 | | kLastManagedResourceTag = kArrayBufferExtensionTag, |
646 | | |
647 | | kExternalPointerZappedEntryTag = 0x7d, |
648 | | kExternalPointerEvacuationEntryTag = 0x7e, |
649 | | kExternalPointerFreeEntryTag = 0x7f, |
650 | | // The tags are limited to 7 bits, so the last tag is 0x7f. |
651 | | kLastExternalPointerTag = 0x7f, |
652 | | }; |
653 | | |
654 | | using ExternalPointerTagRange = TagRange<ExternalPointerTag>; |
655 | | |
656 | | constexpr ExternalPointerTagRange kAnyExternalPointerTagRange( |
657 | | kFirstExternalPointerTag, kLastExternalPointerTag); |
658 | | constexpr ExternalPointerTagRange kAnySharedExternalPointerTagRange( |
659 | | kFirstSharedExternalPointerTag, kLastSharedExternalPointerTag); |
660 | | constexpr ExternalPointerTagRange kAnyForeignExternalPointerTagRange( |
661 | | kFirstForeignExternalPointerTag, kLastForeignExternalPointerTag); |
662 | | constexpr ExternalPointerTagRange kAnyInterceptorInfoExternalPointerTagRange( |
663 | | kFirstInterceptorInfoExternalPointerTag, |
664 | | kLastInterceptorInfoExternalPointerTag); |
665 | | constexpr ExternalPointerTagRange kAnyManagedExternalPointerTagRange( |
666 | | kFirstManagedExternalPointerTag, kLastManagedExternalPointerTag); |
667 | | constexpr ExternalPointerTagRange kAnyMaybeReadOnlyExternalPointerTagRange( |
668 | | kFirstMaybeReadOnlyExternalPointerTag, |
669 | | kLastMaybeReadOnlyExternalPointerTag); |
670 | | constexpr ExternalPointerTagRange kAnyManagedResourceExternalPointerTag( |
671 | | kFirstManagedResourceTag, kLastManagedResourceTag); |
672 | | |
673 | | // True if the external pointer must be accessed from the shared isolate's |
674 | | // external pointer table. |
675 | | V8_INLINE static constexpr bool IsSharedExternalPointerType( |
676 | 0 | ExternalPointerTagRange tag_range) { |
677 | 0 | return kAnySharedExternalPointerTagRange.Contains(tag_range); |
678 | 0 | } Unexecuted instantiation: node_snapshot_stub.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_common.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_sign_verify.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: environment.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: hooks.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: base_object.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cleanup_queue.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: env.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: heap_utils.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: module_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_api.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_binding.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_blob.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_buffer.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_builtins.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_config.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_config_file.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_constants.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_contextify.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_credentials.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_dir.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_dotenv.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_env_var.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_errors.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_file.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_http_parser.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_http2.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_i18n.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_locks.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_main_instance.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_messaging.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_metadata.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_modules.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_options.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_os.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_perf.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_platform.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_events.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_methods.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_object.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_realm.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report_module.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report_utils.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sea.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_serdes.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_shadow_realm.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_snapshotable.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sockaddr.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_stat_watcher.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_symbols.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_task_queue.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_task_runner.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_events.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_types.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_url.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_url_pattern.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_util.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_v8.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_wasi.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_wasm_web_api.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_watchdog.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_worker.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_zlib.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: path.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: permission.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: wasi_permission.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_permission.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: net_permission.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: addon_permission.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: pipe_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: process_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: signal_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: spawn_sync.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_base.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_pipe.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: string_bytes.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: string_decoder.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tcp_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: timers.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: agent.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_buffer.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_writer.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: trace_event.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: traced_value.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tty_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: udp_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: util.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: uv.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: quic.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cppgc_helpers.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_large_page.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sqlite.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_webstorage.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_agent.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_io.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_profiler.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_js_api.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_socket_server.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: main_thread_interface.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_json.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_string.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: runtime_agent.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tracing_agent.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_agent.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_inspector.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_agent.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: target_agent.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_inspector.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: io_agent.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_resource_manager.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_context.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_util.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_keys.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_tls.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_x509.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_crypto.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_javascript.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Protocol.cpp:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeWorker.cpp:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeTracing.cpp:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeRuntime.cpp:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Network.cpp:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Target.cpp:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: IO.cpp:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_resource.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: callback.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: embed_helpers.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: encoding.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: exceptions.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: utils.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_context_frame.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cares_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: compile_cache.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: connect_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: connection_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: queue.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: debug_utils.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: encoding_binding.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fs_event_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: handle_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: histogram.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: internal_only_v8.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_native_api_v8.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_stream.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_udp_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_external_reference.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: child_process_permission.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fs_permission.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_permission.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: timer_wrap.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: bindingdata.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: endpoint.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: http3.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: session.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: streams.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tlscontext.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: transportparams.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_socket.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_aes.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_argon2.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_bio.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_chacha20_poly1305.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_common.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_dsa.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hkdf.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_pbkdf2.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_sig.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_timing.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_cipher.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_ec.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_ml_dsa.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_kem.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hmac.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_kmac.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_random.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_rsa.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_spkac.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_clienthello.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_dh.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hash.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_keygen.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_scrypt.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cid.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: data.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: logstream.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: packet.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: preferredaddress.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: sessionticket.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tokens.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: application.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_resolve.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyDER.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_querystring_parse.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_relative.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_tls_socket_request.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyJWK.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_equals.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_toNamespacedPath.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_fs_write_open_read.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_isAbsolute.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_brotliDecompress.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanJWK.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_createBrotliDecompress.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_ClientHelloParser.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_basename.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_strings.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_string_decoder.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_parse.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_blob.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanPEM.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_join.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_extname.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_format.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_dirname.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_compare.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_stream1.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_gzip_createUnzip.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyPEM.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_fs_write_read_append.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_normalize.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_brotliCompress.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_httpparser1.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_x509.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanDER.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_includes.cc:v8::internal::IsSharedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) |
679 | | |
680 | | // True if the external pointer may live in a read-only object, in which case |
681 | | // the table entry will be in the shared read-only segment of the external |
682 | | // pointer table. |
683 | | V8_INLINE static constexpr bool IsMaybeReadOnlyExternalPointerType( |
684 | 0 | ExternalPointerTagRange tag_range) { |
685 | 0 | return kAnyMaybeReadOnlyExternalPointerTagRange.Contains(tag_range); |
686 | 0 | } Unexecuted instantiation: node_snapshot_stub.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_common.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_sign_verify.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: environment.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: hooks.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: base_object.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cleanup_queue.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: env.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: heap_utils.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: module_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_api.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_binding.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_blob.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_buffer.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_builtins.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_config.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_config_file.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_constants.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_contextify.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_credentials.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_dir.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_dotenv.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_env_var.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_errors.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_file.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_http_parser.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_http2.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_i18n.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_locks.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_main_instance.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_messaging.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_metadata.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_modules.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_options.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_os.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_perf.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_platform.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_events.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_methods.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_object.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_realm.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report_module.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report_utils.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sea.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_serdes.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_shadow_realm.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_snapshotable.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sockaddr.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_stat_watcher.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_symbols.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_task_queue.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_task_runner.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_events.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_types.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_url.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_url_pattern.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_util.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_v8.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_wasi.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_wasm_web_api.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_watchdog.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_worker.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_zlib.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: path.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: permission.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: wasi_permission.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_permission.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: net_permission.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: addon_permission.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: pipe_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: process_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: signal_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: spawn_sync.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_base.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_pipe.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: string_bytes.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: string_decoder.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tcp_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: timers.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: agent.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_buffer.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_writer.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: trace_event.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: traced_value.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tty_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: udp_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: util.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: uv.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: quic.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cppgc_helpers.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_large_page.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sqlite.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_webstorage.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_agent.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_io.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_profiler.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_js_api.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_socket_server.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: main_thread_interface.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_json.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_string.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: runtime_agent.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tracing_agent.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_agent.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_inspector.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_agent.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: target_agent.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_inspector.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: io_agent.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_resource_manager.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_context.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_util.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_keys.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_tls.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_x509.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_crypto.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_javascript.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Protocol.cpp:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeWorker.cpp:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeTracing.cpp:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeRuntime.cpp:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Network.cpp:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Target.cpp:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: IO.cpp:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_resource.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: callback.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: embed_helpers.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: encoding.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: exceptions.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: utils.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_context_frame.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cares_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: compile_cache.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: connect_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: connection_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: queue.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: debug_utils.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: encoding_binding.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fs_event_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: handle_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: histogram.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: internal_only_v8.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_native_api_v8.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_stream.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_udp_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_external_reference.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: child_process_permission.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fs_permission.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_permission.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: timer_wrap.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: bindingdata.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: endpoint.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: http3.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: session.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: streams.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tlscontext.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: transportparams.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_socket.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_aes.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_argon2.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_bio.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_chacha20_poly1305.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_common.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_dsa.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hkdf.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_pbkdf2.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_sig.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_timing.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_cipher.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_ec.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_ml_dsa.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_kem.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hmac.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_kmac.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_random.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_rsa.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_spkac.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_clienthello.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_dh.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hash.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_keygen.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_scrypt.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cid.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: data.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: logstream.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: packet.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: preferredaddress.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: sessionticket.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tokens.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: application.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_resolve.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyDER.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_querystring_parse.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_relative.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_tls_socket_request.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyJWK.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_equals.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_toNamespacedPath.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_fs_write_open_read.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_isAbsolute.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_brotliDecompress.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanJWK.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_createBrotliDecompress.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_ClientHelloParser.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_basename.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_strings.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_string_decoder.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_parse.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_blob.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanPEM.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_join.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_extname.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_format.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_dirname.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_compare.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_stream1.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_gzip_createUnzip.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyPEM.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_fs_write_read_append.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_normalize.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_brotliCompress.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_httpparser1.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_x509.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanDER.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_includes.cc:v8::internal::IsMaybeReadOnlyExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) |
687 | | |
688 | | // True if the external pointer references an external object whose lifetime is |
689 | | // tied to the entry in the external pointer table. |
690 | | // In this case, the entry in the ExternalPointerTable always points to an |
691 | | // object derived from ExternalPointerTable::ManagedResource. |
692 | | V8_INLINE static constexpr bool IsManagedExternalPointerType( |
693 | 0 | ExternalPointerTagRange tag_range) { |
694 | 0 | return kAnyManagedResourceExternalPointerTag.Contains(tag_range); |
695 | 0 | } Unexecuted instantiation: node_snapshot_stub.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_common.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_sign_verify.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: environment.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: hooks.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: base_object.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cleanup_queue.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: env.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: heap_utils.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: module_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_api.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_binding.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_blob.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_buffer.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_builtins.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_config.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_config_file.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_constants.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_contextify.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_credentials.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_dir.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_dotenv.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_env_var.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_errors.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_file.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_http_parser.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_http2.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_i18n.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_locks.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_main_instance.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_messaging.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_metadata.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_modules.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_options.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_os.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_perf.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_platform.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_events.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_methods.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_object.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_realm.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report_module.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report_utils.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sea.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_serdes.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_shadow_realm.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_snapshotable.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sockaddr.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_stat_watcher.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_symbols.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_task_queue.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_task_runner.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_events.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_types.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_url.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_url_pattern.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_util.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_v8.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_wasi.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_wasm_web_api.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_watchdog.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_worker.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_zlib.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: path.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: permission.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: wasi_permission.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_permission.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: net_permission.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: addon_permission.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: pipe_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: process_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: signal_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: spawn_sync.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_base.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_pipe.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: string_bytes.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: string_decoder.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tcp_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: timers.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: agent.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_buffer.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_writer.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: trace_event.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: traced_value.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tty_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: udp_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: util.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: uv.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: quic.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cppgc_helpers.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_large_page.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sqlite.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_webstorage.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_agent.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_io.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_profiler.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_js_api.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_socket_server.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: main_thread_interface.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_json.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_string.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: runtime_agent.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tracing_agent.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_agent.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_inspector.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_agent.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: target_agent.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_inspector.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: io_agent.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_resource_manager.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_context.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_util.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_keys.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_tls.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_x509.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_crypto.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_javascript.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Protocol.cpp:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeWorker.cpp:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeTracing.cpp:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeRuntime.cpp:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Network.cpp:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Target.cpp:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: IO.cpp:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_resource.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: callback.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: embed_helpers.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: encoding.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: exceptions.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: utils.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_context_frame.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cares_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: compile_cache.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: connect_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: connection_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: queue.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: debug_utils.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: encoding_binding.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fs_event_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: handle_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: histogram.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: internal_only_v8.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_native_api_v8.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_stream.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_udp_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_external_reference.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: child_process_permission.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fs_permission.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_permission.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: timer_wrap.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: bindingdata.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: endpoint.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: http3.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: session.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: streams.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tlscontext.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: transportparams.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_socket.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_aes.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_argon2.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_bio.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_chacha20_poly1305.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_common.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_dsa.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hkdf.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_pbkdf2.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_sig.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_timing.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_cipher.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_ec.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_ml_dsa.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_kem.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hmac.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_kmac.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_random.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_rsa.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_spkac.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_clienthello.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_dh.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hash.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_keygen.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_scrypt.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cid.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: data.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: logstream.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: packet.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: preferredaddress.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: sessionticket.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tokens.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: application.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_resolve.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyDER.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_querystring_parse.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_relative.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_tls_socket_request.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyJWK.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_equals.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_toNamespacedPath.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_fs_write_open_read.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_isAbsolute.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_brotliDecompress.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanJWK.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_createBrotliDecompress.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_ClientHelloParser.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_basename.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_strings.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_string_decoder.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_parse.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_blob.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanPEM.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_join.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_extname.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_format.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_dirname.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_compare.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_stream1.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_gzip_createUnzip.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyPEM.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_fs_write_read_append.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_normalize.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_brotliCompress.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_httpparser1.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_x509.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanDER.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_includes.cc:v8::internal::IsManagedExternalPointerType(v8::internal::TagRange<v8::internal::ExternalPointerTag>) |
696 | | |
697 | | // When an external poiner field can contain the null external pointer handle, |
698 | | // the type checking mechanism needs to also check for null. |
699 | | // TODO(saelo): this is mostly a temporary workaround to introduce range-based |
700 | | // type checks. In the future, we should either (a) change the type tagging |
701 | | // scheme so that null always passes or (b) (more likely) introduce dedicated |
702 | | // null entries for those tags that need them (similar to other well-known |
703 | | // empty value constants such as the empty fixed array). |
704 | | V8_INLINE static constexpr bool ExternalPointerCanBeEmpty( |
705 | 0 | ExternalPointerTagRange tag_range) { |
706 | 0 | return tag_range.Contains(kArrayBufferExtensionTag) || |
707 | 0 | (tag_range.first <= kLastEmbedderDataTag && |
708 | 0 | kFirstEmbedderDataTag <= tag_range.last) || |
709 | 0 | kAnyInterceptorInfoExternalPointerTagRange.Contains(tag_range); |
710 | 0 | } Unexecuted instantiation: node_snapshot_stub.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_common.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_sign_verify.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: environment.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: hooks.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: base_object.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cleanup_queue.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: env.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: heap_utils.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: module_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_api.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_binding.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_blob.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_buffer.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_builtins.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_config.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_config_file.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_constants.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_contextify.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_credentials.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_dir.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_dotenv.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_env_var.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_errors.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_file.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_http_parser.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_http2.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_i18n.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_locks.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_main_instance.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_messaging.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_metadata.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_modules.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_options.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_os.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_perf.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_platform.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_events.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_methods.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_process_object.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_realm.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report_module.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_report_utils.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sea.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_serdes.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_shadow_realm.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_snapshotable.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sockaddr.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_stat_watcher.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_symbols.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_task_queue.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_task_runner.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_events.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_types.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_url.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_url_pattern.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_util.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_v8.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_wasi.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_wasm_web_api.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_watchdog.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_worker.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_zlib.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: path.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: permission.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: wasi_permission.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_permission.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: net_permission.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: addon_permission.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: pipe_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: process_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: signal_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: spawn_sync.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_base.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_pipe.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: stream_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: string_bytes.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: string_decoder.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tcp_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: timers.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: agent.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_buffer.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_trace_writer.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: trace_event.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: traced_value.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tty_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: udp_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: util.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: uv.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: quic.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cppgc_helpers.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_large_page.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_sqlite.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_webstorage.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_agent.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_io.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_profiler.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_js_api.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_socket_server.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: main_thread_interface.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_json.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_string.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: runtime_agent.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tracing_agent.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_agent.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_inspector.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_agent.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: target_agent.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: worker_inspector.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: io_agent.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: network_resource_manager.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_context.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_util.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_keys.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_tls.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_x509.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_crypto.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_javascript.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Protocol.cpp:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeWorker.cpp:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeTracing.cpp:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: NodeRuntime.cpp:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Network.cpp:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: Target.cpp:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: IO.cpp:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_resource.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: callback.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: embed_helpers.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: encoding.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: exceptions.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: utils.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: async_context_frame.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cares_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: compile_cache.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: connect_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: connection_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: queue.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: debug_utils.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: encoding_binding.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fs_event_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: handle_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: histogram.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: internal_only_v8.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_native_api_v8.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_stream.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: js_udp_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: node_external_reference.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: child_process_permission.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fs_permission.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_permission.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: timer_wrap.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: bindingdata.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: endpoint.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: http3.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: session.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: streams.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tlscontext.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: transportparams.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: inspector_socket.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_aes.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_argon2.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_bio.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_chacha20_poly1305.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_common.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_dsa.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hkdf.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_pbkdf2.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_sig.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_timing.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_cipher.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_ec.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_ml_dsa.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_kem.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hmac.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_kmac.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_random.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_rsa.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_spkac.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_clienthello.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_dh.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_hash.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_keygen.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: crypto_scrypt.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: cid.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: data.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: logstream.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: packet.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: preferredaddress.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: sessionticket.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: tokens.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: application.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_resolve.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyDER.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_querystring_parse.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_relative.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_tls_socket_request.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyJWK.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_equals.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_toNamespacedPath.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_fs_write_open_read.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_isAbsolute.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_brotliDecompress.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanJWK.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_createBrotliDecompress.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_ClientHelloParser.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_basename.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_strings.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_string_decoder.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_parse.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_blob.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanPEM.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_join.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_extname.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_format.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_dirname.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_compare.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_stream1.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_gzip_createUnzip.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_createPrivateKeyPEM.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_fs_write_read_append.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_path_normalize.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_zlib_brotliCompress.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_httpparser1.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_x509.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_diffieHellmanDER.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) Unexecuted instantiation: fuzz_buffer_includes.cc:v8::internal::ExternalPointerCanBeEmpty(v8::internal::TagRange<v8::internal::ExternalPointerTag>) |
711 | | |
712 | | // Indirect Pointers. |
713 | | // |
714 | | // When the sandbox is enabled, indirect pointers are used to reference |
715 | | // HeapObjects that live outside of the sandbox (but are still managed by V8's |
716 | | // garbage collector). When object A references an object B through an indirect |
717 | | // pointer, object A will contain a IndirectPointerHandle, i.e. a shifted |
718 | | // 32-bit index, which identifies an entry in a pointer table (either the |
719 | | // trusted pointer table for TrustedObjects, or the code pointer table if it is |
720 | | // a Code object). This table entry then contains the actual pointer to object |
721 | | // B. Further, object B owns this pointer table entry, and it is responsible |
722 | | // for updating the "self-pointer" in the entry when it is relocated in memory. |
723 | | // This way, in contrast to "normal" pointers, indirect pointers never need to |
724 | | // be tracked by the GC (i.e. there is no remembered set for them). |
725 | | // These pointers do not exist when the sandbox is disabled. |
726 | | |
727 | | // An IndirectPointerHandle represents a 32-bit index into a pointer table. |
728 | | using IndirectPointerHandle = uint32_t; |
729 | | |
730 | | // A null handle always references an entry that contains nullptr. |
731 | | constexpr IndirectPointerHandle kNullIndirectPointerHandle = 0; |
732 | | |
733 | | // When the sandbox is enabled, indirect pointers are used to implement: |
734 | | // - TrustedPointers: an indirect pointer using the trusted pointer table (TPT) |
735 | | // and referencing a TrustedObject in one of the trusted heap spaces. |
736 | | // - CodePointers, an indirect pointer using the code pointer table (CPT) and |
737 | | // referencing a Code object together with its instruction stream. |
738 | | |
739 | | // |
740 | | // Trusted Pointers. |
741 | | // |
742 | | // A pointer to a TrustedObject. |
743 | | // When the sandbox is enabled, these are indirect pointers using the trusted |
744 | | // pointer table (TPT). They are used to reference trusted objects (located in |
745 | | // one of V8's trusted heap spaces, outside of the sandbox) from inside the |
746 | | // sandbox in a memory-safe way. When the sandbox is disabled, these are |
747 | | // regular tagged pointers. |
748 | | using TrustedPointerHandle = IndirectPointerHandle; |
749 | | |
750 | | // The size of the virtual memory reservation for the trusted pointer table. |
751 | | // As with the external pointer table, a maximum table size in combination with |
752 | | // shifted indices allows omitting bounds checks. |
753 | | constexpr size_t kTrustedPointerTableReservationSize = 64 * MB; |
754 | | |
755 | | // The trusted pointer handles are stored shifted to the left by this amount |
756 | | // to guarantee that they are smaller than the maximum table size. |
757 | | constexpr uint32_t kTrustedPointerHandleShift = 9; |
758 | | |
759 | | // A null handle always references an entry that contains nullptr. |
760 | | constexpr TrustedPointerHandle kNullTrustedPointerHandle = |
761 | | kNullIndirectPointerHandle; |
762 | | |
763 | | // The maximum number of entries in an trusted pointer table. |
764 | | constexpr int kTrustedPointerTableEntrySize = 8; |
765 | | constexpr int kTrustedPointerTableEntrySizeLog2 = 3; |
766 | | constexpr size_t kMaxTrustedPointers = |
767 | | kTrustedPointerTableReservationSize / kTrustedPointerTableEntrySize; |
768 | | static_assert((1 << (32 - kTrustedPointerHandleShift)) == kMaxTrustedPointers, |
769 | | "kTrustedPointerTableReservationSize and " |
770 | | "kTrustedPointerHandleShift don't match"); |
771 | | |
772 | | // |
773 | | // Code Pointers. |
774 | | // |
775 | | // A pointer to a Code object. |
776 | | // Essentially a specialized version of a trusted pointer that (when the |
777 | | // sandbox is enabled) uses the code pointer table (CPT) instead of the TPT. |
778 | | // Each entry in the CPT contains both a pointer to a Code object as well as a |
779 | | // pointer to the Code's entrypoint. This allows calling/jumping into Code with |
780 | | // one fewer memory access (compared to the case where the entrypoint pointer |
781 | | // first needs to be loaded from the Code object). As such, a CodePointerHandle |
782 | | // can be used both to obtain the referenced Code object and to directly load |
783 | | // its entrypoint. |
784 | | // |
785 | | // When the sandbox is disabled, these are regular tagged pointers. |
786 | | using CodePointerHandle = IndirectPointerHandle; |
787 | | |
788 | | // The size of the virtual memory reservation for the code pointer table. |
789 | | // As with the other tables, a maximum table size in combination with shifted |
790 | | // indices allows omitting bounds checks. |
791 | | constexpr size_t kCodePointerTableReservationSize = 128 * MB; |
792 | | |
793 | | // Code pointer handles are shifted by a different amount than indirect pointer |
794 | | // handles as the tables have a different maximum size. |
795 | | constexpr uint32_t kCodePointerHandleShift = 9; |
796 | | |
797 | | // A null handle always references an entry that contains nullptr. |
798 | | constexpr CodePointerHandle kNullCodePointerHandle = kNullIndirectPointerHandle; |
799 | | |
800 | | // It can sometimes be necessary to distinguish a code pointer handle from a |
801 | | // trusted pointer handle. A typical example would be a union trusted pointer |
802 | | // field that can refer to both Code objects and other trusted objects. To |
803 | | // support these use-cases, we use a simple marking scheme where some of the |
804 | | // low bits of a code pointer handle are set, while they will be unset on a |
805 | | // trusted pointer handle. This way, the correct table to resolve the handle |
806 | | // can be determined even in the absence of a type tag. |
807 | | constexpr uint32_t kCodePointerHandleMarker = 0x1; |
808 | | static_assert(kCodePointerHandleShift > 0); |
809 | | static_assert(kTrustedPointerHandleShift > 0); |
810 | | |
811 | | // The maximum number of entries in a code pointer table. |
812 | | constexpr int kCodePointerTableEntrySize = 16; |
813 | | constexpr int kCodePointerTableEntrySizeLog2 = 4; |
814 | | constexpr size_t kMaxCodePointers = |
815 | | kCodePointerTableReservationSize / kCodePointerTableEntrySize; |
816 | | static_assert( |
817 | | (1 << (32 - kCodePointerHandleShift)) == kMaxCodePointers, |
818 | | "kCodePointerTableReservationSize and kCodePointerHandleShift don't match"); |
819 | | |
820 | | constexpr int kCodePointerTableEntryEntrypointOffset = 0; |
821 | | constexpr int kCodePointerTableEntryCodeObjectOffset = 8; |
822 | | |
823 | | // Constants that can be used to mark places that should be modified once |
824 | | // certain types of objects are moved out of the sandbox and into trusted space. |
825 | | constexpr bool kRuntimeGeneratedCodeObjectsLiveInTrustedSpace = true; |
826 | | constexpr bool kBuiltinCodeObjectsLiveInTrustedSpace = false; |
827 | | constexpr bool kAllCodeObjectsLiveInTrustedSpace = |
828 | | kRuntimeGeneratedCodeObjectsLiveInTrustedSpace && |
829 | | kBuiltinCodeObjectsLiveInTrustedSpace; |
830 | | |
831 | | // {obj} must be the raw tagged pointer representation of a HeapObject |
832 | | // that's guaranteed to never be in ReadOnlySpace. |
833 | | V8_DEPRECATE_SOON( |
834 | | "Use GetCurrentIsolate() instead, which is guaranteed to return the same " |
835 | | "isolate since https://crrev.com/c/6458560.") |
836 | | V8_EXPORT internal::Isolate* IsolateFromNeverReadOnlySpaceObject(Address obj); |
837 | | |
838 | | // Returns if we need to throw when an error occurs. This infers the language |
839 | | // mode based on the current context and the closure. This returns true if the |
840 | | // language mode is strict. |
841 | | V8_EXPORT bool ShouldThrowOnError(internal::Isolate* isolate); |
842 | | |
843 | | struct HandleScopeData final { |
844 | | static constexpr uint32_t kSizeInBytes = |
845 | | 2 * kApiSystemPointerSize + 2 * kApiInt32Size; |
846 | | |
847 | | Address* next; |
848 | | Address* limit; |
849 | | int level; |
850 | | int sealed_level; |
851 | | |
852 | 0 | void Initialize() { |
853 | 0 | next = limit = nullptr; |
854 | 0 | sealed_level = level = 0; |
855 | 0 | } |
856 | | }; |
857 | | |
858 | | static_assert(HandleScopeData::kSizeInBytes == sizeof(HandleScopeData)); |
859 | | |
860 | | /** |
861 | | * This class exports constants and functionality from within v8 that |
862 | | * is necessary to implement inline functions in the v8 api. Don't |
863 | | * depend on functions and constants defined here. |
864 | | */ |
865 | | class Internals { |
866 | | #ifdef V8_MAP_PACKING |
867 | | V8_INLINE static constexpr Address UnpackMapWord(Address mapword) { |
868 | | // TODO(wenyuzhao): Clear header metadata. |
869 | | return mapword ^ kMapWordXorMask; |
870 | | } |
871 | | #endif |
872 | | |
873 | | public: |
874 | | // These values match non-compiler-dependent values defined within |
875 | | // the implementation of v8. |
876 | | static const int kHeapObjectMapOffset = 0; |
877 | | static const int kMapInstanceTypeOffset = 1 * kApiTaggedSize + kApiInt32Size; |
878 | | static const int kStringResourceOffset = |
879 | | 1 * kApiTaggedSize + 2 * kApiInt32Size; |
880 | | |
881 | | static const int kOddballKindOffset = 4 * kApiTaggedSize + kApiDoubleSize; |
882 | | static const int kJSObjectHeaderSize = 3 * kApiTaggedSize; |
883 | | #ifdef V8_COMPRESS_POINTERS |
884 | | static const int kJSAPIObjectWithEmbedderSlotsHeaderSize = |
885 | | kJSObjectHeaderSize + kApiInt32Size; |
886 | | #else // !V8_COMPRESS_POINTERS |
887 | | static const int kJSAPIObjectWithEmbedderSlotsHeaderSize = |
888 | | kJSObjectHeaderSize + kApiTaggedSize; |
889 | | #endif // !V8_COMPRESS_POINTERS |
890 | | static const int kFixedArrayHeaderSize = 2 * kApiTaggedSize; |
891 | | static const int kEmbedderDataArrayHeaderSize = 2 * kApiTaggedSize; |
892 | | static const int kEmbedderDataSlotSize = kApiSystemPointerSize; |
893 | | #ifdef V8_ENABLE_SANDBOX |
894 | | static const int kEmbedderDataSlotExternalPointerOffset = kApiTaggedSize; |
895 | | #else |
896 | | static const int kEmbedderDataSlotExternalPointerOffset = 0; |
897 | | #endif |
898 | | static const int kNativeContextEmbedderDataOffset = 6 * kApiTaggedSize; |
899 | | static const int kStringRepresentationAndEncodingMask = 0x0f; |
900 | | static const int kStringEncodingMask = 0x8; |
901 | | static const int kExternalTwoByteRepresentationTag = 0x02; |
902 | | static const int kExternalOneByteRepresentationTag = 0x0a; |
903 | | |
904 | | static const uint32_t kNumIsolateDataSlots = 4; |
905 | | static const int kStackGuardSize = 8 * kApiSystemPointerSize; |
906 | | static const int kNumberOfBooleanFlags = 6; |
907 | | static const int kErrorMessageParamSize = 1; |
908 | | static const int kTablesAlignmentPaddingSize = 1; |
909 | | static const int kRegExpStaticResultOffsetsVectorSize = kApiSystemPointerSize; |
910 | | static const int kBuiltinTier0EntryTableSize = 7 * kApiSystemPointerSize; |
911 | | static const int kBuiltinTier0TableSize = 7 * kApiSystemPointerSize; |
912 | | static const int kLinearAllocationAreaSize = 3 * kApiSystemPointerSize; |
913 | | static const int kThreadLocalTopSize = 29 * kApiSystemPointerSize; |
914 | | static const int kHandleScopeDataSize = |
915 | | 2 * kApiSystemPointerSize + 2 * kApiInt32Size; |
916 | | |
917 | | // ExternalPointerTable and TrustedPointerTable layout guarantees. |
918 | | static const int kExternalPointerTableBasePointerOffset = 0; |
919 | | static const int kSegmentedTableSegmentPoolSize = 4; |
920 | | static const int kExternalPointerTableSize = |
921 | | 4 * kApiSystemPointerSize + |
922 | | kSegmentedTableSegmentPoolSize * sizeof(uint32_t); |
923 | | static const int kTrustedPointerTableSize = |
924 | | 4 * kApiSystemPointerSize + |
925 | | kSegmentedTableSegmentPoolSize * sizeof(uint32_t); |
926 | | static const int kTrustedPointerTableBasePointerOffset = 0; |
927 | | |
928 | | // IsolateData layout guarantees. |
929 | | static const int kIsolateCageBaseOffset = 0; |
930 | | static const int kIsolateStackGuardOffset = |
931 | | kIsolateCageBaseOffset + kApiSystemPointerSize; |
932 | | static const int kVariousBooleanFlagsOffset = |
933 | | kIsolateStackGuardOffset + kStackGuardSize; |
934 | | static const int kErrorMessageParamOffset = |
935 | | kVariousBooleanFlagsOffset + kNumberOfBooleanFlags; |
936 | | static const int kBuiltinTier0EntryTableOffset = |
937 | | kErrorMessageParamOffset + kErrorMessageParamSize + |
938 | | kTablesAlignmentPaddingSize + kRegExpStaticResultOffsetsVectorSize; |
939 | | static const int kBuiltinTier0TableOffset = |
940 | | kBuiltinTier0EntryTableOffset + kBuiltinTier0EntryTableSize; |
941 | | static const int kNewAllocationInfoOffset = |
942 | | kBuiltinTier0TableOffset + kBuiltinTier0TableSize; |
943 | | static const int kOldAllocationInfoOffset = |
944 | | kNewAllocationInfoOffset + kLinearAllocationAreaSize; |
945 | | static const int kLastYoungAllocationOffset = |
946 | | kOldAllocationInfoOffset + kApiSystemPointerSize; |
947 | | |
948 | | static const int kFastCCallAlignmentPaddingSize = |
949 | | kApiSystemPointerSize == 8 ? 5 * kApiSystemPointerSize |
950 | | : 1 * kApiSystemPointerSize; |
951 | | static const int kIsolateFastCCallCallerPcOffset = |
952 | | kLastYoungAllocationOffset + kLinearAllocationAreaSize + |
953 | | kFastCCallAlignmentPaddingSize; |
954 | | static const int kIsolateFastCCallCallerFpOffset = |
955 | | kIsolateFastCCallCallerPcOffset + kApiSystemPointerSize; |
956 | | static const int kIsolateFastApiCallTargetOffset = |
957 | | kIsolateFastCCallCallerFpOffset + kApiSystemPointerSize; |
958 | | static const int kIsolateLongTaskStatsCounterOffset = |
959 | | kIsolateFastApiCallTargetOffset + kApiSystemPointerSize; |
960 | | static const int kIsolateThreadLocalTopOffset = |
961 | | kIsolateLongTaskStatsCounterOffset + kApiSizetSize; |
962 | | static const int kIsolateHandleScopeDataOffset = |
963 | | kIsolateThreadLocalTopOffset + kThreadLocalTopSize; |
964 | | static const int kIsolateEmbedderDataOffset = |
965 | | kIsolateHandleScopeDataOffset + kHandleScopeDataSize; |
966 | | #ifdef V8_COMPRESS_POINTERS |
967 | | static const int kIsolateExternalPointerTableOffset = |
968 | | kIsolateEmbedderDataOffset + kNumIsolateDataSlots * kApiSystemPointerSize; |
969 | | static const int kIsolateSharedExternalPointerTableAddressOffset = |
970 | | kIsolateExternalPointerTableOffset + kExternalPointerTableSize; |
971 | | static const int kIsolateCppHeapPointerTableOffset = |
972 | | kIsolateSharedExternalPointerTableAddressOffset + kApiSystemPointerSize; |
973 | | #ifdef V8_ENABLE_SANDBOX |
974 | | static const int kIsolateTrustedCageBaseOffset = |
975 | | kIsolateCppHeapPointerTableOffset + kExternalPointerTableSize; |
976 | | static const int kIsolateTrustedPointerTableOffset = |
977 | | kIsolateTrustedCageBaseOffset + kApiSystemPointerSize; |
978 | | static const int kIsolateSharedTrustedPointerTableAddressOffset = |
979 | | kIsolateTrustedPointerTableOffset + kTrustedPointerTableSize; |
980 | | static const int kIsolateTrustedPointerPublishingScopeOffset = |
981 | | kIsolateSharedTrustedPointerTableAddressOffset + kApiSystemPointerSize; |
982 | | static const int kIsolateCodePointerTableBaseAddressOffset = |
983 | | kIsolateTrustedPointerPublishingScopeOffset + kApiSystemPointerSize; |
984 | | static const int kIsolateApiCallbackThunkArgumentOffset = |
985 | | kIsolateCodePointerTableBaseAddressOffset + kApiSystemPointerSize; |
986 | | #else |
987 | | static const int kIsolateApiCallbackThunkArgumentOffset = |
988 | | kIsolateCppHeapPointerTableOffset + kExternalPointerTableSize; |
989 | | #endif // V8_ENABLE_SANDBOX |
990 | | #else |
991 | | static const int kIsolateApiCallbackThunkArgumentOffset = |
992 | | kIsolateEmbedderDataOffset + kNumIsolateDataSlots * kApiSystemPointerSize; |
993 | | #endif // V8_COMPRESS_POINTERS |
994 | | static const int kJSDispatchTableOffset = |
995 | | kIsolateApiCallbackThunkArgumentOffset + kApiSystemPointerSize; |
996 | | static const int kIsolateRegexpExecVectorArgumentOffset = |
997 | | kJSDispatchTableOffset + kApiSystemPointerSize; |
998 | | static const int kContinuationPreservedEmbedderDataOffset = |
999 | | kIsolateRegexpExecVectorArgumentOffset + kApiSystemPointerSize; |
1000 | | static const int kIsolateRootsOffset = |
1001 | | kContinuationPreservedEmbedderDataOffset + kApiSystemPointerSize; |
1002 | | |
1003 | | // Assert scopes |
1004 | | static const int kDisallowGarbageCollectionAlign = alignof(uint32_t); |
1005 | | static const int kDisallowGarbageCollectionSize = sizeof(uint32_t); |
1006 | | |
1007 | | #if V8_STATIC_ROOTS_BOOL |
1008 | | |
1009 | | // These constants are copied from static-roots.h and guarded by static asserts. |
1010 | | #define EXPORTED_STATIC_ROOTS_PTR_LIST(V) \ |
1011 | | V(UndefinedValue, 0x11) \ |
1012 | | V(NullValue, 0x2d) \ |
1013 | | V(TrueValue, 0x71) \ |
1014 | | V(FalseValue, 0x55) \ |
1015 | | V(EmptyString, 0x49) \ |
1016 | | /* The Hole moves around depending on build flags, so define it */ \ |
1017 | | /* separately inside StaticReadOnlyRoot using build macros */ \ |
1018 | | V(TheHoleValue, kBuildDependentTheHoleValue) |
1019 | | |
1020 | | using Tagged_t = uint32_t; |
1021 | | struct StaticReadOnlyRoot { |
1022 | | #ifdef V8_ENABLE_WEBASSEMBLY |
1023 | | static constexpr Tagged_t kBuildDependentTheHoleValue = 0x20001; |
1024 | | #else |
1025 | | #ifdef V8_INTL_SUPPORT |
1026 | | static constexpr Tagged_t kBuildDependentTheHoleValue = 0x6581; |
1027 | | #else |
1028 | | static constexpr Tagged_t kBuildDependentTheHoleValue = 0x58d1; |
1029 | | #endif |
1030 | | #endif |
1031 | | |
1032 | | #define DEF_ROOT(name, value) static constexpr Tagged_t k##name = value; |
1033 | | EXPORTED_STATIC_ROOTS_PTR_LIST(DEF_ROOT) |
1034 | | #undef DEF_ROOT |
1035 | | |
1036 | | // Use 0 for kStringMapLowerBound since string maps are the first maps. |
1037 | | static constexpr Tagged_t kStringMapLowerBound = 0; |
1038 | | static constexpr Tagged_t kStringMapUpperBound = 0x425; |
1039 | | |
1040 | | #define PLUSONE(...) +1 |
1041 | | static constexpr size_t kNumberOfExportedStaticRoots = |
1042 | | 2 + EXPORTED_STATIC_ROOTS_PTR_LIST(PLUSONE); |
1043 | | #undef PLUSONE |
1044 | | }; |
1045 | | |
1046 | | #endif // V8_STATIC_ROOTS_BOOL |
1047 | | |
1048 | | static const int kUndefinedValueRootIndex = 0; |
1049 | | static const int kTheHoleValueRootIndex = 1; |
1050 | | static const int kNullValueRootIndex = 2; |
1051 | | static const int kTrueValueRootIndex = 3; |
1052 | | static const int kFalseValueRootIndex = 4; |
1053 | | static const int kEmptyStringRootIndex = 5; |
1054 | | |
1055 | | static const int kNodeClassIdOffset = 1 * kApiSystemPointerSize; |
1056 | | static const int kNodeFlagsOffset = 1 * kApiSystemPointerSize + 3; |
1057 | | static const int kNodeStateMask = 0x3; |
1058 | | static const int kNodeStateIsWeakValue = 2; |
1059 | | |
1060 | | static const int kFirstNonstringType = 0x80; |
1061 | | static const int kOddballType = 0x83; |
1062 | | static const int kForeignType = 0xcc; |
1063 | | static const int kJSSpecialApiObjectType = 0x410; |
1064 | | static const int kJSObjectType = 0x421; |
1065 | | static const int kFirstJSApiObjectType = 0x422; |
1066 | | static const int kLastJSApiObjectType = 0x80A; |
1067 | | // Defines a range [kFirstEmbedderJSApiObjectType, kJSApiObjectTypesCount] |
1068 | | // of JSApiObject instance type values that an embedder can use. |
1069 | | static const int kFirstEmbedderJSApiObjectType = 0; |
1070 | | static const int kLastEmbedderJSApiObjectType = |
1071 | | kLastJSApiObjectType - kFirstJSApiObjectType; |
1072 | | |
1073 | | static const int kUndefinedOddballKind = 4; |
1074 | | static const int kNullOddballKind = 3; |
1075 | | |
1076 | | // Constants used by PropertyCallbackInfo to check if we should throw when an |
1077 | | // error occurs. |
1078 | | static const int kDontThrow = 0; |
1079 | | static const int kThrowOnError = 1; |
1080 | | static const int kInferShouldThrowMode = 2; |
1081 | | |
1082 | | // Soft limit for AdjustAmountofExternalAllocatedMemory. Trigger an |
1083 | | // incremental GC once the external memory reaches this limit. |
1084 | | static constexpr size_t kExternalAllocationSoftLimit = 64 * 1024 * 1024; |
1085 | | |
1086 | | #ifdef V8_MAP_PACKING |
1087 | | static const uintptr_t kMapWordMetadataMask = 0xffffULL << 48; |
1088 | | // The lowest two bits of mapwords are always `0b10` |
1089 | | static const uintptr_t kMapWordSignature = 0b10; |
1090 | | // XORing a (non-compressed) map with this mask ensures that the two |
1091 | | // low-order bits are 0b10. The 0 at the end makes this look like a Smi, |
1092 | | // although real Smis have all lower 32 bits unset. We only rely on these |
1093 | | // values passing as Smis in very few places. |
1094 | | static const int kMapWordXorMask = 0b11; |
1095 | | #endif |
1096 | | |
1097 | | V8_EXPORT static void CheckInitializedImpl(v8::Isolate* isolate); |
1098 | 11.1k | V8_INLINE static void CheckInitialized(v8::Isolate* isolate) { |
1099 | | #ifdef V8_ENABLE_CHECKS |
1100 | | CheckInitializedImpl(isolate); |
1101 | | #endif |
1102 | 11.1k | } |
1103 | | |
1104 | 9.25k | V8_INLINE static constexpr bool HasHeapObjectTag(Address value) { |
1105 | 9.25k | return (value & kHeapObjectTagMask) == static_cast<Address>(kHeapObjectTag); |
1106 | 9.25k | } |
1107 | | |
1108 | 0 | V8_INLINE static constexpr int SmiValue(Address value) { |
1109 | 0 | return PlatformSmiTagging::SmiToInt(value); |
1110 | 0 | } |
1111 | | |
1112 | 35 | V8_INLINE static constexpr Address AddressToSmi(Address value) { |
1113 | 35 | return (value << (kSmiTagSize + PlatformSmiTagging::kSmiShiftSize)) | |
1114 | 35 | kSmiTag; |
1115 | 35 | } |
1116 | | |
1117 | 0 | V8_INLINE static constexpr Address IntToSmi(int value) { |
1118 | 0 | return AddressToSmi(static_cast<Address>(value)); |
1119 | 0 | } |
1120 | | |
1121 | | template <typename T, |
1122 | | typename std::enable_if_t<std::is_integral_v<T>>* = nullptr> |
1123 | 0 | V8_INLINE static constexpr Address IntegralToSmi(T value) { |
1124 | 0 | return AddressToSmi(static_cast<Address>(value)); |
1125 | 0 | } Unexecuted instantiation: _ZN2v88internal9Internals13IntegralToSmiIsTnPNSt3__19enable_ifIXsr3stdE13is_integral_vIT_EEvE4typeELPv0EEEmS5_ Unexecuted instantiation: _ZN2v88internal9Internals13IntegralToSmiItTnPNSt3__19enable_ifIXsr3stdE13is_integral_vIT_EEvE4typeELPv0EEEmS5_ Unexecuted instantiation: _ZN2v88internal9Internals13IntegralToSmiIiTnPNSt3__19enable_ifIXsr3stdE13is_integral_vIT_EEvE4typeELPv0EEEmS5_ |
1126 | | |
1127 | | template <typename T, |
1128 | | typename std::enable_if_t<std::is_integral_v<T>>* = nullptr> |
1129 | 0 | V8_INLINE static constexpr bool IsValidSmi(T value) { |
1130 | 0 | return PlatformSmiTagging::IsValidSmi(value); |
1131 | 0 | } Unexecuted instantiation: _ZN2v88internal9Internals10IsValidSmiIsTnPNSt3__19enable_ifIXsr3stdE13is_integral_vIT_EEvE4typeELPv0EEEbS5_ Unexecuted instantiation: _ZN2v88internal9Internals10IsValidSmiItTnPNSt3__19enable_ifIXsr3stdE13is_integral_vIT_EEvE4typeELPv0EEEbS5_ |
1132 | | |
1133 | | template <typename T, |
1134 | | typename std::enable_if_t<std::is_integral_v<T>>* = nullptr> |
1135 | 35 | static constexpr std::optional<Address> TryIntegralToSmi(T value) { |
1136 | 35 | if (V8_LIKELY(PlatformSmiTagging::IsValidSmi(value))) { |
1137 | 35 | return {AddressToSmi(static_cast<Address>(value))}; |
1138 | 35 | } |
1139 | 0 | return {}; |
1140 | 35 | } Unexecuted instantiation: _ZN2v88internal9Internals16TryIntegralToSmiIiTnPNSt3__19enable_ifIXsr3stdE13is_integral_vIT_EEvE4typeELPv0EEENS3_8optionalImEES5_ Unexecuted instantiation: _ZN2v88internal9Internals16TryIntegralToSmiIlTnPNSt3__19enable_ifIXsr3stdE13is_integral_vIT_EEvE4typeELPv0EEENS3_8optionalImEES5_ _ZN2v88internal9Internals16TryIntegralToSmiIjTnPNSt3__19enable_ifIXsr3stdE13is_integral_vIT_EEvE4typeELPv0EEENS3_8optionalImEES5_ Line | Count | Source | 1135 | 35 | static constexpr std::optional<Address> TryIntegralToSmi(T value) { | 1136 | 35 | if (V8_LIKELY(PlatformSmiTagging::IsValidSmi(value))) { | 1137 | 35 | return {AddressToSmi(static_cast<Address>(value))}; | 1138 | 35 | } | 1139 | 0 | return {}; | 1140 | 35 | } |
Unexecuted instantiation: _ZN2v88internal9Internals16TryIntegralToSmiImTnPNSt3__19enable_ifIXsr3stdE13is_integral_vIT_EEvE4typeELPv0EEENS3_8optionalImEES5_ |
1141 | | |
1142 | | #if V8_STATIC_ROOTS_BOOL |
1143 | | V8_INLINE static bool is_identical(Address obj, Tagged_t constant) { |
1144 | | return static_cast<Tagged_t>(obj) == constant; |
1145 | | } |
1146 | | |
1147 | | V8_INLINE static bool CheckInstanceMapRange(Address obj, Tagged_t first_map, |
1148 | | Tagged_t last_map) { |
1149 | | auto map = ReadRawField<Tagged_t>(obj, kHeapObjectMapOffset); |
1150 | | #ifdef V8_MAP_PACKING |
1151 | | map = UnpackMapWord(map); |
1152 | | #endif |
1153 | | return map >= first_map && map <= last_map; |
1154 | | } |
1155 | | #endif |
1156 | | |
1157 | 9.18k | V8_INLINE static int GetInstanceType(Address obj) { |
1158 | 9.18k | Address map = ReadTaggedPointerField(obj, kHeapObjectMapOffset); |
1159 | | #ifdef V8_MAP_PACKING |
1160 | | map = UnpackMapWord(map); |
1161 | | #endif |
1162 | 9.18k | return ReadRawField<uint16_t>(map, kMapInstanceTypeOffset); |
1163 | 9.18k | } |
1164 | | |
1165 | 0 | V8_INLINE static Address LoadMap(Address obj) { |
1166 | 0 | if (!HasHeapObjectTag(obj)) return kNullAddress; |
1167 | 0 | Address map = ReadTaggedPointerField(obj, kHeapObjectMapOffset); |
1168 | 0 | #ifdef V8_MAP_PACKING |
1169 | 0 | map = UnpackMapWord(map); |
1170 | 0 | #endif |
1171 | 0 | return map; |
1172 | 0 | } |
1173 | | |
1174 | 0 | V8_INLINE static int GetOddballKind(Address obj) { |
1175 | 0 | return SmiValue(ReadTaggedSignedField(obj, kOddballKindOffset)); |
1176 | 0 | } |
1177 | | |
1178 | 0 | V8_INLINE static bool IsExternalTwoByteString(int instance_type) { |
1179 | 0 | int representation = (instance_type & kStringRepresentationAndEncodingMask); |
1180 | 0 | return representation == kExternalTwoByteRepresentationTag; |
1181 | 0 | } |
1182 | | |
1183 | 0 | V8_INLINE static constexpr bool CanHaveInternalField(int instance_type) { |
1184 | 0 | static_assert(kJSObjectType + 1 == kFirstJSApiObjectType); |
1185 | 0 | static_assert(kJSObjectType < kLastJSApiObjectType); |
1186 | 0 | static_assert(kFirstJSApiObjectType < kLastJSApiObjectType); |
1187 | | // Check for IsJSObject() || IsJSSpecialApiObject() || IsJSApiObject() |
1188 | 0 | return instance_type == kJSSpecialApiObjectType || |
1189 | | // inlined version of base::IsInRange |
1190 | 0 | (static_cast<unsigned>(static_cast<unsigned>(instance_type) - |
1191 | 0 | static_cast<unsigned>(kJSObjectType)) <= |
1192 | 0 | static_cast<unsigned>(kLastJSApiObjectType - kJSObjectType)); |
1193 | 0 | } |
1194 | | |
1195 | 0 | V8_INLINE static uint8_t GetNodeFlag(Address* obj, int shift) { |
1196 | 0 | uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; |
1197 | 0 | return *addr & static_cast<uint8_t>(1U << shift); |
1198 | 0 | } |
1199 | | |
1200 | 0 | V8_INLINE static void UpdateNodeFlag(Address* obj, bool value, int shift) { |
1201 | 0 | uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; |
1202 | 0 | uint8_t mask = static_cast<uint8_t>(1U << shift); |
1203 | 0 | *addr = static_cast<uint8_t>((*addr & ~mask) | (value << shift)); |
1204 | 0 | } |
1205 | | |
1206 | 560 | V8_INLINE static uint8_t GetNodeState(Address* obj) { |
1207 | 560 | uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; |
1208 | 560 | return *addr & kNodeStateMask; |
1209 | 560 | } |
1210 | | |
1211 | 0 | V8_INLINE static void UpdateNodeState(Address* obj, uint8_t value) { |
1212 | 0 | uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset; |
1213 | 0 | *addr = static_cast<uint8_t>((*addr & ~kNodeStateMask) | value); |
1214 | 0 | } |
1215 | | |
1216 | | V8_INLINE static void SetEmbedderData(v8::Isolate* isolate, uint32_t slot, |
1217 | 0 | void* data) { |
1218 | 0 | Address addr = reinterpret_cast<Address>(isolate) + |
1219 | 0 | kIsolateEmbedderDataOffset + slot * kApiSystemPointerSize; |
1220 | 0 | *reinterpret_cast<void**>(addr) = data; |
1221 | 0 | } |
1222 | | |
1223 | | V8_INLINE static void* GetEmbedderData(const v8::Isolate* isolate, |
1224 | 0 | uint32_t slot) { |
1225 | 0 | Address addr = reinterpret_cast<Address>(isolate) + |
1226 | 0 | kIsolateEmbedderDataOffset + slot * kApiSystemPointerSize; |
1227 | 0 | return *reinterpret_cast<void* const*>(addr); |
1228 | 0 | } |
1229 | | |
1230 | 3.20M | V8_INLINE static HandleScopeData* GetHandleScopeData(v8::Isolate* isolate) { |
1231 | 3.20M | Address addr = |
1232 | 3.20M | reinterpret_cast<Address>(isolate) + kIsolateHandleScopeDataOffset; |
1233 | 3.20M | return reinterpret_cast<HandleScopeData*>(addr); |
1234 | 3.20M | } |
1235 | | |
1236 | 0 | V8_INLINE static void IncrementLongTasksStatsCounter(v8::Isolate* isolate) { |
1237 | 0 | Address addr = |
1238 | 0 | reinterpret_cast<Address>(isolate) + kIsolateLongTaskStatsCounterOffset; |
1239 | 0 | ++(*reinterpret_cast<size_t*>(addr)); |
1240 | 0 | } |
1241 | | |
1242 | 11.2k | V8_INLINE static Address* GetRootSlot(v8::Isolate* isolate, int index) { |
1243 | 11.2k | Address addr = reinterpret_cast<Address>(isolate) + kIsolateRootsOffset + |
1244 | 11.2k | index * kApiSystemPointerSize; |
1245 | 11.2k | return reinterpret_cast<Address*>(addr); |
1246 | 11.2k | } |
1247 | | |
1248 | 70 | V8_INLINE static Address GetRoot(v8::Isolate* isolate, int index) { |
1249 | | #if V8_STATIC_ROOTS_BOOL |
1250 | | Address base = *reinterpret_cast<Address*>( |
1251 | | reinterpret_cast<uintptr_t>(isolate) + kIsolateCageBaseOffset); |
1252 | | switch (index) { |
1253 | | #define DECOMPRESS_ROOT(name, ...) \ |
1254 | | case k##name##RootIndex: \ |
1255 | | return base + StaticReadOnlyRoot::k##name; |
1256 | | EXPORTED_STATIC_ROOTS_PTR_LIST(DECOMPRESS_ROOT) |
1257 | | #undef DECOMPRESS_ROOT |
1258 | | #undef EXPORTED_STATIC_ROOTS_PTR_LIST |
1259 | | default: |
1260 | | break; |
1261 | | } |
1262 | | #endif // V8_STATIC_ROOTS_BOOL |
1263 | 70 | return *GetRootSlot(isolate, index); |
1264 | 70 | } |
1265 | | |
1266 | | #ifdef V8_ENABLE_SANDBOX |
1267 | | V8_INLINE static Address* GetExternalPointerTableBase(v8::Isolate* isolate) { |
1268 | | Address addr = reinterpret_cast<Address>(isolate) + |
1269 | | kIsolateExternalPointerTableOffset + |
1270 | | kExternalPointerTableBasePointerOffset; |
1271 | | return *reinterpret_cast<Address**>(addr); |
1272 | | } |
1273 | | |
1274 | | V8_INLINE static Address* GetSharedExternalPointerTableBase( |
1275 | | v8::Isolate* isolate) { |
1276 | | Address addr = reinterpret_cast<Address>(isolate) + |
1277 | | kIsolateSharedExternalPointerTableAddressOffset; |
1278 | | addr = *reinterpret_cast<Address*>(addr); |
1279 | | addr += kExternalPointerTableBasePointerOffset; |
1280 | | return *reinterpret_cast<Address**>(addr); |
1281 | | } |
1282 | | #endif |
1283 | | |
1284 | | template <typename T> |
1285 | 3.47M | V8_INLINE static T ReadRawField(Address heap_object_ptr, int offset) { |
1286 | 3.47M | Address addr = heap_object_ptr + offset - kHeapObjectTag; |
1287 | | #ifdef V8_COMPRESS_POINTERS |
1288 | | if constexpr (sizeof(T) > kApiTaggedSize) { |
1289 | | // TODO(ishell, v8:8875): When pointer compression is enabled 8-byte size |
1290 | | // fields (external pointers, doubles and BigInt data) are only |
1291 | | // kTaggedSize aligned so we have to use unaligned pointer friendly way of |
1292 | | // accessing them in order to avoid undefined behavior in C++ code. |
1293 | | T r; |
1294 | | memcpy(&r, reinterpret_cast<void*>(addr), sizeof(T)); |
1295 | | return r; |
1296 | | } |
1297 | | #endif |
1298 | 3.47M | return *reinterpret_cast<const T*>(addr); |
1299 | 3.47M | } unsigned short v8::internal::Internals::ReadRawField<unsigned short>(unsigned long, int) Line | Count | Source | 1285 | 9.18k | V8_INLINE static T ReadRawField(Address heap_object_ptr, int offset) { | 1286 | 9.18k | Address addr = heap_object_ptr + offset - kHeapObjectTag; | 1287 | | #ifdef V8_COMPRESS_POINTERS | 1288 | | if constexpr (sizeof(T) > kApiTaggedSize) { | 1289 | | // TODO(ishell, v8:8875): When pointer compression is enabled 8-byte size | 1290 | | // fields (external pointers, doubles and BigInt data) are only | 1291 | | // kTaggedSize aligned so we have to use unaligned pointer friendly way of | 1292 | | // accessing them in order to avoid undefined behavior in C++ code. | 1293 | | T r; | 1294 | | memcpy(&r, reinterpret_cast<void*>(addr), sizeof(T)); | 1295 | | return r; | 1296 | | } | 1297 | | #endif | 1298 | 9.18k | return *reinterpret_cast<const T*>(addr); | 1299 | 9.18k | } |
unsigned long v8::internal::Internals::ReadRawField<unsigned long>(unsigned long, int) Line | Count | Source | 1285 | 3.46M | V8_INLINE static T ReadRawField(Address heap_object_ptr, int offset) { | 1286 | 3.46M | Address addr = heap_object_ptr + offset - kHeapObjectTag; | 1287 | | #ifdef V8_COMPRESS_POINTERS | 1288 | | if constexpr (sizeof(T) > kApiTaggedSize) { | 1289 | | // TODO(ishell, v8:8875): When pointer compression is enabled 8-byte size | 1290 | | // fields (external pointers, doubles and BigInt data) are only | 1291 | | // kTaggedSize aligned so we have to use unaligned pointer friendly way of | 1292 | | // accessing them in order to avoid undefined behavior in C++ code. | 1293 | | T r; | 1294 | | memcpy(&r, reinterpret_cast<void*>(addr), sizeof(T)); | 1295 | | return r; | 1296 | | } | 1297 | | #endif | 1298 | 3.46M | return *reinterpret_cast<const T*>(addr); | 1299 | 3.46M | } |
|
1300 | | |
1301 | | V8_INLINE static Address ReadTaggedPointerField(Address heap_object_ptr, |
1302 | 1.73M | int offset) { |
1303 | | #ifdef V8_COMPRESS_POINTERS |
1304 | | uint32_t value = ReadRawField<uint32_t>(heap_object_ptr, offset); |
1305 | | Address base = GetPtrComprCageBaseFromOnHeapAddress(heap_object_ptr); |
1306 | | return base + static_cast<Address>(static_cast<uintptr_t>(value)); |
1307 | | #else |
1308 | 1.73M | return ReadRawField<Address>(heap_object_ptr, offset); |
1309 | 1.73M | #endif |
1310 | 1.73M | } |
1311 | | |
1312 | | V8_INLINE static Address ReadTaggedSignedField(Address heap_object_ptr, |
1313 | 0 | int offset) { |
1314 | | #ifdef V8_COMPRESS_POINTERS |
1315 | | uint32_t value = ReadRawField<uint32_t>(heap_object_ptr, offset); |
1316 | | return static_cast<Address>(static_cast<uintptr_t>(value)); |
1317 | | #else |
1318 | 0 | return ReadRawField<Address>(heap_object_ptr, offset); |
1319 | 0 | #endif |
1320 | 0 | } |
1321 | | |
1322 | | // Returns v8::Isolate::Current(), but without needing to include the |
1323 | | // v8-isolate.h header. |
1324 | | V8_EXPORT static v8::Isolate* GetCurrentIsolate(); |
1325 | | |
1326 | 1.72M | V8_INLINE static v8::Isolate* GetCurrentIsolateForSandbox() { |
1327 | | #ifdef V8_ENABLE_SANDBOX |
1328 | | return GetCurrentIsolate(); |
1329 | | #else |
1330 | | // Not used in non-sandbox mode. |
1331 | 1.72M | return nullptr; |
1332 | 1.72M | #endif |
1333 | 1.72M | } |
1334 | | |
1335 | | template <ExternalPointerTagRange tag_range> |
1336 | | V8_INLINE static Address ReadExternalPointerField(v8::Isolate* isolate, |
1337 | | Address heap_object_ptr, |
1338 | 0 | int offset) { |
1339 | | #ifdef V8_ENABLE_SANDBOX |
1340 | | static_assert(!tag_range.IsEmpty()); |
1341 | | // See src/sandbox/external-pointer-table.h. Logic duplicated here so |
1342 | | // it can be inlined and doesn't require an additional call. |
1343 | | Address* table = IsSharedExternalPointerType(tag_range) |
1344 | | ? GetSharedExternalPointerTableBase(isolate) |
1345 | | : GetExternalPointerTableBase(isolate); |
1346 | | internal::ExternalPointerHandle handle = |
1347 | | ReadRawField<ExternalPointerHandle>(heap_object_ptr, offset); |
1348 | | uint32_t index = handle >> kExternalPointerIndexShift; |
1349 | | std::atomic<Address>* ptr = |
1350 | | reinterpret_cast<std::atomic<Address>*>(&table[index]); |
1351 | | Address entry = std::atomic_load_explicit(ptr, std::memory_order_relaxed); |
1352 | | ExternalPointerTag actual_tag = static_cast<ExternalPointerTag>( |
1353 | | (entry & kExternalPointerTagMask) >> kExternalPointerTagShift); |
1354 | | if (V8_LIKELY(tag_range.Contains(actual_tag))) { |
1355 | | return entry & kExternalPointerPayloadMask; |
1356 | | } else { |
1357 | | return 0; |
1358 | | } |
1359 | | return entry; |
1360 | | #else |
1361 | 0 | return ReadRawField<Address>(heap_object_ptr, offset); |
1362 | 0 | #endif // V8_ENABLE_SANDBOX |
1363 | 0 | } |
1364 | | |
1365 | | V8_INLINE static Address ReadExternalPointerField( |
1366 | | v8::Isolate* isolate, Address heap_object_ptr, int offset, |
1367 | 1.72M | ExternalPointerTagRange tag_range) { |
1368 | | #ifdef V8_ENABLE_SANDBOX |
1369 | | // See src/sandbox/external-pointer-table.h. Logic duplicated here so |
1370 | | // it can be inlined and doesn't require an additional call. |
1371 | | Address* table = IsSharedExternalPointerType(tag_range) |
1372 | | ? GetSharedExternalPointerTableBase(isolate) |
1373 | | : GetExternalPointerTableBase(isolate); |
1374 | | internal::ExternalPointerHandle handle = |
1375 | | ReadRawField<ExternalPointerHandle>(heap_object_ptr, offset); |
1376 | | uint32_t index = handle >> kExternalPointerIndexShift; |
1377 | | std::atomic<Address>* ptr = |
1378 | | reinterpret_cast<std::atomic<Address>*>(&table[index]); |
1379 | | Address entry = std::atomic_load_explicit(ptr, std::memory_order_relaxed); |
1380 | | ExternalPointerTag actual_tag = static_cast<ExternalPointerTag>( |
1381 | | (entry & kExternalPointerTagMask) >> kExternalPointerTagShift); |
1382 | | if (V8_LIKELY(tag_range.Contains(actual_tag))) { |
1383 | | return entry & kExternalPointerPayloadMask; |
1384 | | } else { |
1385 | | return 0; |
1386 | | } |
1387 | | return entry; |
1388 | | #else |
1389 | 1.72M | return ReadRawField<Address>(heap_object_ptr, offset); |
1390 | 1.72M | #endif // V8_ENABLE_SANDBOX |
1391 | 1.72M | } |
1392 | | |
1393 | | #ifdef V8_COMPRESS_POINTERS |
1394 | | V8_INLINE static Address GetPtrComprCageBaseFromOnHeapAddress(Address addr) { |
1395 | | return addr & -static_cast<intptr_t>(kPtrComprCageBaseAlignment); |
1396 | | } |
1397 | | |
1398 | | V8_INLINE static uint32_t CompressTagged(Address value) { |
1399 | | return static_cast<uint32_t>(value); |
1400 | | } |
1401 | | |
1402 | | V8_INLINE static Address DecompressTaggedField(Address heap_object_ptr, |
1403 | | uint32_t value) { |
1404 | | Address base = GetPtrComprCageBaseFromOnHeapAddress(heap_object_ptr); |
1405 | | return base + static_cast<Address>(static_cast<uintptr_t>(value)); |
1406 | | } |
1407 | | |
1408 | | #endif // V8_COMPRESS_POINTERS |
1409 | | }; |
1410 | | |
1411 | | // Only perform cast check for types derived from v8::Data since |
1412 | | // other types do not implement the Cast method. |
1413 | | template <bool PerformCheck> |
1414 | | struct CastCheck { |
1415 | | template <class T> |
1416 | | static void Perform(T* data); |
1417 | | }; |
1418 | | |
1419 | | template <> |
1420 | | template <class T> |
1421 | 0 | void CastCheck<true>::Perform(T* data) { |
1422 | 0 | T::Cast(data); |
1423 | 0 | } Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::Private>(v8::Private*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::Symbol>(v8::Symbol*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::String>(v8::String*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::DictionaryTemplate>(v8::DictionaryTemplate*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::FunctionTemplate>(v8::FunctionTemplate*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::ObjectTemplate>(v8::ObjectTemplate*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::Uint32Array>(v8::Uint32Array*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::Uint8Array>(v8::Uint8Array*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::Float64Array>(v8::Float64Array*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::Array>(v8::Array*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::Object>(v8::Object*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::Int32Array>(v8::Int32Array*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::BigInt64Array>(v8::BigInt64Array*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::Function>(v8::Function*) Unexecuted instantiation: void v8::internal::CastCheck<true>::Perform<v8::Context>(v8::Context*) |
1424 | | |
1425 | | template <> |
1426 | | template <class T> |
1427 | | void CastCheck<false>::Perform(T* data) {} |
1428 | | |
1429 | | template <class T> |
1430 | 0 | V8_INLINE void PerformCastCheck(T* data) { |
1431 | 0 | CastCheck<std::is_base_of_v<Data, T> && |
1432 | 0 | !std::is_same_v<Data, std::remove_cv_t<T>>>::Perform(data); |
1433 | 0 | } Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::Private>(v8::Private*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::Symbol>(v8::Symbol*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::String>(v8::String*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::DictionaryTemplate>(v8::DictionaryTemplate*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::FunctionTemplate>(v8::FunctionTemplate*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::ObjectTemplate>(v8::ObjectTemplate*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::Uint32Array>(v8::Uint32Array*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::Uint8Array>(v8::Uint8Array*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::Float64Array>(v8::Float64Array*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::Array>(v8::Array*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::Object>(v8::Object*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::Int32Array>(v8::Int32Array*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::BigInt64Array>(v8::BigInt64Array*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::Function>(v8::Function*) Unexecuted instantiation: void v8::internal::PerformCastCheck<v8::Context>(v8::Context*) |
1434 | | |
1435 | | // A base class for backing stores, which is needed due to vagaries of |
1436 | | // how static casts work with std::shared_ptr. |
1437 | | class BackingStoreBase {}; |
1438 | | |
1439 | | // The maximum value in enum GarbageCollectionReason, defined in heap.h. |
1440 | | // This is needed for histograms sampling garbage collection reasons. |
1441 | | constexpr int kGarbageCollectionReasonMaxValue = 30; |
1442 | | |
1443 | | // Base class for the address block allocator compatible with standard |
1444 | | // containers, which registers its allocated range as strong roots. |
1445 | | class V8_EXPORT StrongRootAllocatorBase { |
1446 | | public: |
1447 | 0 | Heap* heap() const { return heap_; } |
1448 | | |
1449 | | constexpr bool operator==(const StrongRootAllocatorBase&) const = default; |
1450 | | |
1451 | | protected: |
1452 | 0 | explicit StrongRootAllocatorBase(Heap* heap) : heap_(heap) {} |
1453 | | explicit StrongRootAllocatorBase(LocalHeap* heap); |
1454 | | explicit StrongRootAllocatorBase(Isolate* isolate); |
1455 | | explicit StrongRootAllocatorBase(v8::Isolate* isolate); |
1456 | | explicit StrongRootAllocatorBase(LocalIsolate* isolate); |
1457 | | |
1458 | | // Allocate/deallocate a range of n elements of type internal::Address. |
1459 | | Address* allocate_impl(size_t n); |
1460 | | void deallocate_impl(Address* p, size_t n) noexcept; |
1461 | | |
1462 | | private: |
1463 | | Heap* heap_; |
1464 | | }; |
1465 | | |
1466 | | // The general version of this template behaves just as std::allocator, with |
1467 | | // the exception that the constructor takes the isolate as parameter. Only |
1468 | | // specialized versions, e.g., internal::StrongRootAllocator<internal::Address> |
1469 | | // and internal::StrongRootAllocator<v8::Local<T>> register the allocated range |
1470 | | // as strong roots. |
1471 | | template <typename T> |
1472 | | class StrongRootAllocator : private std::allocator<T> { |
1473 | | public: |
1474 | | using value_type = T; |
1475 | | |
1476 | | template <typename HeapOrIsolateT> |
1477 | | explicit StrongRootAllocator(HeapOrIsolateT*) {} |
1478 | | template <typename U> |
1479 | | StrongRootAllocator(const StrongRootAllocator<U>& other) noexcept {} |
1480 | | |
1481 | | using std::allocator<T>::allocate; |
1482 | | using std::allocator<T>::deallocate; |
1483 | | }; |
1484 | | |
1485 | | template <typename Iterator> |
1486 | | concept HasIteratorConcept = requires { typename Iterator::iterator_concept; }; |
1487 | | |
1488 | | template <typename Iterator> |
1489 | | concept HasIteratorCategory = |
1490 | | requires { typename Iterator::iterator_category; }; |
1491 | | |
1492 | | // Helper struct that contains an `iterator_concept` type alias only when either |
1493 | | // `Iterator` or `std::iterator_traits<Iterator>` do. |
1494 | | // Default: no alias. |
1495 | | template <typename Iterator> |
1496 | | struct MaybeDefineIteratorConcept {}; |
1497 | | // Use `Iterator::iterator_concept` if available. |
1498 | | template <HasIteratorConcept Iterator> |
1499 | | struct MaybeDefineIteratorConcept<Iterator> { |
1500 | | using iterator_concept = typename Iterator::iterator_concept; |
1501 | | }; |
1502 | | // Otherwise fall back to `std::iterator_traits<Iterator>` if possible. |
1503 | | template <typename Iterator> |
1504 | | requires(HasIteratorCategory<Iterator> && !HasIteratorConcept<Iterator>) |
1505 | | struct MaybeDefineIteratorConcept<Iterator> { |
1506 | | using iterator_concept = |
1507 | | typename std::iterator_traits<Iterator>::iterator_concept; |
1508 | | }; |
1509 | | |
1510 | | // A class of iterators that wrap some different iterator type. |
1511 | | // If specified, ElementType is the type of element accessed by the wrapper |
1512 | | // iterator; in this case, the actual reference and pointer types of Iterator |
1513 | | // must be convertible to ElementType& and ElementType*, respectively. |
1514 | | template <typename Iterator, typename ElementType = void> |
1515 | | class WrappedIterator : public MaybeDefineIteratorConcept<Iterator> { |
1516 | | public: |
1517 | | static_assert( |
1518 | | std::is_void_v<ElementType> || |
1519 | | (std::is_convertible_v<typename std::iterator_traits<Iterator>::pointer, |
1520 | | std::add_pointer_t<ElementType>> && |
1521 | | std::is_convertible_v<typename std::iterator_traits<Iterator>::reference, |
1522 | | std::add_lvalue_reference_t<ElementType>>)); |
1523 | | |
1524 | | using difference_type = |
1525 | | typename std::iterator_traits<Iterator>::difference_type; |
1526 | | using value_type = |
1527 | | std::conditional_t<std::is_void_v<ElementType>, |
1528 | | typename std::iterator_traits<Iterator>::value_type, |
1529 | | ElementType>; |
1530 | | using pointer = |
1531 | | std::conditional_t<std::is_void_v<ElementType>, |
1532 | | typename std::iterator_traits<Iterator>::pointer, |
1533 | | std::add_pointer_t<ElementType>>; |
1534 | | using reference = |
1535 | | std::conditional_t<std::is_void_v<ElementType>, |
1536 | | typename std::iterator_traits<Iterator>::reference, |
1537 | | std::add_lvalue_reference_t<ElementType>>; |
1538 | | using iterator_category = |
1539 | | typename std::iterator_traits<Iterator>::iterator_category; |
1540 | | |
1541 | | constexpr WrappedIterator() noexcept = default; |
1542 | 0 | constexpr explicit WrappedIterator(Iterator it) noexcept : it_(it) {}Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Message>*>, v8::Local<v8::Message> >::WrappedIterator(std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Message>*>) Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::String>*>, v8::Local<v8::String> >::WrappedIterator(std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::String>*>) Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Value>*>, v8::Local<v8::Value> >::WrappedIterator(std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Value>*>) Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::ArrayBuffer>*>, v8::Local<v8::ArrayBuffer> >::WrappedIterator(std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::ArrayBuffer>*>) |
1543 | | |
1544 | | template <typename OtherIterator, typename OtherElementType> |
1545 | | requires std::is_convertible_v<OtherIterator, Iterator> |
1546 | | constexpr WrappedIterator( |
1547 | | const WrappedIterator<OtherIterator, OtherElementType>& other) noexcept |
1548 | | : it_(other.base()) {} |
1549 | | |
1550 | 0 | [[nodiscard]] constexpr reference operator*() const noexcept { return *it_; }Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Message>*>, v8::Local<v8::Message> >::operator*() const Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::ArrayBuffer>*>, v8::Local<v8::ArrayBuffer> >::operator*() const |
1551 | 0 | [[nodiscard]] constexpr pointer operator->() const noexcept { |
1552 | | if constexpr (std::is_pointer_v<Iterator>) { |
1553 | | return it_; |
1554 | 0 | } else { |
1555 | 0 | return it_.operator->(); |
1556 | 0 | } |
1557 | 0 | } Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::String>*>, v8::Local<v8::String> >::operator->() const Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::ArrayBuffer>*>, v8::Local<v8::ArrayBuffer> >::operator->() const Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Value>*>, v8::Local<v8::Value> >::operator->() const |
1558 | | |
1559 | | template <typename OtherIterator, typename OtherElementType> |
1560 | | [[nodiscard]] constexpr bool operator==( |
1561 | | const WrappedIterator<OtherIterator, OtherElementType>& other) |
1562 | 0 | const noexcept { |
1563 | 0 | return it_ == other.base(); |
1564 | 0 | } Unexecuted instantiation: bool v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Message>*>, v8::Local<v8::Message> >::operator==<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Message>*>, v8::Local<v8::Message> >(v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Message>*>, v8::Local<v8::Message> > const&) const Unexecuted instantiation: bool v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::ArrayBuffer>*>, v8::Local<v8::ArrayBuffer> >::operator==<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::ArrayBuffer>*>, v8::Local<v8::ArrayBuffer> >(v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::ArrayBuffer>*>, v8::Local<v8::ArrayBuffer> > const&) const |
1565 | | |
1566 | | template <typename OtherIterator, typename OtherElementType> |
1567 | | [[nodiscard]] constexpr auto operator<=>( |
1568 | | const WrappedIterator<OtherIterator, OtherElementType>& other) |
1569 | | const noexcept { |
1570 | | if constexpr (std::three_way_comparable_with<Iterator, OtherIterator>) { |
1571 | | return it_ <=> other.base(); |
1572 | | } else if constexpr (std::totally_ordered_with<Iterator, OtherIterator>) { |
1573 | | if (it_ < other.base()) { |
1574 | | return std::strong_ordering::less; |
1575 | | } |
1576 | | return (it_ > other.base()) ? std::strong_ordering::greater |
1577 | | : std::strong_ordering::equal; |
1578 | | } else { |
1579 | | if (it_ < other.base()) { |
1580 | | return std::partial_ordering::less; |
1581 | | } |
1582 | | if (other.base() < it_) { |
1583 | | return std::partial_ordering::greater; |
1584 | | } |
1585 | | return (it_ == other.base()) ? std::partial_ordering::equivalent |
1586 | | : std::partial_ordering::unordered; |
1587 | | } |
1588 | | } |
1589 | | |
1590 | 0 | constexpr WrappedIterator& operator++() noexcept { |
1591 | 0 | ++it_; |
1592 | 0 | return *this; |
1593 | 0 | } Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Message>*>, v8::Local<v8::Message> >::operator++() Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::ArrayBuffer>*>, v8::Local<v8::ArrayBuffer> >::operator++() |
1594 | | constexpr WrappedIterator operator++(int) noexcept { |
1595 | | WrappedIterator result(*this); |
1596 | | ++(*this); |
1597 | | return result; |
1598 | | } |
1599 | | |
1600 | | constexpr WrappedIterator& operator--() noexcept { |
1601 | | --it_; |
1602 | | return *this; |
1603 | | } |
1604 | | constexpr WrappedIterator operator--(int) noexcept { |
1605 | | WrappedIterator result(*this); |
1606 | | --(*this); |
1607 | | return result; |
1608 | | } |
1609 | | [[nodiscard]] constexpr WrappedIterator operator+( |
1610 | 0 | difference_type n) const noexcept { |
1611 | 0 | WrappedIterator result(*this); |
1612 | 0 | result += n; |
1613 | 0 | return result; |
1614 | 0 | } Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::ArrayBuffer>*>, v8::Local<v8::ArrayBuffer> >::operator+(long) const Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Value>*>, v8::Local<v8::Value> >::operator+(long) const |
1615 | | [[nodiscard]] friend constexpr WrappedIterator operator+( |
1616 | | difference_type n, const WrappedIterator& x) noexcept { |
1617 | | return x + n; |
1618 | | } |
1619 | 0 | constexpr WrappedIterator& operator+=(difference_type n) noexcept { |
1620 | 0 | it_ += n; |
1621 | 0 | return *this; |
1622 | 0 | } Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::ArrayBuffer>*>, v8::Local<v8::ArrayBuffer> >::operator+=(long) Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Value>*>, v8::Local<v8::Value> >::operator+=(long) |
1623 | | [[nodiscard]] constexpr WrappedIterator operator-( |
1624 | | difference_type n) const noexcept { |
1625 | | return *this + -n; |
1626 | | } |
1627 | | constexpr WrappedIterator& operator-=(difference_type n) noexcept { |
1628 | | return *this += -n; |
1629 | | } |
1630 | | template <typename OtherIterator, typename OtherElementType> |
1631 | | [[nodiscard]] constexpr auto operator-( |
1632 | | const WrappedIterator<OtherIterator, OtherElementType>& other) |
1633 | 0 | const noexcept { |
1634 | 0 | return it_ - other.base(); |
1635 | 0 | } |
1636 | | [[nodiscard]] constexpr reference operator[]( |
1637 | | difference_type n) const noexcept { |
1638 | | return it_[n]; |
1639 | | } |
1640 | | |
1641 | 0 | [[nodiscard]] constexpr const Iterator& base() const noexcept { return it_; }Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::Message>*>, v8::Local<v8::Message> >::base() const Unexecuted instantiation: v8::internal::WrappedIterator<std::__1::__wrap_iter<v8::internal::LocalUnchecked<v8::ArrayBuffer>*>, v8::Local<v8::ArrayBuffer> >::base() const |
1642 | | |
1643 | | private: |
1644 | | Iterator it_; |
1645 | | }; |
1646 | | |
1647 | | // Helper functions about values contained in handles. |
1648 | | // A value is either an indirect pointer or a direct pointer, depending on |
1649 | | // whether direct local support is enabled. |
1650 | | class ValueHelper final { |
1651 | | public: |
1652 | | // ValueHelper::InternalRepresentationType is an abstract type that |
1653 | | // corresponds to the internal representation of v8::Local and essentially |
1654 | | // to what T* really is (these two are always in sync). This type is used in |
1655 | | // methods like GetDataFromSnapshotOnce that need access to a handle's |
1656 | | // internal representation. In particular, if `x` is a `v8::Local<T>`, then |
1657 | | // `v8::Local<T>::FromRepr(x.repr())` gives exactly the same handle as `x`. |
1658 | | #ifdef V8_ENABLE_DIRECT_HANDLE |
1659 | | static constexpr Address kTaggedNullAddress = 1; |
1660 | | |
1661 | | using InternalRepresentationType = internal::Address; |
1662 | | static constexpr InternalRepresentationType kEmpty = kTaggedNullAddress; |
1663 | | #else |
1664 | | using InternalRepresentationType = internal::Address*; |
1665 | | static constexpr InternalRepresentationType kEmpty = nullptr; |
1666 | | #endif // V8_ENABLE_DIRECT_HANDLE |
1667 | | |
1668 | | template <typename T> |
1669 | 584k | V8_INLINE static bool IsEmpty(T* value) { |
1670 | 584k | return ValueAsRepr(value) == kEmpty; |
1671 | 584k | } Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::Data>(v8::Data*) bool v8::internal::ValueHelper::IsEmpty<v8::Context>(v8::Context*) Line | Count | Source | 1669 | 10.5k | V8_INLINE static bool IsEmpty(T* value) { | 1670 | 10.5k | return ValueAsRepr(value) == kEmpty; | 1671 | 10.5k | } |
bool v8::internal::ValueHelper::IsEmpty<v8::Function>(v8::Function*) Line | Count | Source | 1669 | 875 | V8_INLINE static bool IsEmpty(T* value) { | 1670 | 875 | return ValueAsRepr(value) == kEmpty; | 1671 | 875 | } |
bool v8::internal::ValueHelper::IsEmpty<v8::Object>(v8::Object*) Line | Count | Source | 1669 | 840 | V8_INLINE static bool IsEmpty(T* value) { | 1670 | 840 | return ValueAsRepr(value) == kEmpty; | 1671 | 840 | } |
bool v8::internal::ValueHelper::IsEmpty<v8::Value>(v8::Value*) Line | Count | Source | 1669 | 570k | V8_INLINE static bool IsEmpty(T* value) { | 1670 | 570k | return ValueAsRepr(value) == kEmpty; | 1671 | 570k | } |
Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::Int8Array>(v8::Int8Array*) bool v8::internal::ValueHelper::IsEmpty<v8::Uint8Array>(v8::Uint8Array*) Line | Count | Source | 1669 | 245 | V8_INLINE static bool IsEmpty(T* value) { | 1670 | 245 | return ValueAsRepr(value) == kEmpty; | 1671 | 245 | } |
Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::Int16Array>(v8::Int16Array*) Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::Uint16Array>(v8::Uint16Array*) bool v8::internal::ValueHelper::IsEmpty<v8::Int32Array>(v8::Int32Array*) Line | Count | Source | 1669 | 175 | V8_INLINE static bool IsEmpty(T* value) { | 1670 | 175 | return ValueAsRepr(value) == kEmpty; | 1671 | 175 | } |
bool v8::internal::ValueHelper::IsEmpty<v8::Uint32Array>(v8::Uint32Array*) Line | Count | Source | 1669 | 490 | V8_INLINE static bool IsEmpty(T* value) { | 1670 | 490 | return ValueAsRepr(value) == kEmpty; | 1671 | 490 | } |
Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::Float32Array>(v8::Float32Array*) bool v8::internal::ValueHelper::IsEmpty<v8::Float64Array>(v8::Float64Array*) Line | Count | Source | 1669 | 350 | V8_INLINE static bool IsEmpty(T* value) { | 1670 | 350 | return ValueAsRepr(value) == kEmpty; | 1671 | 350 | } |
bool v8::internal::ValueHelper::IsEmpty<v8::BigInt64Array>(v8::BigInt64Array*) Line | Count | Source | 1669 | 140 | V8_INLINE static bool IsEmpty(T* value) { | 1670 | 140 | return ValueAsRepr(value) == kEmpty; | 1671 | 140 | } |
bool v8::internal::ValueHelper::IsEmpty<v8::Array>(v8::Array*) Line | Count | Source | 1669 | 35 | V8_INLINE static bool IsEmpty(T* value) { | 1670 | 35 | return ValueAsRepr(value) == kEmpty; | 1671 | 35 | } |
Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::Module>(v8::Module*) Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::ArrayBuffer>(v8::ArrayBuffer*) Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::UnboundScript>(v8::UnboundScript*) Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::Promise>(v8::Promise*) Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::Promise::Resolver>(v8::Promise::Resolver*) Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::SharedArrayBuffer>(v8::SharedArrayBuffer*) Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::RegExp>(v8::RegExp*) Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::WasmMemoryObject>(v8::WasmMemoryObject*) Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::Map>(v8::Map*) Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::ArrayBufferView>(v8::ArrayBufferView*) Unexecuted instantiation: bool v8::internal::ValueHelper::IsEmpty<v8::FunctionTemplate>(v8::FunctionTemplate*) |
1672 | | |
1673 | | // Returns a handle's "value" for all kinds of abstract handles. For Local, |
1674 | | // it is equivalent to `*handle`. The variadic parameters support handle |
1675 | | // types with extra type parameters, like `Persistent<T, M>`. |
1676 | | template <template <typename T, typename... Ms> typename H, typename T, |
1677 | | typename... Ms> |
1678 | | V8_INLINE static T* HandleAsValue(const H<T, Ms...>& handle) { |
1679 | | return handle.template value<T>(); |
1680 | | } |
1681 | | |
1682 | | #ifdef V8_ENABLE_DIRECT_HANDLE |
1683 | | |
1684 | | template <typename T> |
1685 | | V8_INLINE static Address ValueAsAddress(const T* value) { |
1686 | | return reinterpret_cast<Address>(value); |
1687 | | } |
1688 | | |
1689 | | template <typename T, bool check_null = true, typename S> |
1690 | | V8_INLINE static T* SlotAsValue(S* slot) { |
1691 | | if (check_null && slot == nullptr) { |
1692 | | return reinterpret_cast<T*>(kTaggedNullAddress); |
1693 | | } |
1694 | | return *reinterpret_cast<T**>(slot); |
1695 | | } |
1696 | | |
1697 | | template <typename T> |
1698 | | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { |
1699 | | return reinterpret_cast<InternalRepresentationType>(value); |
1700 | | } |
1701 | | |
1702 | | template <typename T> |
1703 | | V8_INLINE static T* ReprAsValue(InternalRepresentationType repr) { |
1704 | | return reinterpret_cast<T*>(repr); |
1705 | | } |
1706 | | |
1707 | | #else // !V8_ENABLE_DIRECT_HANDLE |
1708 | | |
1709 | | template <typename T> |
1710 | 2.32M | V8_INLINE static Address ValueAsAddress(const T* value) { |
1711 | 2.32M | return *reinterpret_cast<const Address*>(value); |
1712 | 2.32M | } unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Value>(v8::Value const*) Line | Count | Source | 1710 | 580k | V8_INLINE static Address ValueAsAddress(const T* value) { | 1711 | 580k | return *reinterpret_cast<const Address*>(value); | 1712 | 580k | } |
Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Data>(v8::Data const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::String>(v8::String const*) unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Object>(v8::Object const*) Line | Count | Source | 1710 | 840 | V8_INLINE static Address ValueAsAddress(const T* value) { | 1711 | 840 | return *reinterpret_cast<const Address*>(value); | 1712 | 840 | } |
unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Context>(v8::Context const*) Line | Count | Source | 1710 | 1.73M | V8_INLINE static Address ValueAsAddress(const T* value) { | 1711 | 1.73M | return *reinterpret_cast<const Address*>(value); | 1712 | 1.73M | } |
unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Function>(v8::Function const*) Line | Count | Source | 1710 | 875 | V8_INLINE static Address ValueAsAddress(const T* value) { | 1711 | 875 | return *reinterpret_cast<const Address*>(value); | 1712 | 875 | } |
Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Int8Array>(v8::Int8Array const*) unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Uint8Array>(v8::Uint8Array const*) Line | Count | Source | 1710 | 245 | V8_INLINE static Address ValueAsAddress(const T* value) { | 1711 | 245 | return *reinterpret_cast<const Address*>(value); | 1712 | 245 | } |
Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Int16Array>(v8::Int16Array const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Uint16Array>(v8::Uint16Array const*) unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Int32Array>(v8::Int32Array const*) Line | Count | Source | 1710 | 175 | V8_INLINE static Address ValueAsAddress(const T* value) { | 1711 | 175 | return *reinterpret_cast<const Address*>(value); | 1712 | 175 | } |
unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Uint32Array>(v8::Uint32Array const*) Line | Count | Source | 1710 | 490 | V8_INLINE static Address ValueAsAddress(const T* value) { | 1711 | 490 | return *reinterpret_cast<const Address*>(value); | 1712 | 490 | } |
Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Float32Array>(v8::Float32Array const*) unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Float64Array>(v8::Float64Array const*) Line | Count | Source | 1710 | 350 | V8_INLINE static Address ValueAsAddress(const T* value) { | 1711 | 350 | return *reinterpret_cast<const Address*>(value); | 1712 | 350 | } |
unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::BigInt64Array>(v8::BigInt64Array const*) Line | Count | Source | 1710 | 140 | V8_INLINE static Address ValueAsAddress(const T* value) { | 1711 | 140 | return *reinterpret_cast<const Address*>(value); | 1712 | 140 | } |
unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Array>(v8::Array const*) Line | Count | Source | 1710 | 35 | V8_INLINE static Address ValueAsAddress(const T* value) { | 1711 | 35 | return *reinterpret_cast<const Address*>(value); | 1712 | 35 | } |
Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Private>(v8::Private const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Symbol>(v8::Symbol const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::DictionaryTemplate>(v8::DictionaryTemplate const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::FunctionTemplate>(v8::FunctionTemplate const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::ObjectTemplate>(v8::ObjectTemplate const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Module>(v8::Module const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::ArrayBuffer>(v8::ArrayBuffer const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::UnboundScript>(v8::UnboundScript const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Promise>(v8::Promise const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Promise::Resolver>(v8::Promise::Resolver const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::SharedArrayBuffer>(v8::SharedArrayBuffer const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::RegExp>(v8::RegExp const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::WasmMemoryObject>(v8::WasmMemoryObject const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::Map>(v8::Map const*) Unexecuted instantiation: unsigned long v8::internal::ValueHelper::ValueAsAddress<v8::ArrayBufferView>(v8::ArrayBufferView const*) |
1713 | | |
1714 | | template <typename T, bool check_null = true, typename S> |
1715 | 3.89M | V8_INLINE static T* SlotAsValue(S* slot) { |
1716 | 3.89M | return reinterpret_cast<T*>(slot); |
1717 | 3.89M | } v8::Value* v8::internal::ValueHelper::SlotAsValue<v8::Value, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 329k | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 329k | return reinterpret_cast<T*>(slot); | 1717 | 329k | } |
v8::Data* v8::internal::ValueHelper::SlotAsValue<v8::Data, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 5.00k | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 5.00k | return reinterpret_cast<T*>(slot); | 1717 | 5.00k | } |
v8::Object* v8::internal::ValueHelper::SlotAsValue<v8::Object, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 39.6k | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 39.6k | return reinterpret_cast<T*>(slot); | 1717 | 39.6k | } |
v8::Context* v8::internal::ValueHelper::SlotAsValue<v8::Context, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 2.89M | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 2.89M | return reinterpret_cast<T*>(slot); | 1717 | 2.89M | } |
Unexecuted instantiation: v8::Date* v8::internal::ValueHelper::SlotAsValue<v8::Date, false, unsigned long>(unsigned long*) v8::FunctionTemplate* v8::internal::ValueHelper::SlotAsValue<v8::FunctionTemplate, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 14.7k | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 14.7k | return reinterpret_cast<T*>(slot); | 1717 | 14.7k | } |
v8::Template* v8::internal::ValueHelper::SlotAsValue<v8::Template, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 6.61k | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 6.61k | return reinterpret_cast<T*>(slot); | 1717 | 6.61k | } |
v8::Function* v8::internal::ValueHelper::SlotAsValue<v8::Function, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 4.79k | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 4.79k | return reinterpret_cast<T*>(slot); | 1717 | 4.79k | } |
v8::ObjectTemplate* v8::internal::ValueHelper::SlotAsValue<v8::ObjectTemplate, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 9.17k | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 9.17k | return reinterpret_cast<T*>(slot); | 1717 | 9.17k | } |
Unexecuted instantiation: v8::Integer* v8::internal::ValueHelper::SlotAsValue<v8::Integer, false, unsigned long>(unsigned long*) v8::Context* v8::internal::ValueHelper::SlotAsValue<v8::Context, true, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 10.3k | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 10.3k | return reinterpret_cast<T*>(slot); | 1717 | 10.3k | } |
v8::Script* v8::internal::ValueHelper::SlotAsValue<v8::Script, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 42 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 42 | return reinterpret_cast<T*>(slot); | 1717 | 42 | } |
v8::Object* v8::internal::ValueHelper::SlotAsValue<v8::Object, true, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 280 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 280 | return reinterpret_cast<T*>(slot); | 1717 | 280 | } |
v8::Array* v8::internal::ValueHelper::SlotAsValue<v8::Array, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 288k | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 288k | return reinterpret_cast<T*>(slot); | 1717 | 288k | } |
Unexecuted instantiation: v8::Number* v8::internal::ValueHelper::SlotAsValue<v8::Number, false, unsigned long>(unsigned long*) v8::DictionaryTemplate* v8::internal::ValueHelper::SlotAsValue<v8::DictionaryTemplate, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 35 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 35 | return reinterpret_cast<T*>(slot); | 1717 | 35 | } |
Unexecuted instantiation: v8::Int8Array* v8::internal::ValueHelper::SlotAsValue<v8::Int8Array, true, unsigned long>(unsigned long*) v8::Uint8Array* v8::internal::ValueHelper::SlotAsValue<v8::Uint8Array, true, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 140 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 140 | return reinterpret_cast<T*>(slot); | 1717 | 140 | } |
Unexecuted instantiation: v8::Int16Array* v8::internal::ValueHelper::SlotAsValue<v8::Int16Array, true, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Uint16Array* v8::internal::ValueHelper::SlotAsValue<v8::Uint16Array, true, unsigned long>(unsigned long*) v8::Int32Array* v8::internal::ValueHelper::SlotAsValue<v8::Int32Array, true, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 70 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 70 | return reinterpret_cast<T*>(slot); | 1717 | 70 | } |
v8::Uint32Array* v8::internal::ValueHelper::SlotAsValue<v8::Uint32Array, true, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 245 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 245 | return reinterpret_cast<T*>(slot); | 1717 | 245 | } |
Unexecuted instantiation: v8::Float32Array* v8::internal::ValueHelper::SlotAsValue<v8::Float32Array, true, unsigned long>(unsigned long*) v8::Float64Array* v8::internal::ValueHelper::SlotAsValue<v8::Float64Array, true, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 175 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 175 | return reinterpret_cast<T*>(slot); | 1717 | 175 | } |
v8::BigInt64Array* v8::internal::ValueHelper::SlotAsValue<v8::BigInt64Array, true, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 70 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 70 | return reinterpret_cast<T*>(slot); | 1717 | 70 | } |
v8::Value* v8::internal::ValueHelper::SlotAsValue<v8::Value, true, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 285k | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 285k | return reinterpret_cast<T*>(slot); | 1717 | 285k | } |
Unexecuted instantiation: v8::Function* v8::internal::ValueHelper::SlotAsValue<v8::Function, true, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Private* v8::internal::ValueHelper::SlotAsValue<v8::Private, false, unsigned long>(unsigned long*) v8::Symbol* v8::internal::ValueHelper::SlotAsValue<v8::Symbol, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 770 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 770 | return reinterpret_cast<T*>(slot); | 1717 | 770 | } |
v8::String* v8::internal::ValueHelper::SlotAsValue<v8::String, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 1.68k | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 1.68k | return reinterpret_cast<T*>(slot); | 1717 | 1.68k | } |
v8::ArrayBuffer* v8::internal::ValueHelper::SlotAsValue<v8::ArrayBuffer, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 770 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 770 | return reinterpret_cast<T*>(slot); | 1717 | 770 | } |
v8::Int32Array* v8::internal::ValueHelper::SlotAsValue<v8::Int32Array, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 105 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 105 | return reinterpret_cast<T*>(slot); | 1717 | 105 | } |
v8::Uint32Array* v8::internal::ValueHelper::SlotAsValue<v8::Uint32Array, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 245 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 245 | return reinterpret_cast<T*>(slot); | 1717 | 245 | } |
Unexecuted instantiation: v8::Promise* v8::internal::ValueHelper::SlotAsValue<v8::Promise, false, unsigned long>(unsigned long*) v8::Uint8Array* v8::internal::ValueHelper::SlotAsValue<v8::Uint8Array, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 175 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 175 | return reinterpret_cast<T*>(slot); | 1717 | 175 | } |
v8::Float64Array* v8::internal::ValueHelper::SlotAsValue<v8::Float64Array, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 175 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 175 | return reinterpret_cast<T*>(slot); | 1717 | 175 | } |
Unexecuted instantiation: v8::Array* v8::internal::ValueHelper::SlotAsValue<v8::Array, true, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Uint32* v8::internal::ValueHelper::SlotAsValue<v8::Uint32, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::ModuleRequest* v8::internal::ValueHelper::SlotAsValue<v8::ModuleRequest, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Module* v8::internal::ValueHelper::SlotAsValue<v8::Module, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Module* v8::internal::ValueHelper::SlotAsValue<v8::Module, true, unsigned long>(unsigned long*) v8::PrimitiveArray* v8::internal::ValueHelper::SlotAsValue<v8::PrimitiveArray, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 35 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 35 | return reinterpret_cast<T*>(slot); | 1717 | 35 | } |
Unexecuted instantiation: v8::Int32* v8::internal::ValueHelper::SlotAsValue<v8::Int32, false, unsigned long>(unsigned long*) v8::ArrayBufferView* v8::internal::ValueHelper::SlotAsValue<v8::ArrayBufferView, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 105 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 105 | return reinterpret_cast<T*>(slot); | 1717 | 105 | } |
Unexecuted instantiation: v8::UnboundModuleScript* v8::internal::ValueHelper::SlotAsValue<v8::UnboundModuleScript, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::FixedArray* v8::internal::ValueHelper::SlotAsValue<v8::FixedArray, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Promise::Resolver* v8::internal::ValueHelper::SlotAsValue<v8::Promise::Resolver, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::ArrayBuffer* v8::internal::ValueHelper::SlotAsValue<v8::ArrayBuffer, true, unsigned long>(unsigned long*) Unexecuted instantiation: v8::SharedArrayBuffer* v8::internal::ValueHelper::SlotAsValue<v8::SharedArrayBuffer, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Set* v8::internal::ValueHelper::SlotAsValue<v8::Set, false, unsigned long>(unsigned long*) v8::Boolean* v8::internal::ValueHelper::SlotAsValue<v8::Boolean, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 105 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 105 | return reinterpret_cast<T*>(slot); | 1717 | 105 | } |
Unexecuted instantiation: v8::Message* v8::internal::ValueHelper::SlotAsValue<v8::Message, false, unsigned long>(unsigned long*) v8::Name* v8::internal::ValueHelper::SlotAsValue<v8::Name, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 280 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 280 | return reinterpret_cast<T*>(slot); | 1717 | 280 | } |
Unexecuted instantiation: v8::UnboundScript* v8::internal::ValueHelper::SlotAsValue<v8::UnboundScript, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::UnboundScript* v8::internal::ValueHelper::SlotAsValue<v8::UnboundScript, true, unsigned long>(unsigned long*) v8::BigInt64Array* v8::internal::ValueHelper::SlotAsValue<v8::BigInt64Array, false, unsigned long>(unsigned long*) Line | Count | Source | 1715 | 70 | V8_INLINE static T* SlotAsValue(S* slot) { | 1716 | 70 | return reinterpret_cast<T*>(slot); | 1717 | 70 | } |
Unexecuted instantiation: v8::StackFrame* v8::internal::ValueHelper::SlotAsValue<v8::StackFrame, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::StackTrace* v8::internal::ValueHelper::SlotAsValue<v8::StackTrace, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::BigInt* v8::internal::ValueHelper::SlotAsValue<v8::BigInt, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Promise* v8::internal::ValueHelper::SlotAsValue<v8::Promise, true, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Promise::Resolver* v8::internal::ValueHelper::SlotAsValue<v8::Promise::Resolver, true, unsigned long>(unsigned long*) Unexecuted instantiation: v8::WasmModuleObject* v8::internal::ValueHelper::SlotAsValue<v8::WasmModuleObject, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::External* v8::internal::ValueHelper::SlotAsValue<v8::External, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Map* v8::internal::ValueHelper::SlotAsValue<v8::Map, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::RegExp* v8::internal::ValueHelper::SlotAsValue<v8::RegExp, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::RegExp* v8::internal::ValueHelper::SlotAsValue<v8::RegExp, true, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Proxy* v8::internal::ValueHelper::SlotAsValue<v8::Proxy, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::WasmMemoryObject* v8::internal::ValueHelper::SlotAsValue<v8::WasmMemoryObject, true, unsigned long>(unsigned long*) Unexecuted instantiation: v8::WasmMemoryObject* v8::internal::ValueHelper::SlotAsValue<v8::WasmMemoryObject, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::Map* v8::internal::ValueHelper::SlotAsValue<v8::Map, true, unsigned long>(unsigned long*) Unexecuted instantiation: v8::ArrayBufferView* v8::internal::ValueHelper::SlotAsValue<v8::ArrayBufferView, true, unsigned long>(unsigned long*) Unexecuted instantiation: v8::TypedArray* v8::internal::ValueHelper::SlotAsValue<v8::TypedArray, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::DataView* v8::internal::ValueHelper::SlotAsValue<v8::DataView, false, unsigned long>(unsigned long*) Unexecuted instantiation: v8::FunctionTemplate* v8::internal::ValueHelper::SlotAsValue<v8::FunctionTemplate, true, unsigned long>(unsigned long*) |
1718 | | |
1719 | | template <typename T> |
1720 | 584k | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { |
1721 | 584k | return const_cast<InternalRepresentationType>( |
1722 | 584k | reinterpret_cast<const Address*>(value)); |
1723 | 584k | } Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Data>(v8::Data const*) unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Context>(v8::Context const*) Line | Count | Source | 1720 | 10.5k | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { | 1721 | 10.5k | return const_cast<InternalRepresentationType>( | 1722 | 10.5k | reinterpret_cast<const Address*>(value)); | 1723 | 10.5k | } |
unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Function>(v8::Function const*) Line | Count | Source | 1720 | 875 | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { | 1721 | 875 | return const_cast<InternalRepresentationType>( | 1722 | 875 | reinterpret_cast<const Address*>(value)); | 1723 | 875 | } |
unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Object>(v8::Object const*) Line | Count | Source | 1720 | 840 | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { | 1721 | 840 | return const_cast<InternalRepresentationType>( | 1722 | 840 | reinterpret_cast<const Address*>(value)); | 1723 | 840 | } |
unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Value>(v8::Value const*) Line | Count | Source | 1720 | 570k | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { | 1721 | 570k | return const_cast<InternalRepresentationType>( | 1722 | 570k | reinterpret_cast<const Address*>(value)); | 1723 | 570k | } |
Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Int8Array>(v8::Int8Array const*) unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Uint8Array>(v8::Uint8Array const*) Line | Count | Source | 1720 | 245 | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { | 1721 | 245 | return const_cast<InternalRepresentationType>( | 1722 | 245 | reinterpret_cast<const Address*>(value)); | 1723 | 245 | } |
Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Int16Array>(v8::Int16Array const*) Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Uint16Array>(v8::Uint16Array const*) unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Int32Array>(v8::Int32Array const*) Line | Count | Source | 1720 | 175 | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { | 1721 | 175 | return const_cast<InternalRepresentationType>( | 1722 | 175 | reinterpret_cast<const Address*>(value)); | 1723 | 175 | } |
unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Uint32Array>(v8::Uint32Array const*) Line | Count | Source | 1720 | 490 | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { | 1721 | 490 | return const_cast<InternalRepresentationType>( | 1722 | 490 | reinterpret_cast<const Address*>(value)); | 1723 | 490 | } |
Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Float32Array>(v8::Float32Array const*) unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Float64Array>(v8::Float64Array const*) Line | Count | Source | 1720 | 350 | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { | 1721 | 350 | return const_cast<InternalRepresentationType>( | 1722 | 350 | reinterpret_cast<const Address*>(value)); | 1723 | 350 | } |
unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::BigInt64Array>(v8::BigInt64Array const*) Line | Count | Source | 1720 | 140 | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { | 1721 | 140 | return const_cast<InternalRepresentationType>( | 1722 | 140 | reinterpret_cast<const Address*>(value)); | 1723 | 140 | } |
unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Array>(v8::Array const*) Line | Count | Source | 1720 | 35 | V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { | 1721 | 35 | return const_cast<InternalRepresentationType>( | 1722 | 35 | reinterpret_cast<const Address*>(value)); | 1723 | 35 | } |
Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Module>(v8::Module const*) Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::ArrayBuffer>(v8::ArrayBuffer const*) Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::UnboundScript>(v8::UnboundScript const*) Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Promise>(v8::Promise const*) Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Promise::Resolver>(v8::Promise::Resolver const*) Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::SharedArrayBuffer>(v8::SharedArrayBuffer const*) Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::RegExp>(v8::RegExp const*) Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::WasmMemoryObject>(v8::WasmMemoryObject const*) Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::Map>(v8::Map const*) Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::ArrayBufferView>(v8::ArrayBufferView const*) Unexecuted instantiation: unsigned long* v8::internal::ValueHelper::ValueAsRepr<v8::FunctionTemplate>(v8::FunctionTemplate const*) |
1724 | | |
1725 | | template <typename T> |
1726 | 0 | V8_INLINE static T* ReprAsValue(InternalRepresentationType repr) { |
1727 | 0 | return reinterpret_cast<T*>(repr); |
1728 | 0 | } Unexecuted instantiation: v8::Private* v8::internal::ValueHelper::ReprAsValue<v8::Private>(unsigned long*) Unexecuted instantiation: v8::Symbol* v8::internal::ValueHelper::ReprAsValue<v8::Symbol>(unsigned long*) Unexecuted instantiation: v8::String* v8::internal::ValueHelper::ReprAsValue<v8::String>(unsigned long*) Unexecuted instantiation: v8::DictionaryTemplate* v8::internal::ValueHelper::ReprAsValue<v8::DictionaryTemplate>(unsigned long*) Unexecuted instantiation: v8::FunctionTemplate* v8::internal::ValueHelper::ReprAsValue<v8::FunctionTemplate>(unsigned long*) Unexecuted instantiation: v8::ObjectTemplate* v8::internal::ValueHelper::ReprAsValue<v8::ObjectTemplate>(unsigned long*) Unexecuted instantiation: v8::Uint32Array* v8::internal::ValueHelper::ReprAsValue<v8::Uint32Array>(unsigned long*) Unexecuted instantiation: v8::Uint8Array* v8::internal::ValueHelper::ReprAsValue<v8::Uint8Array>(unsigned long*) Unexecuted instantiation: v8::Float64Array* v8::internal::ValueHelper::ReprAsValue<v8::Float64Array>(unsigned long*) Unexecuted instantiation: v8::Array* v8::internal::ValueHelper::ReprAsValue<v8::Array>(unsigned long*) Unexecuted instantiation: v8::Object* v8::internal::ValueHelper::ReprAsValue<v8::Object>(unsigned long*) Unexecuted instantiation: v8::Int32Array* v8::internal::ValueHelper::ReprAsValue<v8::Int32Array>(unsigned long*) Unexecuted instantiation: v8::BigInt64Array* v8::internal::ValueHelper::ReprAsValue<v8::BigInt64Array>(unsigned long*) Unexecuted instantiation: v8::Function* v8::internal::ValueHelper::ReprAsValue<v8::Function>(unsigned long*) Unexecuted instantiation: v8::Context* v8::internal::ValueHelper::ReprAsValue<v8::Context>(unsigned long*) |
1729 | | |
1730 | | #endif // V8_ENABLE_DIRECT_HANDLE |
1731 | | }; |
1732 | | |
1733 | | /** |
1734 | | * Helper functions about handles. |
1735 | | */ |
1736 | | class HandleHelper final { |
1737 | | public: |
1738 | | /** |
1739 | | * Checks whether two handles are equal. |
1740 | | * They are equal iff they are both empty or they are both non-empty and the |
1741 | | * objects to which they refer are physically equal. |
1742 | | * |
1743 | | * If both handles refer to JS objects, this is the same as strict equality. |
1744 | | * For primitives, such as numbers or strings, a `false` return value does not |
1745 | | * indicate that the values aren't equal in the JavaScript sense. |
1746 | | * Use `Value::StrictEquals()` to check primitives for equality. |
1747 | | */ |
1748 | | template <typename T1, typename T2> |
1749 | 285k | V8_INLINE static bool EqualHandles(const T1& lhs, const T2& rhs) { |
1750 | 285k | if (lhs.IsEmpty()) return rhs.IsEmpty(); |
1751 | 285k | if (rhs.IsEmpty()) return false; |
1752 | 285k | return lhs.ptr() == rhs.ptr(); |
1753 | 285k | } Unexecuted instantiation: bool v8::internal::HandleHelper::EqualHandles<v8::TracedReferenceBase, v8::TracedReferenceBase>(v8::TracedReferenceBase const&, v8::TracedReferenceBase const&) Unexecuted instantiation: bool v8::internal::HandleHelper::EqualHandles<v8::Local<v8::Object>, v8::Local<v8::Object> >(v8::Local<v8::Object> const&, v8::Local<v8::Object> const&) bool v8::internal::HandleHelper::EqualHandles<v8::Local<v8::Context>, v8::Local<v8::Context> >(v8::Local<v8::Context> const&, v8::Local<v8::Context> const&) Line | Count | Source | 1749 | 285k | V8_INLINE static bool EqualHandles(const T1& lhs, const T2& rhs) { | 1750 | 285k | if (lhs.IsEmpty()) return rhs.IsEmpty(); | 1751 | 285k | if (rhs.IsEmpty()) return false; | 1752 | 285k | return lhs.ptr() == rhs.ptr(); | 1753 | 285k | } |
Unexecuted instantiation: bool v8::internal::HandleHelper::EqualHandles<v8::PersistentBase<v8::Context>, v8::Local<v8::Context> >(v8::PersistentBase<v8::Context> const&, v8::Local<v8::Context> const&) Unexecuted instantiation: bool v8::internal::HandleHelper::EqualHandles<v8::Local<v8::Data>, v8::Local<v8::Data> >(v8::Local<v8::Data> const&, v8::Local<v8::Data> const&) Unexecuted instantiation: bool v8::internal::HandleHelper::EqualHandles<v8::PersistentBase<v8::Module>, v8::Local<v8::Module> >(v8::PersistentBase<v8::Module> const&, v8::Local<v8::Module> const&) Unexecuted instantiation: bool v8::internal::HandleHelper::EqualHandles<v8::Local<v8::Symbol>, v8::Local<v8::Symbol> >(v8::Local<v8::Symbol> const&, v8::Local<v8::Symbol> const&) Unexecuted instantiation: bool v8::internal::HandleHelper::EqualHandles<v8::Local<v8::Value>, v8::Local<v8::Symbol> >(v8::Local<v8::Value> const&, v8::Local<v8::Symbol> const&) Unexecuted instantiation: bool v8::internal::HandleHelper::EqualHandles<v8::Local<v8::Value>, v8::Local<v8::Object> >(v8::Local<v8::Value> const&, v8::Local<v8::Object> const&) Unexecuted instantiation: bool v8::internal::HandleHelper::EqualHandles<v8::Local<v8::SharedArrayBuffer>, v8::Local<v8::SharedArrayBuffer> >(v8::Local<v8::SharedArrayBuffer> const&, v8::Local<v8::SharedArrayBuffer> const&) Unexecuted instantiation: bool v8::internal::HandleHelper::EqualHandles<v8::Local<v8::ArrayBuffer>, v8::Local<v8::ArrayBuffer> >(v8::Local<v8::ArrayBuffer> const&, v8::Local<v8::ArrayBuffer> const&) Unexecuted instantiation: bool v8::internal::HandleHelper::EqualHandles<v8::Local<v8::Object>, v8::Local<v8::Value> >(v8::Local<v8::Object> const&, v8::Local<v8::Value> const&) |
1754 | | }; |
1755 | | |
1756 | | V8_EXPORT void VerifyHandleIsNonEmpty(bool is_empty); |
1757 | | |
1758 | | // These functions are here just to match friend declarations in |
1759 | | // XxxCallbackInfo classes allowing these functions to access the internals |
1760 | | // of the info objects. These functions are supposed to be called by debugger |
1761 | | // macros. |
1762 | | void PrintFunctionCallbackInfo(void* function_callback_info); |
1763 | | void PrintPropertyCallbackInfo(void* property_callback_info); |
1764 | | |
1765 | | } // namespace internal |
1766 | | } // namespace v8 |
1767 | | |
1768 | | #endif // INCLUDE_V8_INTERNAL_H_ |