22 #include <type_traits>
52 class ImplementationUtilities;
63 class ObjectOperationDescriptor;
70 class RawOperationDescriptor;
87 template <
class T>
class Local;
90 template <
class T>
class Eternal;
91 template<
class T>
class NonCopyablePersistentTraits;
93 template <
class T,
class M = NonCopyablePersistentTraits<T> >
100 template <
class K,
class V,
class T>
102 template <
class K,
class V,
class T>
105 template<
class T,
class P>
class WeakCallbackObject;
113 class CallHandlerHelper;
119 class DeferredHandles;
122 class ExternalString;
124 class LocalEmbedderHeapTracer;
125 class MicrotaskQueue;
126 struct ScriptStreamingData;
128 class PropertyCallbackArguments;
129 class FunctionCallbackArguments;
131 class ScopedExternalStringLock;
132 class ThreadLocalTop;
136 class StreamingDecoder;
142 class ConsoleCallArguments;
147 #define TYPE_CHECK(T, S)
149 *(static_cast<T* volatile*>(0
)) = static_cast<S*>(0
);
189 : val_(
reinterpret_cast<T*>(*that)) {
222 if (a ==
nullptr)
return b ==
nullptr;
223 if (b ==
nullptr)
return false;
231 if (a ==
nullptr)
return b ==
nullptr;
232 if (b ==
nullptr)
return false;
244 return !operator==(that);
249 return !operator==(that);
258 #ifdef V8_ENABLE_CHECKS
261 if (that.IsEmpty())
return Local<T>();
263 return Local<T>(T::Cast(*that));
273 return Local<S>::Cast(*
this);
291 template<
class F>
friend class Local;
308 template <
class F1,
class F2,
class F3>
316 explicit V8_INLINE Local(T* that) : val_(that) {}
322 #if !defined(V8_IMMINENT_DEPRECATION_WARNINGS)
345 : val_(
reinterpret_cast<T*>(*that)) {
357 out->val_ =
IsEmpty() ?
nullptr :
this->val_;
389 Set(isolate, handle);
401 static const int kInternalFieldsInWeakCallback = 2;
402 static const int kEmbedderFieldsInWeakCallback = 2;
404 template <
typename T>
410 void* embedder_fields[kEmbedderFieldsInWeakCallback],
412 : isolate_(isolate), parameter_(parameter), callback_(callback) {
413 for (
int i = 0; i < kEmbedderFieldsInWeakCallback; ++i) {
414 embedder_fields_[i] = embedder_fields[i];
434 void* embedder_fields_[kEmbedderFieldsInWeakCallback];
483 return Local<T>::New(isolate, *
this);
490 if (a ==
nullptr)
return b ==
nullptr;
491 if (b ==
nullptr)
return false;
499 if (a ==
nullptr)
return b ==
nullptr;
500 if (b ==
nullptr)
return false;
506 return !operator==(that);
511 return !operator==(that);
521 template <
typename P>
569 template<
class F>
friend class Local;
575 template <
class F1,
class F2,
class F3>
580 explicit V8_INLINE PersistentBase(T* val) : val_(val) {}
594 class NonCopyablePersistentTraits {
598 template<
class S,
class M>
618 template<
class S,
class M>
655 template <
class S,
class M2>
669 template <
class S,
class M2>
677 template <
class S,
class M2>
688 if (M::kResetInDestructor)
this->Reset();
694 #ifdef V8_ENABLE_CHECKS
697 if (!that.IsEmpty()) T::Cast(*that);
711 template<
class F>
friend class Local;
716 V8_INLINE T* operator*()
const {
return this->val_; }
717 template<
class S,
class M2>
786 V8_INLINE T* operator*()
const {
return this->val_; }
797 template <
typename T>
825 template <
typename T>
841 : val_(New(isolate, *that, &val_)) {
850 *
this = std::move(other);
856 template <
typename S>
859 *
this = std::move(other);
873 template <
typename S>
911 bool IsEmpty()
const {
return val_ ==
nullptr; }
941 if (a ==
nullptr)
return b ==
nullptr;
942 if (b ==
nullptr)
return false;
950 if (a ==
nullptr)
return b ==
nullptr;
951 if (b ==
nullptr)
return false;
957 return !operator==(that);
962 return !operator==(that);
991 struct WrappedForDestruction {
994 explicit WrappedForDestruction(T* val) : value(val) {}
995 ~WrappedForDestruction();
996 operator T*()
const {
return value; }
997 T* operator*()
const {
return value; }
998 T* operator->()
const {
return value; }
999 WrappedForDestruction& operator=(
const WrappedForDestruction& other) {
1000 value = other.value;
1003 WrappedForDestruction& operator=(T* val) {
1011 T* operator*()
const {
return this->val_; }
1013 typename std::conditional<
1015 WrappedForDestruction, T*>::type val_{
nullptr};
1018 template <
typename F>
1021 template <
typename F>
1051 return reinterpret_cast<
Isolate*>(isolate_);
1068 void* operator
new(size_t size);
1069 void* operator
new[](size_t size);
1070 void operator
delete(
void*, size_t);
1071 void operator
delete[](
void*, size_t);
1104 return Local<T>(
reinterpret_cast<T*>(slot));
1109 return Escape(value.FromMaybe(
Local<T>()));
1118 void* operator
new(size_t size);
1119 void* operator
new[](size_t size);
1120 void operator
delete(
void*, size_t);
1121 void operator
delete[](
void*, size_t);
1143 void* operator
new(size_t size);
1144 void* operator
new[](size_t size);
1145 void operator
delete(
void*, size_t);
1146 void operator
delete[](
void*, size_t);
1150 int prev_sealed_level_;
1208 bool is_opaque =
false,
bool is_wasm =
false,
1209 bool is_module =
false)
1210 : flags_((is_shared_cross_origin ? kIsSharedCrossOrigin : 0) |
1211 (is_wasm ? kIsWasm : 0) | (is_opaque ? kIsOpaque : 0) |
1212 (is_module ? kIsModule : 0)) {}
1215 (kIsSharedCrossOrigin | kIsOpaque | kIsWasm | kIsModule)) {}
1218 return (flags_ & kIsSharedCrossOrigin) != 0;
1220 bool IsOpaque()
const {
return (flags_ & kIsOpaque) != 0; }
1221 bool IsWasm()
const {
return (flags_ & kIsWasm) != 0; }
1222 bool IsModule()
const {
return (flags_ & kIsModule) != 0; }
1228 kIsSharedCrossOrigin = 1,
1318 : line_number_(line_number), column_number_(column_number) {}
1621 "This class takes ownership of source_stream, so use the constructor "
1622 "taking a unique_ptr to make these semantics clearer",
1635 std::unique_ptr<
internal::ScriptStreamingData> impl_;
1649 explicit ScriptStreamingTask(
internal::ScriptStreamingData* data)
1652 internal::ScriptStreamingData* data_;
1786 Local<
String> arguments[], size_t context_extension_count,
2155 size_t* actual_size);
2221 PrivateData* private_;
2246 Isolate* isolate, uint32_t transfer_id);
2253 Isolate* isolate, uint32_t clone_id);
2323 PrivateData* private_;
2661 V8_INLINE bool QuickIsUndefined()
const;
2663 V8_INLINE bool QuickIsNullOrUndefined()
const;
2665 bool FullIsUndefined()
const;
2666 bool FullIsNull()
const;
2667 bool FullIsString()
const;
2688 static void CheckCast(
v8::
Value* obj);
2709 static void CheckCast(
Value* obj);
2809 int Write(
Isolate* isolate, uint16_t* buffer,
int start = 0,
int length = -1,
2813 int length = -1,
int options =
NO_OPTIONS)
const;
2816 int* nchars_ref =
nullptr,
int options =
NO_OPTIONS)
const;
2901 virtual const uint16_t*
data()
const = 0;
2931 virtual const char*
data()
const = 0;
2963 Isolate* isolate,
const char* data,
2969 Isolate* isolate,
const uint8_t* data,
2975 Isolate* isolate,
const uint16_t* data,
3094 static void CheckCast(
v8::
Value* obj);
3146 static void CheckCast(
Value* obj);
3184 static void CheckCast(
Data* that);
3198 static void CheckCast(
v8::
Value* obj);
3213 static void CheckCast(
v8::
Value* obj);
3227 static void CheckCast(
v8::
Value* obj);
3241 static void CheckCast(
v8::
Value* obj);
3259 int word_count,
const uint64_t* words);
3296 static void CheckCast(
v8::
Value* obj);
3848 static void CheckCast(
Value* obj);
3849 Local<
Value> SlowGetInternalField(
int index);
3850 void* SlowGetAlignedPointerFromInternalField(
int index);
3876 static void CheckCast(
Value* obj);
3912 static void CheckCast(
Value* obj);
3944 static void CheckCast(
Value* obj);
3948 template<
typename T>
3952 : value_(that.value_) {
3956 template <
typename S>
3958 template <
typename S>
3960 template <
typename S>
3975 template <
typename S>
3987 template <
class F,
class G,
class H>
4002 template<
typename T>
4038 friend class debug::ConsoleCallArguments;
4058 template<
typename T>
4150 friend class MacroAssembler;
4257 static void CheckCast(
Value* obj);
4260 #ifndef V8_PROMISE_INTERNAL_FIELD_COUNT
4262 #define V8_PROMISE_INTERNAL_FIELD_COUNT 0
4303 static void CheckCast(
Value* obj);
4350 static void CheckCast(
Value* obj);
4423 PrivateData* private_;
4448 static void CheckCast(
Value* obj);
4461 template <
typename T>
4467 constexpr MemorySpan(T* data, size_t size) : data_(data), size_(size) {}
4470 constexpr T*
data()
const {
return data_; }
4472 constexpr size_t
size()
const {
return size_; }
4506 explicit CompiledWasmModule(std::shared_ptr<
internal::
wasm::NativeModule>);
4509 const std::shared_ptr<
internal::
wasm::NativeModule> native_module_;
4521 class TransferrableModule
final {
4526 TransferrableModule&
operator=(TransferrableModule&& src) =
default;
4527 TransferrableModule&
operator=(
const TransferrableModule& src) =
delete;
4530 typedef std::shared_ptr<
internal::
wasm::NativeModule> SharedModule;
4532 explicit TransferrableModule(SharedModule shared_module)
4533 : shared_module_(std::move(shared_module)) {}
4535 : serialized_(std::move(serialized)), wire_bytes_(std::move(bytes)) {}
4537 SharedModule shared_module_;
4554 Isolate* isolate,
const TransferrableModule&);
4576 const uint8_t* start,
4583 static void CheckCast(
Value* obj);
4594 class WasmStreamingImpl;
4657 std::unique_ptr<WasmStreamingImpl> impl_;
4681 WasmModuleObjectBuilderStreaming(
const WasmModuleObjectBuilderStreaming&) =
4683 WasmModuleObjectBuilderStreaming(WasmModuleObjectBuilderStreaming&&) =
4685 WasmModuleObjectBuilderStreaming& operator=(
4686 const WasmModuleObjectBuilderStreaming&) =
delete;
4687 WasmModuleObjectBuilderStreaming& operator=(
4688 WasmModuleObjectBuilderStreaming&&) =
default;
4699 Persistent<Promise, CopyablePersistentTraits<Promise>> promise_;
4703 std::shared_ptr<
internal::
wasm::StreamingDecoder> streaming_decoder_;
4706 #ifndef V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT
4708 #define V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT 2
4755 virtual void Free(
void* data, size_t length) = 0;
4784 using DeleterCallback =
void (*)(
void* buffer, size_t length,
void* info);
4789 allocation_base_(
nullptr),
4790 allocation_length_(0),
4793 deleter_data_(
nullptr) {}
4798 return allocation_mode_;
4801 void*
Data()
const {
return data_; }
4803 DeleterCallback
Deleter()
const {
return deleter_; }
4807 Contents(
void* data, size_t byte_length,
void* allocation_base,
4808 size_t allocation_length,
4810 void* deleter_data);
4813 size_t byte_length_;
4814 void* allocation_base_;
4815 size_t allocation_length_;
4817 DeleterCallback deleter_;
4818 void* deleter_data_;
4847 Isolate* isolate,
void* data, size_t byte_length,
4863 inline bool IsNeuterable()
const) {
4907 static void CheckCast(
Value* obj);
4911 #ifndef V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT
4913 #define V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT 2
4962 static void CheckCast(
Value* obj);
4987 static void CheckCast(
Value* obj);
4997 size_t byte_offset, size_t length);
4999 size_t byte_offset, size_t length);
5004 static void CheckCast(
Value* obj);
5014 size_t byte_offset, size_t length);
5021 Uint8ClampedArray();
5022 static void CheckCast(
Value* obj);
5031 size_t byte_offset, size_t length);
5033 size_t byte_offset, size_t length);
5038 static void CheckCast(
Value* obj);
5048 size_t byte_offset, size_t length);
5050 size_t byte_offset, size_t length);
5055 static void CheckCast(
Value* obj);
5065 size_t byte_offset, size_t length);
5067 size_t byte_offset, size_t length);
5072 static void CheckCast(
Value* obj);
5082 size_t byte_offset, size_t length);
5084 size_t byte_offset, size_t length);
5089 static void CheckCast(
Value* obj);
5099 size_t byte_offset, size_t length);
5101 size_t byte_offset, size_t length);
5106 static void CheckCast(
Value* obj);
5116 size_t byte_offset, size_t length);
5118 size_t byte_offset, size_t length);
5123 static void CheckCast(
Value* obj);
5133 size_t byte_offset, size_t length);
5135 size_t byte_offset, size_t length);
5140 static void CheckCast(
Value* obj);
5149 size_t byte_offset, size_t length);
5151 size_t byte_offset, size_t length);
5156 static void CheckCast(
Value* obj);
5165 size_t byte_offset, size_t length);
5167 size_t byte_offset, size_t length);
5172 static void CheckCast(
Value* obj);
5181 size_t byte_offset, size_t length);
5183 size_t byte_offset, size_t length);
5188 static void CheckCast(
Value* obj);
5212 using DeleterCallback =
void (*)(
void* buffer, size_t length,
void* info);
5217 allocation_base_(
nullptr),
5218 allocation_length_(0),
5221 deleter_data_(
nullptr) {}
5226 return allocation_mode_;
5229 void*
Data()
const {
return data_; }
5231 DeleterCallback
Deleter()
const {
return deleter_; }
5235 Contents(
void* data, size_t byte_length,
void* allocation_base,
5236 size_t allocation_length,
5237 Allocator::
AllocationMode allocation_mode, DeleterCallback deleter,
5238 void* deleter_data);
5241 size_t byte_length_;
5242 void* allocation_base_;
5243 size_t allocation_length_;
5245 DeleterCallback deleter_;
5246 void* deleter_data_;
5271 Isolate* isolate,
void* data, size_t byte_length,
5323 SharedArrayBuffer();
5324 static void CheckCast(
Value* obj);
5345 static void CheckCast(
Value* obj);
5361 static void CheckCast(
Value* obj);
5376 static void CheckCast(
Value* obj);
5391 static void CheckCast(
Value* obj);
5407 static void CheckCast(
Value* obj);
5423 static void CheckCast(
Value* obj);
5476 static void CheckCast(
Value* obj);
5516 static void CheckCast(
v8::
Value* obj);
5519 #define V8_INTRINSICS_LIST(F)
5520 F(ArrayProto_entries, array_entries_iterator)
5521 F(ArrayProto_forEach, array_for_each_iterator)
5522 F(ArrayProto_keys, array_keys_iterator)
5523 F(ArrayProto_values, array_values_iterator)
5524 F(ErrorPrototype, initial_error_prototype)
5525 F(IteratorPrototype, initial_iterator_prototype)
5528 #define V8_DECL_INTRINSIC(name, iname) k##name,
5530 #undef V8_DECL_INTRINSIC
6080 static void CheckCast(
Data* that);
6363 deleter
, enumerator
, data
));
6449 static void CheckCast(
Data* that);
6472 static void CheckCast(
Data* that);
6489 AccessorSignature();
6491 static void CheckCast(
Data* that);
6504 Extension(
const char* name,
const char* source =
nullptr,
int dep_count = 0,
6505 const char** deps =
nullptr,
int source_length = -1);
6512 const char*
name()
const {
return name_; }
6528 size_t source_length_;
6579 size_t maximum_heap_size_in_bytes);
6591 uint64_t virtual_memory_limit);
6614 return max_old_generation_size_;
6617 max_old_generation_size_ = limit;
6626 return max_young_generation_size_;
6629 max_young_generation_size_ = limit;
6633 return initial_old_generation_size_;
6636 initial_old_generation_size_ = initial_size;
6640 return initial_young_generation_size_;
6643 initial_young_generation_size_ = initial_size;
6650 size_t code_range_size()
const) {
6651 return code_range_size_ / kMB;
6654 void set_code_range_size(size_t limit_in_mb)) {
6655 code_range_size_ = limit_in_mb * kMB;
6658 size_t max_semi_space_size_in_kb()
const);
6660 void set_max_semi_space_size_in_kb(size_t limit_in_kb));
6662 size_t max_old_space_size()
const) {
6663 return max_old_generation_size_ / kMB;
6666 void set_max_old_space_size(size_t limit_in_mb)) {
6667 max_old_generation_size_ = limit_in_mb * kMB;
6670 size_t max_zone_pool_size()
const) {
6671 return max_zone_pool_size_;
6674 void set_max_zone_pool_size(size_t bytes)) {
6675 max_zone_pool_size_ = bytes;
6679 static constexpr size_t kMB = 1048576u;
6680 size_t code_range_size_ = 0;
6681 size_t max_old_generation_size_ = 0;
6682 size_t max_young_generation_size_ = 0;
6683 size_t max_zone_pool_size_ = 0;
6684 size_t initial_old_generation_size_ = 0;
6685 size_t initial_young_generation_size_ = 0;
6686 uint32_t* stack_limit_ =
nullptr;
6698 const char* message);
6854 : promise_(promise), event_(event), value_(value) {}
6870 typedef void (*MicrotasksCompletedCallback)(
Isolate*));
6920 void* data =
nullptr) = 0;
6964 MicrotaskQueue() =
default;
7005 internal::MicrotaskQueue*
const microtask_queue_;
7099 typedef size_t (*NearHeapLimitCallback)(
void* data, size_t current_heap_limit,
7100 size_t initial_heap_limit);
7130 size_t total_heap_size_;
7131 size_t total_heap_size_executable_;
7132 size_t total_physical_size_;
7133 size_t total_available_size_;
7134 size_t used_heap_size_;
7135 size_t heap_size_limit_;
7136 size_t malloced_memory_;
7137 size_t external_memory_;
7138 size_t peak_malloced_memory_;
7139 bool does_zap_garbage_;
7140 size_t number_of_native_contexts_;
7141 size_t number_of_detached_contexts_;
7158 const char* space_name_;
7160 size_t space_used_size_;
7161 size_t space_available_size_;
7162 size_t physical_space_size_;
7177 const char* object_type_;
7178 const char* object_sub_type_;
7179 size_t object_count_;
7180 size_t object_size_;
7193 size_t code_and_metadata_size_;
7194 size_t bytecode_and_metadata_size_;
7195 size_t external_script_source_size_;
7317 #if defined(V8_OS_WIN)
7339 uint16_t class_id) {}
7415 const std::vector<std::pair<
void*,
void*> >& embedder_fields) = 0;
7451 virtual void TraceEpilogue()) {}
7545 void* data_arg =
nullptr)
7562 void* data_arg =
nullptr)
7712 void* internal_throws_;
7713 void* internal_assert_;
7714 void* internal_dump_;
7735 internal::MicrotaskQueue*
const microtask_queue_;
8103 size_t frames_limit,
SampleInfo* sample_info);
8278 size_t offset_in_bytes, int64_t value,
8279 double timeout_in_ms,
8310 void* data =
nullptr);
8313 typedef size_t (*GetExternallyAllocatedMemoryInBytesCallback)();
8322 GetExternallyAllocatedMemoryInBytesCallback callback);
8465 void AddMicrotasksCompletedCallback(
8466 MicrotasksCompletedCallback callback));
8474 void RemoveMicrotasksCompletedCallback(
8475 MicrotasksCompletedCallback callback));
8753 bool capture,
int frame_limit = 10,
8840 template <
class K,
class V,
class Traits>
8844 void ReportExternalAllocationLimitReached();
8845 void CheckMemoryPressure();
8881 typedef uintptr_t (*ReturnAddressLocationResolver)(
8882 uintptr_t return_addr_location);
8918 static void SetFlagsFromString(
const char* str,
int length));
8947 ReturnAddressLocationResolver return_address_resolver);
8982 const char* icu_data_file =
nullptr);
9002 const char* snapshot_blob);
9036 static bool TryHandleSignal(
int signal_number,
void* info,
9048 #if defined(V8_OS_WIN)
9070 bool has_destructor);
9075 static void CopyTracedGlobalReference(
const internal::
Address*
const* from,
9085 static void SetFinalizationCallbackTraced(
9092 template <
class K,
class V,
class T>
9095 static void FromJustIsNothing();
9096 static void ToLocalEmpty();
9097 static void InternalFieldOutOfBounds(
int index);
9131 const intptr_t* external_references =
nullptr,
9272 return has_value_ ? value_ : default_value;
9276 return (
IsJust() == other.IsJust()) &&
9285 Maybe() : has_value_(
false) {}
9286 explicit Maybe(
const T& t) : has_value_(
true), value_(t) {}
9325 Maybe() : is_valid_(
false) {}
9326 explicit Maybe(JustTag) : is_valid_(
true) {}
9462 if (handler ==
nullptr)
return nullptr;
9463 return handler->js_stack_comparable_address_;
9472 void* operator
new(size_t size);
9473 void* operator
new[](size_t size);
9474 void operator
delete(
void*, size_t);
9475 void operator
delete[](
void*, size_t);
9477 void ResetInternal();
9483 void* js_stack_comparable_address_;
9484 bool is_verbose_ : 1;
9485 bool can_continue_ : 1;
9486 bool capture_message_ : 1;
9488 bool has_terminated_ : 1;
9504 : name_count_(name_count), names_(names) { }
9506 const char**
begin()
const {
return &names_[0]; }
9507 const char**
end()
const {
return &names_[name_count_]; }
9510 const int name_count_;
9511 const char** names_;
9585 Isolate* isolate, size_t context_snapshot_index,
9769 return js_stack_comparable_address_;
9776 uintptr_t js_stack_comparable_address_ = 0;
9777 const BackupIncumbentScope* prev_ =
nullptr;
9788 void* SlowGetAlignedPointerFromEmbedderData(
int index);
9877 void Initialize(
Isolate* isolate);
9908 void Initialize(
Isolate* isolate);
9952 const void* stack_base);
9969 return New(isolate, that.val_);
9974 return New(isolate, that.val_);
9979 return New(isolate, that.val_);
9984 if (that ==
nullptr)
return Local<T>();
9988 reinterpret_cast<
internal::Isolate*>(isolate)
, *p
)));
9996 val_ =
reinterpret_cast<T*>(
9997 V8::Eternalize(isolate,
reinterpret_cast<
Value*>(*handle)));
10004 return Local<T>(val_);
10011 return Local<T>(val_);
10017 #ifdef V8_ENABLE_CHECKS
10018 if (index < 0 || index >= kEmbedderFieldsInWeakCallback) {
10019 V8::InternalFieldOutOfBounds(index);
10022 return embedder_fields_[index];
10028 if (that ==
nullptr)
return nullptr;
10030 return reinterpret_cast<T*>(
10031 V8::GlobalizeReference(
reinterpret_cast<
internal::Isolate*>(isolate),
10036 template <
class T,
class M>
10037 template <
class S,
class M2>
10041 if (that.IsEmpty())
return;
10043 this->val_ =
reinterpret_cast<T*>(
V8::CopyGlobalReference(p));
10044 M::Copy(that,
this);
10050 if (
this->IsEmpty())
return false;
10058 if (
this->IsEmpty())
return;
10069 if (other.IsEmpty())
return;
10070 this->val_ = New(isolate, other.val_);
10080 if (other.IsEmpty())
return;
10081 this->val_ = New(isolate, other.val_);
10086 template <
typename P>
10092 reinterpret_cast<Callback>(callback), type);
10101 template <
typename P>
10103 return reinterpret_cast<P*>(
10116 if (
this->IsEmpty())
return;
10119 *
reinterpret_cast<uint16_t*>(addr) = class_id;
10126 if (
this->IsEmpty())
return 0;
10129 return *
reinterpret_cast<uint16_t*>(addr);
10134 if (other.val_ !=
nullptr) {
10137 other.val_ =
nullptr;
10145 if (
this != &rhs) {
10147 if (rhs.val_ !=
nullptr) {
10148 this->val_ = rhs.val_;
10149 V8::MoveGlobalReference(
10152 rhs.val_ =
nullptr;
10159 TracedGlobal<T>::WrappedForDestruction::~WrappedForDestruction() {
10160 if (value ==
nullptr)
return;
10167 if (that ==
nullptr)
return nullptr;
10169 return reinterpret_cast<T*>(
V8::GlobalizeTracedReference(
10170 reinterpret_cast<
internal::Isolate*>(isolate), p,
10187 if (other.IsEmpty())
return;
10188 this->val_ = New(isolate, other.val_, &val_);
10195 *
this = std::move(rhs.
template As<T>());
10203 *
this = rhs.
template As<T>();
10209 if (
this != &rhs) {
10211 if (rhs.val_ !=
nullptr) {
10212 this->val_ = rhs.val_;
10213 V8::MoveTracedGlobalReference(
10216 rhs.val_ =
nullptr;
10224 if (
this != &rhs) {
10226 if (rhs.val_ !=
nullptr) {
10227 V8::CopyTracedGlobalReference(
10241 *
reinterpret_cast<uint16_t*>(addr) = class_id;
10250 return *
reinterpret_cast<uint16_t*>(addr);
10256 V8::SetFinalizationCallbackTraced(
10260 template <
typename T>
10263 template <
typename T>
10264 template <
typename S>
10268 *value_ = GetDefaultValue();
10274 template <
typename T>
10275 template <
typename S>
10279 *value_ = GetDefaultValue();
10285 template <
typename T>
10286 template <
typename S>
10290 *value_ = GetDefaultValue();
10296 template<
typename T>
10302 template<
typename T>
10313 template<
typename T>
10317 bool fits_into_int32_t = (i & (1U << 31)) == 0;
10319 Set(
static_cast<int32_t>(i));
10325 template<
typename T>
10338 template<
typename T>
10345 template<
typename T>
10352 template<
typename T>
10359 template <
typename T>
10362 return *
reinterpret_cast<
Isolate**>(&value_[-2]);
10365 template <
typename T>
10373 template <
typename T>
10374 template <
typename S>
10380 template <
typename T>
10386 template <
typename T>
10392 template<
typename T>
10399 template<
typename T>
10405 template<
typename T>
10411 template <
typename T>
10417 template <
typename T>
10423 template<
typename T>
10429 template<
typename T>
10435 template<
typename T>
10441 template<
typename T>
10455 : resource_name_(resource_name),
10456 resource_line_offset_(resource_line_offset),
10457 resource_column_offset_(resource_column_offset),
10458 options_
(!resource_is_shared_cross_origin
.IsEmpty() &&
10463 script_id_(script_id),
10464 source_map_url_(source_map_url),
10465 host_defined_options_(host_defined_options) {}
10470 return host_defined_options_;
10474 return resource_line_offset_;
10479 return resource_column_offset_;
10490 : source_string(string),
10497 cached_data(data) {}
10501 : source_string(string), cached_data(data) {}
10505 delete cached_data;
10511 return cached_data;
10515 return resource_options;
10529 #ifdef V8_ENABLE_CHECKS
10536 #ifdef V8_ENABLE_CHECKS
10543 #ifdef V8_ENABLE_CHECKS
10546 return reinterpret_cast<
Signature*>(data);
10550 #ifdef V8_ENABLE_CHECKS
10557 #ifndef V8_ENABLE_CHECKS
10560 A obj = *
reinterpret_cast<A*>(
this);
10569 #ifdef V8_COMPRESS_POINTERS
10572 value = I::DecompressTaggedAnyField(obj,
static_cast<int32_t>(value));
10580 return SlowGetInternalField(index);
10585 #ifndef V8_ENABLE_CHECKS
10588 A obj = *
reinterpret_cast<A*>(
this);
10599 return SlowGetAlignedPointerFromInternalField(index);
10603 #ifdef V8_ENABLE_CHECKS
10606 return static_cast<
String*>(value);
10622 A obj = *
reinterpret_cast<
const A*>(
this);
10629 result = GetExternalStringResourceSlow();
10631 #ifdef V8_ENABLE_CHECKS
10632 VerifyExternalStringResource(result);
10642 A obj = *
reinterpret_cast<
const A*>(
this);
10651 resource = GetExternalStringResourceBaseSlow(encoding_out);
10653 #ifdef V8_ENABLE_CHECKS
10654 VerifyExternalStringResourceBase(resource, *encoding_out);
10661 #ifdef V8_ENABLE_CHECKS
10662 return FullIsUndefined();
10664 return QuickIsUndefined();
10668 bool Value::QuickIsUndefined()
const {
10671 A obj = *
reinterpret_cast<
const A*>(
this);
10679 #ifdef V8_ENABLE_CHECKS
10680 return FullIsNull();
10682 return QuickIsNull();
10686 bool Value::QuickIsNull()
const {
10689 A obj = *
reinterpret_cast<
const A*>(
this);
10696 #ifdef V8_ENABLE_CHECKS
10697 return FullIsNull() || FullIsUndefined();
10699 return QuickIsNullOrUndefined();
10703 bool Value::QuickIsNullOrUndefined()
const {
10706 A obj = *
reinterpret_cast<
const A*>(
this);
10714 #ifdef V8_ENABLE_CHECKS
10715 return FullIsString();
10717 return QuickIsString();
10721 bool Value::QuickIsString()
const {
10724 A obj = *
reinterpret_cast<
const A*>(
this);
10731 return static_cast<
Value*>(value);
10736 #ifdef V8_ENABLE_CHECKS
10739 return static_cast<
Boolean*>(value);
10744 #ifdef V8_ENABLE_CHECKS
10747 return static_cast<
Name*>(value);
10752 #ifdef V8_ENABLE_CHECKS
10755 return static_cast<
Symbol*>(value);
10760 #ifdef V8_ENABLE_CHECKS
10763 return reinterpret_cast<
Private*>(data);
10768 #ifdef V8_ENABLE_CHECKS
10771 return static_cast<
Number*>(value);
10776 #ifdef V8_ENABLE_CHECKS
10779 return static_cast<
Integer*>(value);
10784 #ifdef V8_ENABLE_CHECKS
10787 return static_cast<
Int32*>(value);
10792 #ifdef V8_ENABLE_CHECKS
10795 return static_cast<
Uint32*>(value);
10799 #ifdef V8_ENABLE_CHECKS
10802 return static_cast<
BigInt*>(value);
10806 #ifdef V8_ENABLE_CHECKS
10809 return static_cast<
Date*>(value);
10814 #ifdef V8_ENABLE_CHECKS
10822 #ifdef V8_ENABLE_CHECKS
10830 #ifdef V8_ENABLE_CHECKS
10837 #ifdef V8_ENABLE_CHECKS
10844 #ifdef V8_ENABLE_CHECKS
10852 #ifdef V8_ENABLE_CHECKS
10855 return static_cast<
RegExp*>(value);
10860 #ifdef V8_ENABLE_CHECKS
10863 return static_cast<
Object*>(value);
10868 #ifdef V8_ENABLE_CHECKS
10871 return static_cast<
Array*>(value);
10876 #ifdef V8_ENABLE_CHECKS
10879 return static_cast<
Map*>(value);
10884 #ifdef V8_ENABLE_CHECKS
10887 return static_cast<
Set*>(value);
10892 #ifdef V8_ENABLE_CHECKS
10895 return static_cast<
Promise*>(value);
10900 #ifdef V8_ENABLE_CHECKS
10903 return static_cast<
Proxy*>(value);
10907 #ifdef V8_ENABLE_CHECKS
10914 #ifdef V8_ENABLE_CHECKS
10922 #ifdef V8_ENABLE_CHECKS
10930 #ifdef V8_ENABLE_CHECKS
10938 #ifdef V8_ENABLE_CHECKS
10946 #ifdef V8_ENABLE_CHECKS
10954 #ifdef V8_ENABLE_CHECKS
10962 #ifdef V8_ENABLE_CHECKS
10970 #ifdef V8_ENABLE_CHECKS
10978 #ifdef V8_ENABLE_CHECKS
10986 #ifdef V8_ENABLE_CHECKS
10994 #ifdef V8_ENABLE_CHECKS
11002 #ifdef V8_ENABLE_CHECKS
11009 #ifdef V8_ENABLE_CHECKS
11016 #ifdef V8_ENABLE_CHECKS
11023 #ifdef V8_ENABLE_CHECKS
11031 #ifdef V8_ENABLE_CHECKS
11034 return static_cast<
DataView*>(value);
11039 #ifdef V8_ENABLE_CHECKS
11047 #ifdef V8_ENABLE_CHECKS
11050 return static_cast<
Function*>(value);
11055 #ifdef V8_ENABLE_CHECKS
11058 return static_cast<
External*>(value);
11062 template<
typename T>
11068 template<
typename T>
11074 template<
typename T>
11080 template<
typename T>
11086 template<
typename T>
11091 template <
typename T>
11157 T* data =
reinterpret_cast<T*>(GetDataFromSnapshotOnce(index));
11158 if (data)
internal::PerformCastCheck(data);
11159 return Local<T>(data);
11163 int64_t change_in_bytes) {
11165 constexpr int64_t kMemoryReducerActivationLimit = 32 * 1024 * 1024;
11166 int64_t* external_memory =
reinterpret_cast<int64_t*>(
11168 int64_t* external_memory_limit =
reinterpret_cast<int64_t*>(
11170 int64_t* external_memory_at_last_mc =
11171 reinterpret_cast<int64_t*>(
reinterpret_cast<uint8_t*>(
this) +
11176 const int64_t amount =
11177 static_cast<int64_t>(
static_cast<uint64_t>(change_in_bytes) +
11178 static_cast<uint64_t>(*external_memory));
11179 *external_memory = amount;
11181 int64_t allocation_diff_since_last_mc =
11182 static_cast<int64_t>(
static_cast<uint64_t>(*external_memory) -
11183 static_cast<uint64_t>(*external_memory_at_last_mc));
11186 if (allocation_diff_since_last_mc > kMemoryReducerActivationLimit) {
11187 CheckMemoryPressure();
11190 if (change_in_bytes < 0) {
11191 const int64_t lower_limit =
11192 static_cast<int64_t>(
static_cast<uint64_t>(*external_memory_limit) +
11193 static_cast<uint64_t>(change_in_bytes));
11195 *external_memory_limit = lower_limit;
11197 }
else if (change_in_bytes > 0 && amount > *external_memory_limit) {
11198 ReportExternalAllocationLimitReached();
11200 return *external_memory;
11204 #ifndef V8_ENABLE_CHECKS
11207 A ctx = *
reinterpret_cast<
const A*>(
this);
11213 #ifdef V8_COMPRESS_POINTERS
11217 I::DecompressTaggedAnyField(embedder_data,
static_cast<int32_t>(value));
11220 *
reinterpret_cast<A*>(
this)
);
11224 return SlowGetEmbedderData(index);
11230 #ifndef V8_ENABLE_CHECKS
11233 A ctx = *
reinterpret_cast<
const A*>(
this);
11240 return SlowGetAlignedPointerFromEmbedderData(index);
11246 T* data =
reinterpret_cast<T*>(GetDataFromSnapshotOnce(index));
11247 if (data)
internal::PerformCastCheck(data);
11248 return Local<T>(data);
11253 T* object_ptr = *object;
11255 return AddData(context, *p);
11260 T* object_ptr = *object;
11262 return AddData(*p);