Loading...
Searching...
No Matches
v8-primitive.h
Go to the documentation of this file.
1// Copyright 2021 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef INCLUDE_V8_PRIMITIVE_H_
6#define INCLUDE_V8_PRIMITIVE_H_
7
8#include "v8-data.h" // NOLINT(build/include_directory)
9#include "v8-internal.h" // NOLINT(build/include_directory)
10#include "v8-local-handle.h" // NOLINT(build/include_directory)
11#include "v8-value.h" // NOLINT(build/include_directory)
12#include "v8config.h" // NOLINT(build/include_directory)
13
14namespace v8 {
15
16class Context;
17class Isolate;
18class String;
19
20namespace internal {
21class ExternalString;
22class ScopedExternalStringLock;
23class StringForwardingTable;
24} // namespace internal
25
29class V8_EXPORT Primitive : public Value {};
30
35class V8_EXPORT Boolean : public Primitive {
36 public:
37 bool Value() const;
38 V8_INLINE static Boolean* Cast(v8::Data* data) {
39#ifdef V8_ENABLE_CHECKS
40 CheckCast(data);
41#endif
42 return static_cast<Boolean*>(data);
43 }
44
45 V8_INLINE static Local<Boolean> New(Isolate* isolate, bool value);
46
47 private:
48 static void CheckCast(v8::Data* that);
49};
50
59 public:
60 static Local<PrimitiveArray> New(Isolate* isolate, int length);
61 int Length() const;
62 void Set(Isolate* isolate, int index, Local<Primitive> item);
63 Local<Primitive> Get(Isolate* isolate, int index);
64
66#ifdef V8_ENABLE_CHECKS
67 CheckCast(data);
68#endif
69 return reinterpret_cast<PrimitiveArray*>(data);
70 }
71
72 private:
73 static void CheckCast(Data* obj);
74};
75
79class V8_EXPORT Name : public Primitive {
80 public:
89
90 V8_INLINE static Name* Cast(Data* data) {
91#ifdef V8_ENABLE_CHECKS
92 CheckCast(data);
93#endif
94 return static_cast<Name*>(data);
95 }
96
97 private:
98 static void CheckCast(Data* that);
99};
100
107enum class NewStringType {
111 kNormal,
112
119};
120
124class V8_EXPORT String : public Name {
125 public:
126 static constexpr int kMaxLength =
127 internal::kApiSystemPointerSize == 4 ? (1 << 28) - 16 : (1 << 29) - 24;
128
129 enum Encoding {
130 UNKNOWN_ENCODING = 0x1,
131 TWO_BYTE_ENCODING = 0x0,
132 ONE_BYTE_ENCODING = 0x8
133 };
137 int Length() const;
138
143 size_t Utf8LengthV2(Isolate* isolate) const;
144
151 bool IsOneByte() const;
152
159
160 struct WriteFlags {
161 enum {
162 kNone = 0,
163 // Indicates that the output string should be null-terminated. In that
164 // case, the output buffer must include sufficient space for the
165 // additional null character.
166 kNullTerminate = 1,
167 // Used by WriteUtf8 to replace orphan surrogate code units with the
168 // unicode replacement character. Needs to be set to guarantee valid UTF-8
169 // output.
170 kReplaceInvalidUtf8 = 2
171 };
172 };
173
188 void WriteV2(Isolate* isolate, uint32_t offset, uint32_t length,
189 uint16_t* buffer, int flags = WriteFlags::kNone) const;
190 void WriteOneByteV2(Isolate* isolate, uint32_t offset, uint32_t length,
191 uint8_t* buffer, int flags = WriteFlags::kNone) const;
192
213 size_t WriteUtf8V2(Isolate* isolate, char* buffer, size_t capacity,
214 int flags = WriteFlags::kNone,
215 size_t* processed_characters_return = nullptr) const;
216
220 V8_INLINE static Local<String> Empty(Isolate* isolate);
221
225 bool IsExternal() const;
226
230 bool IsExternalTwoByte() const;
231
235 bool IsExternalOneByte() const;
236
242
244 public:
245 virtual ~ExternalStringResourceBase() = default;
246
252 virtual bool IsCacheable() const { return true; }
253
259 virtual void Unaccount(Isolate* isolate) {}
260
270 virtual size_t EstimateMemoryUsage() const {
271 return kDefaultMemoryEstimate;
272 }
273 static constexpr size_t kDefaultMemoryEstimate = static_cast<size_t>(-1);
274
276 public:
281 virtual void RecordSharedMemoryUsage(const void* location,
282 size_t size) = 0;
283 };
284
290 SharedMemoryUsageRecorder* recorder) const {}
291
292 // Disallow copying and assigning.
295
296 protected:
298
305 virtual void Dispose() { delete this; }
306
318 virtual void Lock() const {}
319
323 virtual void Unlock() const {}
324
325 private:
326 friend class internal::ExternalString;
327 friend class v8::String;
328 friend class internal::StringForwardingTable;
329 friend class internal::ScopedExternalStringLock;
330 };
331
339 public:
344 ~ExternalStringResource() override = default;
345
350 virtual const uint16_t* data() const = 0;
351
355 virtual size_t length() const = 0;
356
362 const uint16_t* cached_data() const {
363 CheckCachedDataInvariants();
364 return cached_data_;
365 }
366
372
373 protected:
375
376 private:
377 void CheckCachedDataInvariants() const;
378
379 const uint16_t* cached_data_ = nullptr;
380 };
381
394 public:
399 ~ExternalOneByteStringResource() override = default;
400
405 virtual const char* data() const = 0;
406
408 virtual size_t length() const = 0;
409
415 const char* cached_data() const {
416 CheckCachedDataInvariants();
417 return cached_data_;
418 }
419
425
426 protected:
428
429 private:
430 void CheckCachedDataInvariants() const;
431
432 const char* cached_data_ = nullptr;
433 };
434
440 V8_INLINE ExternalStringResourceBase* GetExternalStringResourceBase(
441 v8::Isolate* isolate, Encoding* encoding_out) const;
442 V8_INLINE ExternalStringResourceBase* GetExternalStringResourceBase(
443 Encoding* encoding_out) const;
444
449 // TODO(pthier): Change return type to const ExternalStringResource*.
450 V8_INLINE ExternalStringResource* GetExternalStringResource() const;
451
457 GetExternalOneByteStringResource() const;
458
459 V8_INLINE static String* Cast(v8::Data* data) {
460#ifdef V8_ENABLE_CHECKS
461 CheckCast(data);
462#endif
463 return static_cast<String*>(data);
464 }
465
475 template <int N>
477 Isolate* isolate, const char (&literal)[N],
478 NewStringType type = NewStringType::kNormal) {
479 static_assert(N <= kMaxLength, "String is too long");
480 return NewFromUtf8Literal(isolate, literal, type, N - 1);
481 }
482
486 Isolate* isolate, const char* data,
487 NewStringType type = NewStringType::kNormal, int length = -1);
492 Isolate* isolate, const uint8_t* data,
493 NewStringType type = NewStringType::kNormal, int length = -1);
494
498 Isolate* isolate, const uint16_t* data,
499 NewStringType type = NewStringType::kNormal, int length = -1);
500
506 Local<String> right);
507
517 Isolate* isolate, ExternalStringResource* resource);
518
528 V8_DEPRECATE_SOON("Use the version with the isolate argument instead.")
529 bool MakeExternal(ExternalStringResource* resource);
530
540 bool MakeExternal(Isolate* isolate, ExternalStringResource* resource);
541
550 static V8_WARN_UNUSED_RESULT MaybeLocal<String> NewExternalOneByte(
551 Isolate* isolate, ExternalOneByteStringResource* resource);
552
562 V8_DEPRECATE_SOON("Use the version with the isolate argument instead.")
563 bool MakeExternal(ExternalOneByteStringResource* resource);
564
574 bool MakeExternal(Isolate* isolate, ExternalOneByteStringResource* resource);
575
580 bool CanMakeExternal(Encoding encoding) const;
581
585 bool StringEquals(Local<String> str) const;
586
598 public:
601 char* operator*() { return str_; }
602 const char* operator*() const { return str_; }
603 size_t length() const { return length_; }
604
605 // Disallow copying and assigning.
606 Utf8Value(const Utf8Value&) = delete;
607 void operator=(const Utf8Value&) = delete;
608
609 private:
610 char* str_;
611 size_t length_;
612 };
613
625 "Prefer using String::ValueView if you can, or string->Write to a "
626 "buffer if you cannot.") V8_EXPORT Value {
627 public:
629 "Prefer using String::ValueView if you can, or string->Write to a "
630 "buffer if you cannot.")
631 Value(Isolate* isolate, Local<v8::Value> obj);
633 uint16_t* operator*() { return str_; }
634 const uint16_t* operator*() const { return str_; }
635 uint32_t length() const { return length_; }
636
637 // Disallow copying and assigning.
638 Value(const Value&) = delete;
639 void operator=(const Value&) = delete;
640
641 private:
642 uint16_t* str_;
643 uint32_t length_;
644 };
645
657 public:
660 const uint8_t* data8() const {
661#if V8_ENABLE_CHECKS
662 CheckOneByte(true);
663#endif
664 return data8_;
665 }
666 const uint16_t* data16() const {
667#if V8_ENABLE_CHECKS
668 CheckOneByte(false);
669#endif
670 return data16_;
671 }
672 uint32_t length() const { return length_; }
673 bool is_one_byte() const { return is_one_byte_; }
674
675 // Disallow copying and assigning.
676 ValueView(const ValueView&) = delete;
677 void operator=(const ValueView&) = delete;
678
679 private:
680 void CheckOneByte(bool is_one_byte) const;
681
682 Local<v8::String> flat_str_;
683 union {
684 const uint8_t* data8_;
685 const uint16_t* data16_;
686 };
687 uint32_t length_;
688 bool is_one_byte_;
689 // Avoid exposing the internal DisallowGarbageCollection scope.
690 alignas(internal::Internals::
691 kDisallowGarbageCollectionAlign) char no_gc_debug_scope_
692 [internal::Internals::kDisallowGarbageCollectionSize];
693 };
694
695 private:
696 void VerifyExternalStringResourceBase(const ExternalStringResourceBase* v,
697 Encoding encoding) const;
698 ExternalStringResource* GetExternalStringResourceSlow() const;
699 const ExternalOneByteStringResource* GetExternalOneByteStringResourceSlow()
700 const;
701 ExternalStringResourceBase* GetExternalStringResourceBaseSlow(
702 String::Encoding* encoding_out) const;
703
704 static Local<v8::String> NewFromUtf8Literal(Isolate* isolate,
705 const char* literal,
706 NewStringType type, int length);
707
708 static void CheckCast(v8::Data* that);
709};
710
711// Zero-length string specialization (templated string size includes
712// terminator).
713template <>
715 Isolate* isolate, const char (&literal)[1], NewStringType type) {
716 return String::Empty(isolate);
717}
718
723 public:
724 virtual ~ExternalResourceVisitor() = default;
725 virtual void VisitExternalString(Local<String> string) {}
726};
727
731class V8_EXPORT Symbol : public Name {
732 public:
737
742 static Local<Symbol> New(Isolate* isolate,
743 Local<String> description = Local<String>());
744
753 static Local<Symbol> For(Isolate* isolate, Local<String> description);
754
759 static Local<Symbol> ForApi(Isolate* isolate, Local<String> description);
760
761 // Well-known symbols
775
776 V8_INLINE static Symbol* Cast(Data* data) {
777#ifdef V8_ENABLE_CHECKS
778 CheckCast(data);
779#endif
780 return static_cast<Symbol*>(data);
781 }
782
783 private:
784 Symbol();
785 static void CheckCast(Data* that);
786};
787
793 private:
794 Numeric();
795 static void CheckCast(v8::Data* that);
796};
797
801class V8_EXPORT Number : public Numeric {
802 public:
803 double Value() const;
804 static Local<Number> New(Isolate* isolate, double value);
805 template <typename Int>
806 requires(std::is_integral<Int>::value && !std::is_same<Int, bool>::value &&
807 std::is_signed_v<Int> && sizeof(Int) <= sizeof(int32_t))
808 V8_INLINE static Local<Number> New(Isolate* isolate, Int value) {
809 return NewFromInt32(isolate, value);
810 }
811 template <typename UInt>
812 requires(std::is_integral<UInt>::value &&
813 !std::is_same<UInt, bool>::value && std::is_unsigned_v<UInt> &&
814 sizeof(UInt) <= sizeof(uint32_t))
815 V8_INLINE static Local<Number> New(Isolate* isolate, UInt value) {
816 return NewFromUint32(isolate, value);
817 }
818 V8_INLINE static Number* Cast(v8::Data* data) {
819#ifdef V8_ENABLE_CHECKS
820 CheckCast(data);
821#endif
822 return static_cast<Number*>(data);
823 }
824
825 private:
826 Number();
827 static Local<Number> NewFromInt32(Isolate* isolate, int32_t value);
828 static Local<Number> NewFromUint32(Isolate* isolate, uint32_t value);
829 static void CheckCast(v8::Data* that);
830};
831
835class V8_EXPORT Integer : public Number {
836 public:
837 static Local<Integer> New(Isolate* isolate, int32_t value);
838 static Local<Integer> NewFromUnsigned(Isolate* isolate, uint32_t value);
839 int64_t Value() const;
841#ifdef V8_ENABLE_CHECKS
842 CheckCast(data);
843#endif
844 return static_cast<Integer*>(data);
845 }
846
847 private:
848 Integer();
849 static void CheckCast(v8::Data* that);
850};
851
855class V8_EXPORT Int32 : public Integer {
856 public:
857 int32_t Value() const;
858 V8_INLINE static Int32* Cast(v8::Data* data) {
859#ifdef V8_ENABLE_CHECKS
860 CheckCast(data);
861#endif
862 return static_cast<Int32*>(data);
863 }
864
865 private:
866 Int32();
867 static void CheckCast(v8::Data* that);
868};
869
873class V8_EXPORT Uint32 : public Integer {
874 public:
875 uint32_t Value() const;
876 V8_INLINE static Uint32* Cast(v8::Data* data) {
877#ifdef V8_ENABLE_CHECKS
878 CheckCast(data);
879#endif
880 return static_cast<Uint32*>(data);
881 }
882
883 private:
884 Uint32();
885 static void CheckCast(v8::Data* that);
886};
887
891class V8_EXPORT BigInt : public Numeric {
892 public:
893 static Local<BigInt> New(Isolate* isolate, int64_t value);
894 static Local<BigInt> NewFromUnsigned(Isolate* isolate, uint64_t value);
902 static MaybeLocal<BigInt> NewFromWords(Local<Context> context, int sign_bit,
903 int word_count, const uint64_t* words);
904
911 uint64_t Uint64Value(bool* lossless = nullptr) const;
912
918 int64_t Int64Value(bool* lossless = nullptr) const;
919
924 int WordCount() const;
925
934 void ToWordsArray(int* sign_bit, int* word_count, uint64_t* words) const;
935
936 V8_INLINE static BigInt* Cast(v8::Data* data) {
937#ifdef V8_ENABLE_CHECKS
938 CheckCast(data);
939#endif
940 return static_cast<BigInt*>(data);
941 }
942
943 private:
944 BigInt();
945 static void CheckCast(v8::Data* that);
946};
947
949 using S = internal::Address;
950 using I = internal::Internals;
951 I::CheckInitialized(isolate);
952 S* slot = I::GetRootSlot(isolate, I::kEmptyStringRootIndex);
953 return Local<String>::FromSlot(slot);
954}
955
957 using A = internal::Address;
958 using I = internal::Internals;
960
962 if (I::IsExternalTwoByteString(I::GetInstanceType(obj))) {
963 Isolate* isolate = I::GetCurrentIsolateForSandbox();
964 A value = I::ReadExternalPointerField<internal::kExternalStringResourceTag>(
965 isolate, obj, I::kStringResourceOffset);
966 result = reinterpret_cast<String::ExternalStringResource*>(value);
967 } else {
968 result = GetExternalStringResourceSlow();
969 }
970#ifdef V8_ENABLE_CHECKS
971 VerifyExternalStringResourceBase(result, Encoding::TWO_BYTE_ENCODING);
972#endif
973 return result;
974}
975
978 using A = internal::Address;
979 using I = internal::Internals;
981 const ExternalOneByteStringResource* result;
982 if (I::IsExternalOneByteString(I::GetInstanceType(obj))) {
983 Isolate* isolate = I::GetCurrentIsolateForSandbox();
984 A value = I::ReadExternalPointerField<internal::kExternalStringResourceTag>(
985 isolate, obj, I::kStringResourceOffset);
986 result = reinterpret_cast<String::ExternalOneByteStringResource*>(value);
987 } else {
988 result = GetExternalOneByteStringResourceSlow();
989 }
990#ifdef V8_ENABLE_CHECKS
991 VerifyExternalStringResourceBase(result, Encoding::ONE_BYTE_ENCODING);
992#endif
993 return result;
994}
995
997 v8::Isolate* isolate, String::Encoding* encoding_out) const {
998 using A = internal::Address;
999 using I = internal::Internals;
1001 int type = I::GetInstanceType(obj) & I::kStringRepresentationAndEncodingMask;
1002 *encoding_out = static_cast<Encoding>(type & I::kStringEncodingMask);
1004 if (type == I::kExternalOneByteRepresentationTag ||
1005 type == I::kExternalTwoByteRepresentationTag) {
1006 A value = I::ReadExternalPointerField<internal::kExternalStringResourceTag>(
1007 isolate, obj, I::kStringResourceOffset);
1008 resource = reinterpret_cast<ExternalStringResourceBase*>(value);
1009 } else {
1010 resource = GetExternalStringResourceBaseSlow(encoding_out);
1011 }
1012#ifdef V8_ENABLE_CHECKS
1013 VerifyExternalStringResourceBase(resource, *encoding_out);
1014#endif
1015 return resource;
1016}
1017
1019 String::Encoding* encoding_out) const {
1021 return GetExternalStringResourceBase(isolate, encoding_out);
1022}
1023
1024// --- Statics ---
1025
1027 using S = internal::Address;
1028 using I = internal::Internals;
1029 I::CheckInitialized(isolate);
1030 S* slot = I::GetRootSlot(isolate, I::kUndefinedValueRootIndex);
1031 return Local<Primitive>::FromSlot(slot);
1032}
1033
1035 using S = internal::Address;
1036 using I = internal::Internals;
1037 I::CheckInitialized(isolate);
1038 S* slot = I::GetRootSlot(isolate, I::kNullValueRootIndex);
1039 return Local<Primitive>::FromSlot(slot);
1040}
1041
1043 using S = internal::Address;
1044 using I = internal::Internals;
1045 I::CheckInitialized(isolate);
1046 S* slot = I::GetRootSlot(isolate, I::kTrueValueRootIndex);
1047 return Local<Boolean>::FromSlot(slot);
1048}
1049
1051 using S = internal::Address;
1052 using I = internal::Internals;
1053 I::CheckInitialized(isolate);
1054 S* slot = I::GetRootSlot(isolate, I::kFalseValueRootIndex);
1055 return Local<Boolean>::FromSlot(slot);
1056}
1057
1058Local<Boolean> Boolean::New(Isolate* isolate, bool value) {
1059 return value ? True(isolate) : False(isolate);
1060}
1061
1062} // namespace v8
1063
1064#endif // INCLUDE_V8_PRIMITIVE_H_
Definition: v8-primitive.h:891
uint64_t Uint64Value(bool *lossless=nullptr) const
static BigInt * Cast(v8::Data *data)
Definition: v8-primitive.h:936
static Local< BigInt > New(Isolate *isolate, int64_t value)
int64_t Int64Value(bool *lossless=nullptr) const
static MaybeLocal< BigInt > NewFromWords(Local< Context > context, int sign_bit, int word_count, const uint64_t *words)
int WordCount() const
static Local< BigInt > NewFromUnsigned(Isolate *isolate, uint64_t value)
void ToWordsArray(int *sign_bit, int *word_count, uint64_t *words) const
Definition: v8-primitive.h:35
bool Value() const
static Local< Boolean > New(Isolate *isolate, bool value)
Definition: v8-primitive.h:1058
static Boolean * Cast(v8::Data *data)
Definition: v8-primitive.h:38
Definition: v8-data.h:18
Definition: v8-primitive.h:722
virtual ~ExternalResourceVisitor()=default
virtual void VisitExternalString(Local< String > string)
Definition: v8-primitive.h:725
Definition: v8-primitive.h:855
static Int32 * Cast(v8::Data *data)
Definition: v8-primitive.h:858
int32_t Value() const
Definition: v8-primitive.h:835
static Integer * Cast(v8::Data *data)
Definition: v8-primitive.h:840
static Local< Integer > New(Isolate *isolate, int32_t value)
static Local< Integer > NewFromUnsigned(Isolate *isolate, uint32_t value)
int64_t Value() const
Definition: v8-isolate.h:291
Definition: v8-local-handle.h:366
Definition: v8-local-handle.h:734
Definition: v8-primitive.h:79
static Name * Cast(Data *data)
Definition: v8-primitive.h:90
int GetIdentityHash()
Definition: v8-primitive.h:801
static Local< Number > New(Isolate *isolate, double value)
static Local< Number > New(Isolate *isolate, Int value)
Definition: v8-primitive.h:808
static Local< Number > New(Isolate *isolate, UInt value)
Definition: v8-primitive.h:815
static Number * Cast(v8::Data *data)
Definition: v8-primitive.h:818
double Value() const
Definition: v8-primitive.h:792
Definition: v8-primitive.h:58
static Local< PrimitiveArray > New(Isolate *isolate, int length)
Local< Primitive > Get(Isolate *isolate, int index)
static PrimitiveArray * Cast(Data *data)
Definition: v8-primitive.h:65
int Length() const
void Set(Isolate *isolate, int index, Local< Primitive > item)
Definition: v8-primitive.h:29
Definition: v8-primitive.h:393
const char * cached_data() const
Definition: v8-primitive.h:415
~ExternalOneByteStringResource() override=default
virtual const char * data() const =0
virtual void RecordSharedMemoryUsage(const void *location, size_t size)=0
Definition: v8-primitive.h:243
void operator=(const ExternalStringResourceBase &)=delete
virtual void Unaccount(Isolate *isolate)
Definition: v8-primitive.h:259
ExternalStringResourceBase(const ExternalStringResourceBase &)=delete
virtual ~ExternalStringResourceBase()=default
virtual void Unlock() const
Definition: v8-primitive.h:323
virtual void EstimateSharedMemoryUsage(SharedMemoryUsageRecorder *recorder) const
Definition: v8-primitive.h:289
virtual bool IsCacheable() const
Definition: v8-primitive.h:252
virtual void Lock() const
Definition: v8-primitive.h:318
virtual size_t EstimateMemoryUsage() const
Definition: v8-primitive.h:270
virtual void Dispose()
Definition: v8-primitive.h:305
Definition: v8-primitive.h:338
virtual const uint16_t * data() const =0
const uint16_t * cached_data() const
Definition: v8-primitive.h:362
virtual size_t length() const =0
~ExternalStringResource() override=default
Definition: v8-primitive.h:597
char * operator*()
Definition: v8-primitive.h:601
Utf8Value(Isolate *isolate, Local< v8::Value > obj)
Utf8Value(const Utf8Value &)=delete
const char * operator*() const
Definition: v8-primitive.h:602
void operator=(const Utf8Value &)=delete
size_t length() const
Definition: v8-primitive.h:603
Definition: v8-primitive.h:656
bool is_one_byte() const
Definition: v8-primitive.h:673
const uint16_t * data16_
Definition: v8-primitive.h:685
void operator=(const ValueView &)=delete
const uint8_t * data8() const
Definition: v8-primitive.h:660
uint32_t length() const
Definition: v8-primitive.h:672
ValueView(const ValueView &)=delete
const uint16_t * data16() const
Definition: v8-primitive.h:666
ValueView(Isolate *isolate, Local< v8::String > str)
const uint8_t * data8_
Definition: v8-primitive.h:684
Definition: v8-primitive.h:626
const uint16_t * operator*() const
Definition: v8-primitive.h:634
uint32_t length() const
Definition: v8-primitive.h:635
Value(const Value &)=delete
void operator=(const Value &)=delete
Definition: v8-primitive.h:124
size_t Utf8LengthV2(Isolate *isolate) const
bool IsExternalTwoByte() const
bool IsExternal() const
static Local< String > Concat(Isolate *isolate, Local< String > left, Local< String > right)
bool IsExternalOneByte() const
bool ContainsOnlyOneByte() const
ExternalStringResourceBase * GetExternalStringResourceBase(v8::Isolate *isolate, Encoding *encoding_out) const
Definition: v8-primitive.h:996
Encoding
Definition: v8-primitive.h:129
@ ONE_BYTE_ENCODING
Definition: v8-primitive.h:132
@ TWO_BYTE_ENCODING
Definition: v8-primitive.h:131
void WriteOneByteV2(Isolate *isolate, uint32_t offset, uint32_t length, uint8_t *buffer, int flags=WriteFlags::kNone) const
Local< String > InternalizeString(Isolate *isolate)
static MaybeLocal< String > NewFromUtf8(Isolate *isolate, const char *data, NewStringType type=NewStringType::kNormal, int length=-1)
void WriteV2(Isolate *isolate, uint32_t offset, uint32_t length, uint16_t *buffer, int flags=WriteFlags::kNone) const
size_t WriteUtf8V2(Isolate *isolate, char *buffer, size_t capacity, int flags=WriteFlags::kNone, size_t *processed_characters_return=nullptr) const
static MaybeLocal< String > NewExternalTwoByte(Isolate *isolate, ExternalStringResource *resource)
static MaybeLocal< String > NewFromOneByte(Isolate *isolate, const uint8_t *data, NewStringType type=NewStringType::kNormal, int length=-1)
bool IsOneByte() const
static String * Cast(v8::Data *data)
Definition: v8-primitive.h:459
static Local< String > Empty(Isolate *isolate)
Definition: v8-primitive.h:948
static MaybeLocal< String > NewFromTwoByte(Isolate *isolate, const uint16_t *data, NewStringType type=NewStringType::kNormal, int length=-1)
static Local< String > NewFromUtf8Literal(Isolate *isolate, const char(&literal)[N], NewStringType type=NewStringType::kNormal)
Definition: v8-primitive.h:476
ExternalStringResource * GetExternalStringResource() const
Definition: v8-primitive.h:956
const ExternalOneByteStringResource * GetExternalOneByteStringResource() const
Definition: v8-primitive.h:977
int Length() const
Definition: v8-primitive.h:731
static Local< Symbol > GetDispose(Isolate *isolate)
static Local< Symbol > GetMatch(Isolate *isolate)
static Local< Symbol > GetIterator(Isolate *isolate)
static Symbol * Cast(Data *data)
Definition: v8-primitive.h:776
static Local< Symbol > ForApi(Isolate *isolate, Local< String > description)
static Local< Symbol > GetSearch(Isolate *isolate)
static Local< Symbol > GetToPrimitive(Isolate *isolate)
static Local< Symbol > GetAsyncIterator(Isolate *isolate)
static Local< Symbol > GetIsConcatSpreadable(Isolate *isolate)
static Local< Symbol > New(Isolate *isolate, Local< String > description=Local< String >())
static Local< Symbol > GetReplace(Isolate *isolate)
static Local< Symbol > GetAsyncDispose(Isolate *isolate)
static Local< Symbol > GetToStringTag(Isolate *isolate)
static Local< Symbol > GetSplit(Isolate *isolate)
static Local< Symbol > GetUnscopables(Isolate *isolate)
static Local< Symbol > For(Isolate *isolate, Local< String > description)
Local< Value > Description(Isolate *isolate) const
static Local< Symbol > GetHasInstance(Isolate *isolate)
Definition: v8-primitive.h:873
static Uint32 * Cast(v8::Data *data)
Definition: v8-primitive.h:876
uint32_t Value() const
Definition: v8-value.h:32
Definition: v8-internal.h:984
static v8::Isolate * GetCurrentIsolateForSandbox()
Definition: v8-internal.h:1463
static Address ValueAsAddress(const T *value)
Definition: v8-internal.h:1847
uintptr_t Address
Definition: v8-internal.h:38
Definition: libplatform.h:15
Local< Primitive > Null(Isolate *isolate)
Definition: v8-primitive.h:1034
Local< Primitive > Undefined(Isolate *isolate)
Definition: v8-primitive.h:1026
Local< Boolean > False(Isolate *isolate)
Definition: v8-primitive.h:1050
Local< Boolean > True(Isolate *isolate)
Definition: v8-primitive.h:1042
NewStringType
Definition: v8-primitive.h:107
Definition: v8-primitive.h:160
#define V8_EXPORT
Definition: v8config.h:854
#define V8_INLINE
Definition: v8config.h:508
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:621
#define V8_DEPRECATED(message)
Definition: v8config.h:613
#define V8_WARN_UNUSED_RESULT
Definition: v8config.h:678