libv8-node 22.7.0.4-x86_64-linux-musl → 23.6.1.0-x86_64-linux-musl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/libv8/node/version.rb +3 -3
- data/vendor/v8/include/cppgc/allocation.h +10 -11
- data/vendor/v8/include/cppgc/garbage-collected.h +8 -0
- data/vendor/v8/include/cppgc/heap-statistics.h +2 -0
- data/vendor/v8/include/cppgc/internal/api-constants.h +6 -1
- data/vendor/v8/include/cppgc/internal/compiler-specific.h +9 -1
- data/vendor/v8/include/cppgc/internal/gc-info.h +12 -10
- data/vendor/v8/include/cppgc/internal/member-storage.h +6 -0
- data/vendor/v8/include/cppgc/internal/name-trait.h +5 -1
- data/vendor/v8/include/cppgc/name-provider.h +7 -0
- data/vendor/v8/include/v8-array-buffer.h +44 -24
- data/vendor/v8/include/v8-callbacks.h +10 -5
- data/vendor/v8/include/v8-context.h +41 -9
- data/vendor/v8/include/v8-cppgc.h +3 -55
- data/vendor/v8/include/v8-date.h +9 -0
- data/vendor/v8/include/v8-embedder-heap.h +4 -1
- data/vendor/v8/include/v8-exception.h +70 -0
- data/vendor/v8/include/v8-fast-api-calls.h +31 -38
- data/vendor/v8/include/v8-function-callback.h +203 -62
- data/vendor/v8/include/v8-function.h +4 -3
- data/vendor/v8/include/v8-handle-base.h +2 -2
- data/vendor/v8/include/v8-initialization.h +18 -1
- data/vendor/v8/include/v8-inspector.h +6 -3
- data/vendor/v8/include/v8-internal.h +303 -58
- data/vendor/v8/include/v8-isolate.h +58 -39
- data/vendor/v8/include/v8-local-handle.h +18 -19
- data/vendor/v8/include/v8-message.h +0 -21
- data/vendor/v8/include/v8-metrics.h +4 -0
- data/vendor/v8/include/v8-microtask-queue.h +0 -5
- data/vendor/v8/include/v8-object.h +284 -35
- data/vendor/v8/include/v8-persistent-handle.h +0 -19
- data/vendor/v8/include/v8-platform.h +21 -35
- data/vendor/v8/include/v8-primitive.h +92 -1
- data/vendor/v8/include/v8-profiler.h +38 -1
- data/vendor/v8/include/v8-promise.h +2 -2
- data/vendor/v8/include/v8-sandbox.h +173 -0
- data/vendor/v8/include/v8-script.h +44 -14
- data/vendor/v8/include/v8-snapshot.h +38 -2
- data/vendor/v8/include/v8-template.h +105 -263
- data/vendor/v8/include/v8-traced-handle.h +4 -15
- data/vendor/v8/include/v8-unwinder.h +2 -1
- data/vendor/v8/include/v8-util.h +1 -117
- data/vendor/v8/include/v8-value.h +3 -2
- data/vendor/v8/include/v8-version.h +3 -3
- data/vendor/v8/include/v8-wasm.h +3 -0
- data/vendor/v8/include/v8config.h +51 -7
- data/vendor/v8/x86_64-linux-musl/libv8/obj/libv8_monolith.a +0 -0
- metadata +3 -2
| @@ -11,7 +11,9 @@ | |
| 11 11 |  | 
| 12 12 | 
             
            #include <atomic>
         | 
| 13 13 | 
             
            #include <iterator>
         | 
| 14 | 
            +
            #include <limits>
         | 
| 14 15 | 
             
            #include <memory>
         | 
| 16 | 
            +
            #include <optional>
         | 
| 15 17 | 
             
            #include <type_traits>
         | 
| 16 18 |  | 
| 17 19 | 
             
            #include "v8config.h"  // NOLINT(build/include_directory)
         | 
| @@ -87,7 +89,10 @@ struct SmiTagging<4> { | |
| 87 89 | 
             
                // Truncate and shift down (requires >> to be sign extending).
         | 
| 88 90 | 
             
                return static_cast<int32_t>(static_cast<uint32_t>(value)) >> shift_bits;
         | 
| 89 91 | 
             
              }
         | 
| 90 | 
            -
             | 
| 92 | 
            +
             | 
| 93 | 
            +
              template <class T, typename std::enable_if_t<std::is_integral_v<T> &&
         | 
| 94 | 
            +
                                                           std::is_signed_v<T>>* = nullptr>
         | 
| 95 | 
            +
              V8_INLINE static constexpr bool IsValidSmi(T value) {
         | 
| 91 96 | 
             
                // Is value in range [kSmiMinValue, kSmiMaxValue].
         | 
| 92 97 | 
             
                // Use unsigned operations in order to avoid undefined behaviour in case of
         | 
| 93 98 | 
             
                // signed integer overflow.
         | 
| @@ -96,6 +101,28 @@ struct SmiTagging<4> { | |
| 96 101 | 
             
                       (static_cast<uintptr_t>(kSmiMaxValue) -
         | 
| 97 102 | 
             
                        static_cast<uintptr_t>(kSmiMinValue));
         | 
| 98 103 | 
             
              }
         | 
| 104 | 
            +
             | 
| 105 | 
            +
              template <class T,
         | 
| 106 | 
            +
                        typename std::enable_if_t<std::is_integral_v<T> &&
         | 
| 107 | 
            +
                                                  std::is_unsigned_v<T>>* = nullptr>
         | 
| 108 | 
            +
              V8_INLINE static constexpr bool IsValidSmi(T value) {
         | 
| 109 | 
            +
                static_assert(kSmiMaxValue <= std::numeric_limits<uintptr_t>::max());
         | 
| 110 | 
            +
                return value <= static_cast<uintptr_t>(kSmiMaxValue);
         | 
| 111 | 
            +
              }
         | 
| 112 | 
            +
             | 
| 113 | 
            +
              // Same as the `intptr_t` version but works with int64_t on 32-bit builds
         | 
| 114 | 
            +
              // without slowing down anything else.
         | 
| 115 | 
            +
              V8_INLINE static constexpr bool IsValidSmi(int64_t value) {
         | 
| 116 | 
            +
                return (static_cast<uint64_t>(value) -
         | 
| 117 | 
            +
                        static_cast<uint64_t>(kSmiMinValue)) <=
         | 
| 118 | 
            +
                       (static_cast<uint64_t>(kSmiMaxValue) -
         | 
| 119 | 
            +
                        static_cast<uint64_t>(kSmiMinValue));
         | 
| 120 | 
            +
              }
         | 
| 121 | 
            +
             | 
| 122 | 
            +
              V8_INLINE static constexpr bool IsValidSmi(uint64_t value) {
         | 
| 123 | 
            +
                static_assert(kSmiMaxValue <= std::numeric_limits<uint64_t>::max());
         | 
| 124 | 
            +
                return value <= static_cast<uint64_t>(kSmiMaxValue);
         | 
| 125 | 
            +
              }
         | 
| 99 126 | 
             
            };
         | 
| 100 127 |  | 
| 101 128 | 
             
            // Smi constants for systems where tagged pointer is a 64-bit value.
         | 
| @@ -112,10 +139,21 @@ struct SmiTagging<8> { | |
| 112 139 | 
             
                // Shift down and throw away top 32 bits.
         | 
| 113 140 | 
             
                return static_cast<int>(static_cast<intptr_t>(value) >> shift_bits);
         | 
| 114 141 | 
             
              }
         | 
| 115 | 
            -
             | 
| 142 | 
            +
             | 
| 143 | 
            +
              template <class T, typename std::enable_if_t<std::is_integral_v<T> &&
         | 
| 144 | 
            +
                                                           std::is_signed_v<T>>* = nullptr>
         | 
| 145 | 
            +
              V8_INLINE static constexpr bool IsValidSmi(T value) {
         | 
| 116 146 | 
             
                // To be representable as a long smi, the value must be a 32-bit integer.
         | 
| 117 147 | 
             
                return (value == static_cast<int32_t>(value));
         | 
| 118 148 | 
             
              }
         | 
| 149 | 
            +
             | 
| 150 | 
            +
              template <class T,
         | 
| 151 | 
            +
                        typename std::enable_if_t<std::is_integral_v<T> &&
         | 
| 152 | 
            +
                                                  std::is_unsigned_v<T>>* = nullptr>
         | 
| 153 | 
            +
              V8_INLINE static constexpr bool IsValidSmi(T value) {
         | 
| 154 | 
            +
                return (static_cast<uintptr_t>(value) ==
         | 
| 155 | 
            +
                        static_cast<uintptr_t>(static_cast<int32_t>(value)));
         | 
| 156 | 
            +
              }
         | 
| 119 157 | 
             
            };
         | 
| 120 158 |  | 
| 121 159 | 
             
            #ifdef V8_COMPRESS_POINTERS
         | 
| @@ -253,15 +291,15 @@ static_assert(1ULL << (64 - kBoundedSizeShift) == | |
| 253 291 | 
             
            // size allows omitting bounds checks on table accesses if the indices are
         | 
| 254 292 | 
             
            // guaranteed (e.g. through shifting) to be below the maximum index. This
         | 
| 255 293 | 
             
            // value must be a power of two.
         | 
| 256 | 
            -
            constexpr size_t kExternalPointerTableReservationSize =  | 
| 294 | 
            +
            constexpr size_t kExternalPointerTableReservationSize = 256 * MB;
         | 
| 257 295 |  | 
| 258 296 | 
             
            // The external pointer table indices stored in HeapObjects as external
         | 
| 259 297 | 
             
            // pointers are shifted to the left by this amount to guarantee that they are
         | 
| 260 298 | 
             
            // smaller than the maximum table size.
         | 
| 261 | 
            -
            constexpr uint32_t kExternalPointerIndexShift =  | 
| 299 | 
            +
            constexpr uint32_t kExternalPointerIndexShift = 7;
         | 
| 262 300 | 
             
            #else
         | 
| 263 | 
            -
            constexpr size_t kExternalPointerTableReservationSize =  | 
| 264 | 
            -
            constexpr uint32_t kExternalPointerIndexShift =  | 
| 301 | 
            +
            constexpr size_t kExternalPointerTableReservationSize = 512 * MB;
         | 
| 302 | 
            +
            constexpr uint32_t kExternalPointerIndexShift = 6;
         | 
| 265 303 | 
             
            #endif  // V8_TARGET_OS_ANDROID
         | 
| 266 304 |  | 
| 267 305 | 
             
            // The maximum number of entries in an external pointer table.
         | 
| @@ -301,6 +339,95 @@ using ExternalPointer_t = Address; | |
| 301 339 | 
             
            constexpr ExternalPointer_t kNullExternalPointer = 0;
         | 
| 302 340 | 
             
            constexpr ExternalPointerHandle kNullExternalPointerHandle = 0;
         | 
| 303 341 |  | 
| 342 | 
            +
            // See `ExternalPointerHandle` for the main documentation. The difference to
         | 
| 343 | 
            +
            // `ExternalPointerHandle` is that the handle does not represent an arbitrary
         | 
| 344 | 
            +
            // external pointer but always refers to an object managed by `CppHeap`. The
         | 
| 345 | 
            +
            // handles are using in combination with a dedicated table for `CppHeap`
         | 
| 346 | 
            +
            // references.
         | 
| 347 | 
            +
            using CppHeapPointerHandle = uint32_t;
         | 
| 348 | 
            +
             | 
| 349 | 
            +
            // The actual pointer to objects located on the `CppHeap`. When pointer
         | 
| 350 | 
            +
            // compression is enabled these pointers are stored as `CppHeapPointerHandle`.
         | 
| 351 | 
            +
            // In non-compressed configurations the pointers are simply stored as raw
         | 
| 352 | 
            +
            // pointers.
         | 
| 353 | 
            +
            #ifdef V8_COMPRESS_POINTERS
         | 
| 354 | 
            +
            using CppHeapPointer_t = CppHeapPointerHandle;
         | 
| 355 | 
            +
            #else
         | 
| 356 | 
            +
            using CppHeapPointer_t = Address;
         | 
| 357 | 
            +
            #endif
         | 
| 358 | 
            +
             | 
| 359 | 
            +
            constexpr CppHeapPointer_t kNullCppHeapPointer = 0;
         | 
| 360 | 
            +
            constexpr CppHeapPointerHandle kNullCppHeapPointerHandle = 0;
         | 
| 361 | 
            +
             | 
| 362 | 
            +
            constexpr uint64_t kCppHeapPointerMarkBit = 1ULL;
         | 
| 363 | 
            +
            constexpr uint64_t kCppHeapPointerTagShift = 1;
         | 
| 364 | 
            +
            constexpr uint64_t kCppHeapPointerPayloadShift = 16;
         | 
| 365 | 
            +
             | 
| 366 | 
            +
            #ifdef V8_COMPRESS_POINTERS
         | 
| 367 | 
            +
            // CppHeapPointers use a dedicated pointer table. These constants control the
         | 
| 368 | 
            +
            // size and layout of the table. See the corresponding constants for the
         | 
| 369 | 
            +
            // external pointer table for further details.
         | 
| 370 | 
            +
            constexpr size_t kCppHeapPointerTableReservationSize =
         | 
| 371 | 
            +
                kExternalPointerTableReservationSize;
         | 
| 372 | 
            +
            constexpr uint32_t kCppHeapPointerIndexShift = kExternalPointerIndexShift;
         | 
| 373 | 
            +
             | 
| 374 | 
            +
            constexpr int kCppHeapPointerTableEntrySize = 8;
         | 
| 375 | 
            +
            constexpr int kCppHeapPointerTableEntrySizeLog2 = 3;
         | 
| 376 | 
            +
            constexpr size_t kMaxCppHeapPointers =
         | 
| 377 | 
            +
                kCppHeapPointerTableReservationSize / kCppHeapPointerTableEntrySize;
         | 
| 378 | 
            +
            static_assert((1 << (32 - kCppHeapPointerIndexShift)) == kMaxCppHeapPointers,
         | 
| 379 | 
            +
                          "kCppHeapPointerTableReservationSize and "
         | 
| 380 | 
            +
                          "kCppHeapPointerIndexShift don't match");
         | 
| 381 | 
            +
             | 
| 382 | 
            +
            #else  // !V8_COMPRESS_POINTERS
         | 
| 383 | 
            +
             | 
| 384 | 
            +
            // Needed for the V8.SandboxedCppHeapPointersCount histogram.
         | 
| 385 | 
            +
            constexpr size_t kMaxCppHeapPointers = 0;
         | 
| 386 | 
            +
             | 
| 387 | 
            +
            #endif  // V8_COMPRESS_POINTERS
         | 
| 388 | 
            +
             | 
| 389 | 
            +
            // See `ExternalPointerHandle` for the main documentation. The difference to
         | 
| 390 | 
            +
            // `ExternalPointerHandle` is that the handle always refers to a
         | 
| 391 | 
            +
            // (external pointer, size) tuple. The handles are used in combination with a
         | 
| 392 | 
            +
            // dedicated external buffer table (EBT).
         | 
| 393 | 
            +
            using ExternalBufferHandle = uint32_t;
         | 
| 394 | 
            +
             | 
| 395 | 
            +
            // ExternalBuffer point to buffer located outside the sandbox. When the V8
         | 
| 396 | 
            +
            // sandbox is enabled, these are stored on heap as ExternalBufferHandles,
         | 
| 397 | 
            +
            // otherwise they are simply raw pointers.
         | 
| 398 | 
            +
            #ifdef V8_ENABLE_SANDBOX
         | 
| 399 | 
            +
            using ExternalBuffer_t = ExternalBufferHandle;
         | 
| 400 | 
            +
            #else
         | 
| 401 | 
            +
            using ExternalBuffer_t = Address;
         | 
| 402 | 
            +
            #endif
         | 
| 403 | 
            +
             | 
| 404 | 
            +
            #ifdef V8_TARGET_OS_ANDROID
         | 
| 405 | 
            +
            // The size of the virtual memory reservation for the external buffer table.
         | 
| 406 | 
            +
            // As with the external pointer table, a maximum table size in combination with
         | 
| 407 | 
            +
            // shifted indices allows omitting bounds checks.
         | 
| 408 | 
            +
            constexpr size_t kExternalBufferTableReservationSize = 64 * MB;
         | 
| 409 | 
            +
             | 
| 410 | 
            +
            // The external buffer handles are stores shifted to the left by this amount
         | 
| 411 | 
            +
            // to guarantee that they are smaller than the maximum table size.
         | 
| 412 | 
            +
            constexpr uint32_t kExternalBufferHandleShift = 10;
         | 
| 413 | 
            +
            #else
         | 
| 414 | 
            +
            constexpr size_t kExternalBufferTableReservationSize = 128 * MB;
         | 
| 415 | 
            +
            constexpr uint32_t kExternalBufferHandleShift = 9;
         | 
| 416 | 
            +
            #endif  // V8_TARGET_OS_ANDROID
         | 
| 417 | 
            +
             | 
| 418 | 
            +
            // A null handle always references an entry that contains nullptr.
         | 
| 419 | 
            +
            constexpr ExternalBufferHandle kNullExternalBufferHandle = 0;
         | 
| 420 | 
            +
             | 
| 421 | 
            +
            // The maximum number of entries in an external buffer table.
         | 
| 422 | 
            +
            constexpr int kExternalBufferTableEntrySize = 16;
         | 
| 423 | 
            +
            constexpr int kExternalBufferTableEntrySizeLog2 = 4;
         | 
| 424 | 
            +
            constexpr size_t kMaxExternalBufferPointers =
         | 
| 425 | 
            +
                kExternalBufferTableReservationSize / kExternalBufferTableEntrySize;
         | 
| 426 | 
            +
            static_assert((1 << (32 - kExternalBufferHandleShift)) ==
         | 
| 427 | 
            +
                              kMaxExternalBufferPointers,
         | 
| 428 | 
            +
                          "kExternalBufferTableReservationSize and "
         | 
| 429 | 
            +
                          "kExternalBufferHandleShift don't match");
         | 
| 430 | 
            +
             | 
| 304 431 | 
             
            //
         | 
| 305 432 | 
             
            // External Pointers.
         | 
| 306 433 | 
             
            //
         | 
| @@ -365,7 +492,7 @@ constexpr ExternalPointerHandle kNullExternalPointerHandle = 0; | |
| 365 492 | 
             
            // extension (MTE) which would use bits [56, 60).
         | 
| 366 493 | 
             
            //
         | 
| 367 494 | 
             
            // External pointer tables are also available even when the sandbox is off but
         | 
| 368 | 
            -
            // pointer compression is on. In that case, the mechanism can be used to  | 
| 495 | 
            +
            // pointer compression is on. In that case, the mechanism can be used to ease
         | 
| 369 496 | 
             
            // alignment requirements as it turns unaligned 64-bit raw pointers into
         | 
| 370 497 | 
             
            // aligned 32-bit indices. To "opt-in" to the external pointer table mechanism
         | 
| 371 498 | 
             
            // for this purpose, instead of using the ExternalPointer accessors one needs to
         | 
| @@ -380,7 +507,7 @@ constexpr uint64_t kExternalPointerTagShift = 48; | |
| 380 507 | 
             
            // These are sorted so that tags can be grouped together and it can efficiently
         | 
| 381 508 | 
             
            // be checked if a tag belongs to a given group. See for example the
         | 
| 382 509 | 
             
            // IsSharedExternalPointerType routine.
         | 
| 383 | 
            -
            constexpr uint64_t  | 
| 510 | 
            +
            constexpr uint64_t kAllTagsForAndBasedTypeChecking[] = {
         | 
| 384 511 | 
             
                0b00001111, 0b00010111, 0b00011011, 0b00011101, 0b00011110, 0b00100111,
         | 
| 385 512 | 
             
                0b00101011, 0b00101101, 0b00101110, 0b00110011, 0b00110101, 0b00110110,
         | 
| 386 513 | 
             
                0b00111001, 0b00111010, 0b00111100, 0b01000111, 0b01001011, 0b01001101,
         | 
| @@ -394,8 +521,8 @@ constexpr uint64_t kAllExternalPointerTypeTags[] = { | |
| 394 521 | 
             
                0b11001100, 0b11010001, 0b11010010, 0b11010100, 0b11011000, 0b11100001,
         | 
| 395 522 | 
             
                0b11100010, 0b11100100, 0b11101000, 0b11110000};
         | 
| 396 523 |  | 
| 397 | 
            -
            #define TAG(i) | 
| 398 | 
            -
              (( | 
| 524 | 
            +
            #define TAG(i)                                                        \
         | 
| 525 | 
            +
              ((kAllTagsForAndBasedTypeChecking[i] << kExternalPointerTagShift) | \
         | 
| 399 526 | 
             
               kExternalPointerMarkBit)
         | 
| 400 527 |  | 
| 401 528 | 
             
            // clang-format off
         | 
| @@ -414,26 +541,73 @@ constexpr uint64_t kAllExternalPointerTypeTags[] = { | |
| 414 541 | 
             
              V(kExternalStringResourceTag,                 TAG(1)) \
         | 
| 415 542 | 
             
              V(kExternalStringResourceDataTag,             TAG(2)) \
         | 
| 416 543 | 
             
              V(kLastSharedTag,                             TAG(2))
         | 
| 544 | 
            +
              // Leave some space in the tag range here for future shared tags.
         | 
| 417 545 |  | 
| 418 546 | 
             
            // External pointers using these tags are kept in a per-Isolate external
         | 
| 419 547 | 
             
            // pointer table and can only be accessed when this Isolate is active.
         | 
| 420 548 | 
             
            #define PER_ISOLATE_EXTERNAL_POINTER_TAGS(V)             \
         | 
| 421 | 
            -
              V( | 
| 422 | 
            -
              V( | 
| 423 | 
            -
              V(kEmbedderDataSlotPayloadTag,                TAG(12)) \
         | 
| 549 | 
            +
              V(kNativeContextMicrotaskQueueTag,            TAG(5)) \
         | 
| 550 | 
            +
              V(kEmbedderDataSlotPayloadTag,                TAG(6)) \
         | 
| 424 551 | 
             
            /* This tag essentially stands for a `void*` pointer in the V8 API, and */ \
         | 
| 425 552 | 
             
            /* it is the Embedder's responsibility to ensure type safety (against */   \
         | 
| 426 553 | 
             
            /* substitution) and lifetime validity of these objects. */                \
         | 
| 427 | 
            -
              V(kExternalObjectValueTag,                    TAG( | 
| 428 | 
            -
              V(kFunctionTemplateInfoCallbackTag,           TAG( | 
| 429 | 
            -
              V(kAccessorInfoGetterTag,                     TAG( | 
| 430 | 
            -
              V(kAccessorInfoSetterTag,                     TAG( | 
| 431 | 
            -
              V(kWasmInternalFunctionCallTargetTag,         TAG( | 
| 432 | 
            -
              V(kWasmTypeInfoNativeTypeTag,                 TAG( | 
| 433 | 
            -
              V(kWasmExportedFunctionDataSignatureTag,      TAG( | 
| 434 | 
            -
              V(kWasmContinuationJmpbufTag,                 TAG( | 
| 435 | 
            -
              V( | 
| 436 | 
            -
              V( | 
| 554 | 
            +
              V(kExternalObjectValueTag,                    TAG(7)) \
         | 
| 555 | 
            +
              V(kFunctionTemplateInfoCallbackTag,           TAG(8)) \
         | 
| 556 | 
            +
              V(kAccessorInfoGetterTag,                     TAG(9)) \
         | 
| 557 | 
            +
              V(kAccessorInfoSetterTag,                     TAG(10)) \
         | 
| 558 | 
            +
              V(kWasmInternalFunctionCallTargetTag,         TAG(11)) \
         | 
| 559 | 
            +
              V(kWasmTypeInfoNativeTypeTag,                 TAG(12)) \
         | 
| 560 | 
            +
              V(kWasmExportedFunctionDataSignatureTag,      TAG(13)) \
         | 
| 561 | 
            +
              V(kWasmContinuationJmpbufTag,                 TAG(14)) \
         | 
| 562 | 
            +
              V(kWasmStackMemoryTag,                        TAG(15)) \
         | 
| 563 | 
            +
              V(kWasmIndirectFunctionTargetTag,             TAG(16)) \
         | 
| 564 | 
            +
              /* Foreigns */ \
         | 
| 565 | 
            +
              V(kGenericForeignTag,                         TAG(20)) \
         | 
| 566 | 
            +
              V(kApiNamedPropertyQueryCallbackTag,          TAG(21)) \
         | 
| 567 | 
            +
              V(kApiNamedPropertyGetterCallbackTag,         TAG(22)) \
         | 
| 568 | 
            +
              V(kApiNamedPropertySetterCallbackTag,         TAG(23)) \
         | 
| 569 | 
            +
              V(kApiNamedPropertyDescriptorCallbackTag,     TAG(24)) \
         | 
| 570 | 
            +
              V(kApiNamedPropertyDefinerCallbackTag,        TAG(25)) \
         | 
| 571 | 
            +
              V(kApiNamedPropertyDeleterCallbackTag,        TAG(26)) \
         | 
| 572 | 
            +
              V(kApiIndexedPropertyQueryCallbackTag,        TAG(27)) \
         | 
| 573 | 
            +
              V(kApiIndexedPropertyGetterCallbackTag,       TAG(28)) \
         | 
| 574 | 
            +
              V(kApiIndexedPropertySetterCallbackTag,       TAG(29)) \
         | 
| 575 | 
            +
              V(kApiIndexedPropertyDescriptorCallbackTag,   TAG(30)) \
         | 
| 576 | 
            +
              V(kApiIndexedPropertyDefinerCallbackTag,      TAG(31)) \
         | 
| 577 | 
            +
              V(kApiIndexedPropertyDeleterCallbackTag,      TAG(32)) \
         | 
| 578 | 
            +
              V(kApiIndexedPropertyEnumeratorCallbackTag,   TAG(33)) \
         | 
| 579 | 
            +
              V(kApiAccessCheckCallbackTag,                 TAG(34)) \
         | 
| 580 | 
            +
              V(kApiAbortScriptExecutionCallbackTag,        TAG(35)) \
         | 
| 581 | 
            +
              V(kSyntheticModuleTag,                        TAG(36)) \
         | 
| 582 | 
            +
              V(kMicrotaskCallbackTag,                      TAG(37)) \
         | 
| 583 | 
            +
              V(kMicrotaskCallbackDataTag,                  TAG(38)) \
         | 
| 584 | 
            +
              V(kCFunctionTag,                              TAG(39)) \
         | 
| 585 | 
            +
              V(kCFunctionInfoTag,                          TAG(40)) \
         | 
| 586 | 
            +
              V(kMessageListenerTag,                        TAG(41)) \
         | 
| 587 | 
            +
              V(kWaiterQueueForeignTag,                     TAG(42)) \
         | 
| 588 | 
            +
              /* Managed */ \
         | 
| 589 | 
            +
              V(kFirstManagedResourceTag,                   TAG(50)) \
         | 
| 590 | 
            +
              V(kGenericManagedTag,                         TAG(50)) \
         | 
| 591 | 
            +
              V(kWasmWasmStreamingTag,                      TAG(51)) \
         | 
| 592 | 
            +
              V(kWasmFuncDataTag,                           TAG(52)) \
         | 
| 593 | 
            +
              V(kWasmManagedDataTag,                        TAG(53)) \
         | 
| 594 | 
            +
              V(kWasmNativeModuleTag,                       TAG(54)) \
         | 
| 595 | 
            +
              V(kIcuBreakIteratorTag,                       TAG(55)) \
         | 
| 596 | 
            +
              V(kIcuUnicodeStringTag,                       TAG(56)) \
         | 
| 597 | 
            +
              V(kIcuListFormatterTag,                       TAG(57)) \
         | 
| 598 | 
            +
              V(kIcuLocaleTag,                              TAG(58)) \
         | 
| 599 | 
            +
              V(kIcuSimpleDateFormatTag,                    TAG(59)) \
         | 
| 600 | 
            +
              V(kIcuDateIntervalFormatTag,                  TAG(60)) \
         | 
| 601 | 
            +
              V(kIcuRelativeDateTimeFormatterTag,           TAG(61)) \
         | 
| 602 | 
            +
              V(kIcuLocalizedNumberFormatterTag,            TAG(62)) \
         | 
| 603 | 
            +
              V(kIcuPluralRulesTag,                         TAG(63)) \
         | 
| 604 | 
            +
              V(kIcuCollatorTag,                            TAG(64)) \
         | 
| 605 | 
            +
              V(kDisplayNamesInternalTag,                   TAG(65)) \
         | 
| 606 | 
            +
              /* External resources whose lifetime is tied to */     \
         | 
| 607 | 
            +
              /* their entry in the external pointer table but */    \
         | 
| 608 | 
            +
              /* which are not referenced via a Managed */           \
         | 
| 609 | 
            +
              V(kArrayBufferExtensionTag,                   TAG(66)) \
         | 
| 610 | 
            +
              V(kLastManagedResourceTag,                    TAG(66)) \
         | 
| 437 611 |  | 
| 438 612 | 
             
            // All external pointer tags.
         | 
| 439 613 | 
             
            #define ALL_EXTERNAL_POINTER_TAGS(V) \
         | 
| @@ -449,12 +623,18 @@ enum ExternalPointerTag : uint64_t { | |
| 449 623 | 
             
              kExternalPointerNullTag =            MAKE_TAG(1, 0b00000000),
         | 
| 450 624 | 
             
              // External pointer tag that will match any external pointer. Use with care!
         | 
| 451 625 | 
             
              kAnyExternalPointerTag =             MAKE_TAG(1, 0b11111111),
         | 
| 626 | 
            +
              // External pointer tag that will match any external pointer in a Foreign.
         | 
| 627 | 
            +
              // Use with care! If desired, this could be made more fine-granular.
         | 
| 628 | 
            +
              kAnyForeignTag =                     kAnyExternalPointerTag,
         | 
| 452 629 | 
             
              // The free entry tag has all type bits set so every type check with a
         | 
| 453 630 | 
             
              // different type fails. It also doesn't have the mark bit set as free
         | 
| 454 631 | 
             
              // entries are (by definition) not alive.
         | 
| 455 632 | 
             
              kExternalPointerFreeEntryTag =       MAKE_TAG(0, 0b11111111),
         | 
| 456 633 | 
             
              // Evacuation entries are used during external pointer table compaction.
         | 
| 457 | 
            -
              kExternalPointerEvacuationEntryTag = MAKE_TAG(1,  | 
| 634 | 
            +
              kExternalPointerEvacuationEntryTag = MAKE_TAG(1, 0b11111110),
         | 
| 635 | 
            +
              // Tag for zapped/invalidated entries. Those are considered to no longer be
         | 
| 636 | 
            +
              // in use and so have the marking bit cleared.
         | 
| 637 | 
            +
              kExternalPointerZappedEntryTag =     MAKE_TAG(0, 0b11111101),
         | 
| 458 638 |  | 
| 459 639 | 
             
              ALL_EXTERNAL_POINTER_TAGS(EXTERNAL_POINTER_TAG_ENUM)
         | 
| 460 640 | 
             
            };
         | 
| @@ -481,6 +661,15 @@ V8_INLINE static constexpr bool IsMaybeReadOnlyExternalPointerType( | |
| 481 661 | 
             
                     tag == kFunctionTemplateInfoCallbackTag;
         | 
| 482 662 | 
             
            }
         | 
| 483 663 |  | 
| 664 | 
            +
            // True if the external pointer references an external object whose lifetime is
         | 
| 665 | 
            +
            // tied to the entry in the external pointer table.
         | 
| 666 | 
            +
            // In this case, the entry in the ExternalPointerTable always points to an
         | 
| 667 | 
            +
            // object derived from ExternalPointerTable::ManagedResource.
         | 
| 668 | 
            +
            V8_INLINE static constexpr bool IsManagedExternalPointerType(
         | 
| 669 | 
            +
                ExternalPointerTag tag) {
         | 
| 670 | 
            +
              return tag >= kFirstManagedResourceTag && tag <= kLastManagedResourceTag;
         | 
| 671 | 
            +
            }
         | 
| 672 | 
            +
             | 
| 484 673 | 
             
            // Sanity checks.
         | 
| 485 674 | 
             
            #define CHECK_SHARED_EXTERNAL_POINTER_TAGS(Tag, ...) \
         | 
| 486 675 | 
             
              static_assert(IsSharedExternalPointerType(Tag));
         | 
| @@ -576,11 +765,11 @@ using CodePointerHandle = IndirectPointerHandle; | |
| 576 765 | 
             
            // The size of the virtual memory reservation for the code pointer table.
         | 
| 577 766 | 
             
            // As with the other tables, a maximum table size in combination with shifted
         | 
| 578 767 | 
             
            // indices allows omitting bounds checks.
         | 
| 579 | 
            -
            constexpr size_t kCodePointerTableReservationSize =  | 
| 768 | 
            +
            constexpr size_t kCodePointerTableReservationSize = 128 * MB;
         | 
| 580 769 |  | 
| 581 770 | 
             
            // Code pointer handles are shifted by a different amount than indirect pointer
         | 
| 582 771 | 
             
            // handles as the tables have a different maximum size.
         | 
| 583 | 
            -
            constexpr uint32_t kCodePointerHandleShift =  | 
| 772 | 
            +
            constexpr uint32_t kCodePointerHandleShift = 9;
         | 
| 584 773 |  | 
| 585 774 | 
             
            // A null handle always references an entry that contains nullptr.
         | 
| 586 775 | 
             
            constexpr CodePointerHandle kNullCodePointerHandle = kNullIndirectPointerHandle;
         | 
| @@ -616,6 +805,29 @@ constexpr bool kAllCodeObjectsLiveInTrustedSpace = | |
| 616 805 | 
             
                kRuntimeGeneratedCodeObjectsLiveInTrustedSpace &&
         | 
| 617 806 | 
             
                kBuiltinCodeObjectsLiveInTrustedSpace;
         | 
| 618 807 |  | 
| 808 | 
            +
            //
         | 
| 809 | 
            +
            // JavaScript Dispatch Table
         | 
| 810 | 
            +
            //
         | 
| 811 | 
            +
            // A JSDispatchHandle represents a 32-bit index into a JSDispatchTable.
         | 
| 812 | 
            +
            using JSDispatchHandle = uint32_t;
         | 
| 813 | 
            +
             | 
| 814 | 
            +
            constexpr JSDispatchHandle kNullJSDispatchHandle = 0;
         | 
| 815 | 
            +
             | 
| 816 | 
            +
            // The size of the virtual memory reservation for the JSDispatchTable.
         | 
| 817 | 
            +
            // As with the other tables, a maximum table size in combination with shifted
         | 
| 818 | 
            +
            // indices allows omitting bounds checks.
         | 
| 819 | 
            +
            constexpr size_t kJSDispatchTableReservationSize = 128 * MB;
         | 
| 820 | 
            +
            constexpr uint32_t kJSDispatchHandleShift = 9;
         | 
| 821 | 
            +
             | 
| 822 | 
            +
            // The maximum number of entries in a JSDispatchTable.
         | 
| 823 | 
            +
            constexpr int kJSDispatchTableEntrySize = 16;
         | 
| 824 | 
            +
            constexpr int kJSDispatchTableEntrySizeLog2 = 4;
         | 
| 825 | 
            +
            constexpr size_t kMaxJSDispatchEntries =
         | 
| 826 | 
            +
                kJSDispatchTableReservationSize / kJSDispatchTableEntrySize;
         | 
| 827 | 
            +
            static_assert((1 << (32 - kJSDispatchHandleShift)) == kMaxJSDispatchEntries,
         | 
| 828 | 
            +
                          "kJSDispatchTableReservationSize and kJSDispatchEntryHandleShift "
         | 
| 829 | 
            +
                          "don't match");
         | 
| 830 | 
            +
             | 
| 619 831 | 
             
            // {obj} must be the raw tagged pointer representation of a HeapObject
         | 
| 620 832 | 
             
            // that's guaranteed to never be in ReadOnlySpace.
         | 
| 621 833 | 
             
            V8_EXPORT internal::Isolate* IsolateFromNeverReadOnlySpaceObject(Address obj);
         | 
| @@ -647,6 +859,13 @@ class Internals { | |
| 647 859 |  | 
| 648 860 | 
             
              static const int kOddballKindOffset = 4 * kApiTaggedSize + kApiDoubleSize;
         | 
| 649 861 | 
             
              static const int kJSObjectHeaderSize = 3 * kApiTaggedSize;
         | 
| 862 | 
            +
            #ifdef V8_COMPRESS_POINTERS
         | 
| 863 | 
            +
              static const int kJSAPIObjectWithEmbedderSlotsHeaderSize =
         | 
| 864 | 
            +
                  kJSObjectHeaderSize + kApiInt32Size;
         | 
| 865 | 
            +
            #else   // !V8_COMPRESS_POINTERS
         | 
| 866 | 
            +
              static const int kJSAPIObjectWithEmbedderSlotsHeaderSize =
         | 
| 867 | 
            +
                  kJSObjectHeaderSize + kApiTaggedSize;
         | 
| 868 | 
            +
            #endif  // !V8_COMPRESS_POINTERS
         | 
| 650 869 | 
             
              static const int kFixedArrayHeaderSize = 2 * kApiTaggedSize;
         | 
| 651 870 | 
             
              static const int kEmbedderDataArrayHeaderSize = 2 * kApiTaggedSize;
         | 
| 652 871 | 
             
              static const int kEmbedderDataSlotSize = kApiSystemPointerSize;
         | 
| @@ -676,6 +895,7 @@ class Internals { | |
| 676 895 | 
             
              // ExternalPointerTable and TrustedPointerTable layout guarantees.
         | 
| 677 896 | 
             
              static const int kExternalPointerTableBasePointerOffset = 0;
         | 
| 678 897 | 
             
              static const int kExternalPointerTableSize = 2 * kApiSystemPointerSize;
         | 
| 898 | 
            +
              static const int kExternalBufferTableSize = 2 * kApiSystemPointerSize;
         | 
| 679 899 | 
             
              static const int kTrustedPointerTableSize = 2 * kApiSystemPointerSize;
         | 
| 680 900 | 
             
              static const int kTrustedPointerTableBasePointerOffset = 0;
         | 
| 681 901 |  | 
| @@ -719,16 +939,18 @@ class Internals { | |
| 719 939 | 
             
                  kIsolateEmbedderDataOffset + kNumIsolateDataSlots * kApiSystemPointerSize;
         | 
| 720 940 | 
             
              static const int kIsolateSharedExternalPointerTableAddressOffset =
         | 
| 721 941 | 
             
                  kIsolateExternalPointerTableOffset + kExternalPointerTableSize;
         | 
| 942 | 
            +
              static const int kIsolateCppHeapPointerTableOffset =
         | 
| 943 | 
            +
                  kIsolateSharedExternalPointerTableAddressOffset + kApiSystemPointerSize;
         | 
| 722 944 | 
             
            #ifdef V8_ENABLE_SANDBOX
         | 
| 723 945 | 
             
              static const int kIsolateTrustedCageBaseOffset =
         | 
| 724 | 
            -
                   | 
| 946 | 
            +
                  kIsolateCppHeapPointerTableOffset + kExternalPointerTableSize;
         | 
| 725 947 | 
             
              static const int kIsolateTrustedPointerTableOffset =
         | 
| 726 948 | 
             
                  kIsolateTrustedCageBaseOffset + kApiSystemPointerSize;
         | 
| 727 949 | 
             
              static const int kIsolateApiCallbackThunkArgumentOffset =
         | 
| 728 950 | 
             
                  kIsolateTrustedPointerTableOffset + kTrustedPointerTableSize;
         | 
| 729 951 | 
             
            #else
         | 
| 730 952 | 
             
              static const int kIsolateApiCallbackThunkArgumentOffset =
         | 
| 731 | 
            -
                   | 
| 953 | 
            +
                  kIsolateCppHeapPointerTableOffset + kExternalPointerTableSize;
         | 
| 732 954 | 
             
            #endif  // V8_ENABLE_SANDBOX
         | 
| 733 955 | 
             
            #else
         | 
| 734 956 | 
             
              static const int kIsolateApiCallbackThunkArgumentOffset =
         | 
| @@ -736,13 +958,12 @@ class Internals { | |
| 736 958 | 
             
            #endif  // V8_COMPRESS_POINTERS
         | 
| 737 959 | 
             
              static const int kContinuationPreservedEmbedderDataOffset =
         | 
| 738 960 | 
             
                  kIsolateApiCallbackThunkArgumentOffset + kApiSystemPointerSize;
         | 
| 739 | 
            -
             | 
| 740 | 
            -
              static const int kWasm64OOBOffsetAlignmentPaddingSize = 0;
         | 
| 741 | 
            -
              static const int kWasm64OOBOffsetOffset =
         | 
| 742 | 
            -
                  kContinuationPreservedEmbedderDataOffset + kApiSystemPointerSize +
         | 
| 743 | 
            -
                  kWasm64OOBOffsetAlignmentPaddingSize;
         | 
| 744 961 | 
             
              static const int kIsolateRootsOffset =
         | 
| 745 | 
            -
                   | 
| 962 | 
            +
                  kContinuationPreservedEmbedderDataOffset + kApiSystemPointerSize;
         | 
| 963 | 
            +
             | 
| 964 | 
            +
              // Assert scopes
         | 
| 965 | 
            +
              static const int kDisallowGarbageCollectionAlign = alignof(uint32_t);
         | 
| 966 | 
            +
              static const int kDisallowGarbageCollectionSize = sizeof(uint32_t);
         | 
| 746 967 |  | 
| 747 968 | 
             
            #if V8_STATIC_ROOTS_BOOL
         | 
| 748 969 |  | 
| @@ -753,7 +974,7 @@ class Internals { | |
| 753 974 | 
             
              V(TrueValue, 0xc9)                      \
         | 
| 754 975 | 
             
              V(FalseValue, 0xad)                     \
         | 
| 755 976 | 
             
              V(EmptyString, 0xa1)                    \
         | 
| 756 | 
            -
              V(TheHoleValue,  | 
| 977 | 
            +
              V(TheHoleValue, 0x791)
         | 
| 757 978 |  | 
| 758 979 | 
             
              using Tagged_t = uint32_t;
         | 
| 759 980 | 
             
              struct StaticReadOnlyRoot {
         | 
| @@ -761,8 +982,9 @@ class Internals { | |
| 761 982 | 
             
                EXPORTED_STATIC_ROOTS_PTR_LIST(DEF_ROOT)
         | 
| 762 983 | 
             
            #undef DEF_ROOT
         | 
| 763 984 |  | 
| 764 | 
            -
                 | 
| 765 | 
            -
                static constexpr Tagged_t  | 
| 985 | 
            +
                // Use 0 for kStringMapLowerBound since string maps are the first maps.
         | 
| 986 | 
            +
                static constexpr Tagged_t kStringMapLowerBound = 0;
         | 
| 987 | 
            +
                static constexpr Tagged_t kStringMapUpperBound = 0x47d;
         | 
| 766 988 |  | 
| 767 989 | 
             
            #define PLUSONE(...) +1
         | 
| 768 990 | 
             
                static constexpr size_t kNumberOfExportedStaticRoots =
         | 
| @@ -802,8 +1024,8 @@ class Internals { | |
| 802 1024 |  | 
| 803 1025 | 
             
              // Constants used by PropertyCallbackInfo to check if we should throw when an
         | 
| 804 1026 | 
             
              // error occurs.
         | 
| 805 | 
            -
              static const int  | 
| 806 | 
            -
              static const int  | 
| 1027 | 
            +
              static const int kDontThrow = 0;
         | 
| 1028 | 
            +
              static const int kThrowOnError = 1;
         | 
| 807 1029 | 
             
              static const int kInferShouldThrowMode = 2;
         | 
| 808 1030 |  | 
| 809 1031 | 
             
              // Soft limit for AdjustAmountofExternalAllocatedMemory. Trigger an
         | 
| @@ -836,14 +1058,36 @@ class Internals { | |
| 836 1058 | 
             
                return PlatformSmiTagging::SmiToInt(value);
         | 
| 837 1059 | 
             
              }
         | 
| 838 1060 |  | 
| 1061 | 
            +
              V8_INLINE static constexpr Address AddressToSmi(Address value) {
         | 
| 1062 | 
            +
                return (value << (kSmiTagSize + PlatformSmiTagging::kSmiShiftSize)) |
         | 
| 1063 | 
            +
                       kSmiTag;
         | 
| 1064 | 
            +
              }
         | 
| 1065 | 
            +
             | 
| 839 1066 | 
             
              V8_INLINE static constexpr Address IntToSmi(int value) {
         | 
| 840 | 
            -
                return  | 
| 1067 | 
            +
                return AddressToSmi(static_cast<Address>(value));
         | 
| 1068 | 
            +
              }
         | 
| 1069 | 
            +
             | 
| 1070 | 
            +
              template <typename T,
         | 
| 1071 | 
            +
                        typename std::enable_if_t<std::is_integral_v<T>>* = nullptr>
         | 
| 1072 | 
            +
              V8_INLINE static constexpr Address IntegralToSmi(T value) {
         | 
| 1073 | 
            +
                return AddressToSmi(static_cast<Address>(value));
         | 
| 841 1074 | 
             
              }
         | 
| 842 1075 |  | 
| 843 | 
            -
               | 
| 1076 | 
            +
              template <typename T,
         | 
| 1077 | 
            +
                        typename std::enable_if_t<std::is_integral_v<T>>* = nullptr>
         | 
| 1078 | 
            +
              V8_INLINE static constexpr bool IsValidSmi(T value) {
         | 
| 844 1079 | 
             
                return PlatformSmiTagging::IsValidSmi(value);
         | 
| 845 1080 | 
             
              }
         | 
| 846 1081 |  | 
| 1082 | 
            +
              template <typename T,
         | 
| 1083 | 
            +
                        typename std::enable_if_t<std::is_integral_v<T>>* = nullptr>
         | 
| 1084 | 
            +
              static constexpr std::optional<Address> TryIntegralToSmi(T value) {
         | 
| 1085 | 
            +
                if (V8_LIKELY(PlatformSmiTagging::IsValidSmi(value))) {
         | 
| 1086 | 
            +
                  return {AddressToSmi(static_cast<Address>(value))};
         | 
| 1087 | 
            +
                }
         | 
| 1088 | 
            +
                return {};
         | 
| 1089 | 
            +
              }
         | 
| 1090 | 
            +
             | 
| 847 1091 | 
             
            #if V8_STATIC_ROOTS_BOOL
         | 
| 848 1092 | 
             
              V8_INLINE static bool is_identical(Address obj, Tagged_t constant) {
         | 
| 849 1093 | 
             
                return static_cast<Tagged_t>(obj) == constant;
         | 
| @@ -1116,7 +1360,7 @@ class V8_EXPORT StrongRootAllocatorBase { | |
| 1116 1360 |  | 
| 1117 1361 | 
             
             protected:
         | 
| 1118 1362 | 
             
              explicit StrongRootAllocatorBase(Heap* heap) : heap_(heap) {}
         | 
| 1119 | 
            -
              explicit StrongRootAllocatorBase( | 
| 1363 | 
            +
              explicit StrongRootAllocatorBase(Isolate* isolate);
         | 
| 1120 1364 |  | 
| 1121 1365 | 
             
              // Allocate/deallocate a range of n elements of type internal::Address.
         | 
| 1122 1366 | 
             
              Address* allocate_impl(size_t n);
         | 
| @@ -1132,17 +1376,15 @@ class V8_EXPORT StrongRootAllocatorBase { | |
| 1132 1376 | 
             
            // and internal::StrongRootAllocator<v8::Local<T>> register the allocated range
         | 
| 1133 1377 | 
             
            // as strong roots.
         | 
| 1134 1378 | 
             
            template <typename T>
         | 
| 1135 | 
            -
            class StrongRootAllocator :  | 
| 1136 | 
            -
                                        private std::allocator<T> {
         | 
| 1379 | 
            +
            class StrongRootAllocator : private std::allocator<T> {
         | 
| 1137 1380 | 
             
             public:
         | 
| 1138 1381 | 
             
              using value_type = T;
         | 
| 1139 1382 |  | 
| 1140 | 
            -
              explicit StrongRootAllocator(Heap* heap)  | 
| 1141 | 
            -
              explicit StrongRootAllocator( | 
| 1142 | 
            -
             | 
| 1383 | 
            +
              explicit StrongRootAllocator(Heap* heap) {}
         | 
| 1384 | 
            +
              explicit StrongRootAllocator(Isolate* isolate) {}
         | 
| 1385 | 
            +
              explicit StrongRootAllocator(v8::Isolate* isolate) {}
         | 
| 1143 1386 | 
             
              template <typename U>
         | 
| 1144 | 
            -
              StrongRootAllocator(const StrongRootAllocator<U>& other) noexcept
         | 
| 1145 | 
            -
                  : StrongRootAllocatorBase(other) {}
         | 
| 1387 | 
            +
              StrongRootAllocator(const StrongRootAllocator<U>& other) noexcept {}
         | 
| 1146 1388 |  | 
| 1147 1389 | 
             
              using std::allocator<T>::allocate;
         | 
| 1148 1390 | 
             
              using std::allocator<T>::deallocate;
         | 
| @@ -1311,12 +1553,12 @@ constexpr WrappedIterator<Iterator> operator+( | |
| 1311 1553 | 
             
            // whether direct local support is enabled.
         | 
| 1312 1554 | 
             
            class ValueHelper final {
         | 
| 1313 1555 | 
             
             public:
         | 
| 1314 | 
            -
            #ifdef  | 
| 1556 | 
            +
            #ifdef V8_ENABLE_DIRECT_HANDLE
         | 
| 1315 1557 | 
             
              static constexpr Address kTaggedNullAddress = 1;
         | 
| 1316 1558 | 
             
              static constexpr Address kEmpty = kTaggedNullAddress;
         | 
| 1317 1559 | 
             
            #else
         | 
| 1318 1560 | 
             
              static constexpr Address kEmpty = kNullAddress;
         | 
| 1319 | 
            -
            #endif  //  | 
| 1561 | 
            +
            #endif  // V8_ENABLE_DIRECT_HANDLE
         | 
| 1320 1562 |  | 
| 1321 1563 | 
             
              template <typename T>
         | 
| 1322 1564 | 
             
              V8_INLINE static bool IsEmpty(T* value) {
         | 
| @@ -1332,7 +1574,7 @@ class ValueHelper final { | |
| 1332 1574 | 
             
                return handle.template value<T>();
         | 
| 1333 1575 | 
             
              }
         | 
| 1334 1576 |  | 
| 1335 | 
            -
            #ifdef  | 
| 1577 | 
            +
            #ifdef V8_ENABLE_DIRECT_HANDLE
         | 
| 1336 1578 |  | 
| 1337 1579 | 
             
              template <typename T>
         | 
| 1338 1580 | 
             
              V8_INLINE static Address ValueAsAddress(const T* value) {
         | 
| @@ -1347,7 +1589,7 @@ class ValueHelper final { | |
| 1347 1589 | 
             
                return *reinterpret_cast<T**>(slot);
         | 
| 1348 1590 | 
             
              }
         | 
| 1349 1591 |  | 
| 1350 | 
            -
            #else  // ! | 
| 1592 | 
            +
            #else  // !V8_ENABLE_DIRECT_HANDLE
         | 
| 1351 1593 |  | 
| 1352 1594 | 
             
              template <typename T>
         | 
| 1353 1595 | 
             
              V8_INLINE static Address ValueAsAddress(const T* value) {
         | 
| @@ -1359,7 +1601,7 @@ class ValueHelper final { | |
| 1359 1601 | 
             
                return reinterpret_cast<T*>(slot);
         | 
| 1360 1602 | 
             
              }
         | 
| 1361 1603 |  | 
| 1362 | 
            -
            #endif  //  | 
| 1604 | 
            +
            #endif  // V8_ENABLE_DIRECT_HANDLE
         | 
| 1363 1605 | 
             
            };
         | 
| 1364 1606 |  | 
| 1365 1607 | 
             
            /**
         | 
| @@ -1383,14 +1625,17 @@ class HandleHelper final { | |
| 1383 1625 | 
             
                if (rhs.IsEmpty()) return false;
         | 
| 1384 1626 | 
             
                return lhs.ptr() == rhs.ptr();
         | 
| 1385 1627 | 
             
              }
         | 
| 1386 | 
            -
             | 
| 1387 | 
            -
              static V8_EXPORT bool IsOnStack(const void* ptr);
         | 
| 1388 | 
            -
              static V8_EXPORT void VerifyOnStack(const void* ptr);
         | 
| 1389 | 
            -
              static V8_EXPORT void VerifyOnMainThread();
         | 
| 1390 1628 | 
             
            };
         | 
| 1391 1629 |  | 
| 1392 1630 | 
             
            V8_EXPORT void VerifyHandleIsNonEmpty(bool is_empty);
         | 
| 1393 1631 |  | 
| 1632 | 
            +
            // These functions are here just to match friend declarations in
         | 
| 1633 | 
            +
            // XxxCallbackInfo classes allowing these functions to access the internals
         | 
| 1634 | 
            +
            // of the info objects. These functions are supposed to be called by debugger
         | 
| 1635 | 
            +
            // macros.
         | 
| 1636 | 
            +
            void PrintFunctionCallbackInfo(void* function_callback_info);
         | 
| 1637 | 
            +
            void PrintPropertyCallbackInfo(void* property_callback_info);
         | 
| 1638 | 
            +
             | 
| 1394 1639 | 
             
            }  // namespace internal
         | 
| 1395 1640 | 
             
            }  // namespace v8
         | 
| 1396 1641 |  |