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 <string_view>
9
10#include "v8-data.h" // NOLINT(build/include_directory)
11#include "v8-internal.h" // NOLINT(build/include_directory)
12#include "v8-local-handle.h" // NOLINT(build/include_directory)
13#include "v8-value.h" // NOLINT(build/include_directory)
14#include "v8config.h" // NOLINT(build/include_directory)
15
16namespace v8 {
17
18class Context;
19class Isolate;
20class String;
21
22namespace internal {
23class ExternalString;
24class ScopedExternalStringLock;
25class StringForwardingTable;
26} // namespace internal
27
31class V8_EXPORT Primitive : public Value {};
32
37class V8_EXPORT Boolean : public Primitive {
38 public:
39 bool Value() const;
40 V8_INLINE static Boolean* Cast(v8::Data* data) {
41#ifdef V8_ENABLE_CHECKS
42 CheckCast(data);
43#endif
44 return static_cast<Boolean*>(data);
45 }
46
47 V8_INLINE static Local<Boolean> New(Isolate* isolate, bool value);
48
49 private:
50 static void CheckCast(v8::Data* that);
51};
52
61 public:
62 static Local<PrimitiveArray> New(Isolate* isolate, int length);
63 int Length() const;
64 void Set(Isolate* isolate, int index, Local<Primitive> item);
65 Local<Primitive> Get(Isolate* isolate, int index);
66
68#ifdef V8_ENABLE_CHECKS
69 CheckCast(data);
70#endif
71 return reinterpret_cast<PrimitiveArray*>(data);
72 }
73
74 private:
75 static void CheckCast(Data* obj);
76};
77
81class V8_EXPORT Name : public Primitive {
82 public:
91
92 V8_INLINE static Name* Cast(Data* data) {
93#ifdef V8_ENABLE_CHECKS
94 CheckCast(data);
95#endif
96 return static_cast<Name*>(data);
97 }
98
99 private:
100 static void CheckCast(Data* that);
101};
102
109enum class NewStringType {
113 kNormal,
114
121};
122
126class V8_EXPORT String : public Name {
127 public:
128 static constexpr int kMaxLength =
129 internal::kApiSystemPointerSize == 4 ? (1 << 28) - 16 : (1 << 29) - 24;
130
131 enum Encoding {
132 UNKNOWN_ENCODING = 0x1,
133 TWO_BYTE_ENCODING = 0x0,
134 ONE_BYTE_ENCODING = 0x8
135 };
139 int Length() const;
140
144 size_t Utf8Length(Isolate* isolate) const;
145 // TODO(http://crbug.com/373485796): deprecate and remove.
146 V8_DEPRECATE_SOON("Use Utf8Length(isolate) instead.")
147 size_t Utf8LengthV2(Isolate* isolate) const { return Utf8Length(isolate); }
148
155 bool IsOneByte() const;
156
163
164 struct WriteFlags {
165 enum {
166 kNone = 0,
167 // Indicates that the output string should be null-terminated. In that
168 // case, the output buffer must include sufficient space for the
169 // additional null character.
170 kNullTerminate = 1,
171 // Used by WriteUtf8 to replace orphan surrogate code units with the
172 // unicode replacement character. Needs to be set to guarantee valid UTF-8
173 // output.
174 kReplaceInvalidUtf8 = 2
175 };
176 };
177
190 void Write(Isolate* isolate, uint32_t offset, uint32_t length,
191 uint16_t* buffer, int flags = WriteFlags::kNone) const;
192 void WriteOneByte(Isolate* isolate, uint32_t offset, uint32_t length,
193 uint8_t* buffer, int flags = WriteFlags::kNone) const;
194 // TODO(http://crbug.com/373485796): deprecate and remove.
195 V8_DEPRECATE_SOON("Use Write(..) instead.")
196 void WriteV2(Isolate* isolate, uint32_t offset, uint32_t length,
197 uint16_t* buffer, int flags = WriteFlags::kNone) const {
198 Write(isolate, offset, length, buffer, flags);
199 }
200 // TODO(http://crbug.com/373485796): deprecate and remove.
201 V8_DEPRECATE_SOON("Use WriteOneByte(..) instead.")
202 void WriteOneByteV2(Isolate* isolate, uint32_t offset, uint32_t length,
203 uint8_t* buffer, int flags = WriteFlags::kNone) const {
204 WriteOneByte(isolate, offset, length, buffer, flags);
205 }
206
226 size_t WriteUtf8(Isolate* isolate, char* buffer, size_t capacity,
227 int flags = WriteFlags::kNone,
228 size_t* processed_characters_return = nullptr) const;
229 // TODO(http://crbug.com/373485796): deprecate and remove.
230 V8_DEPRECATE_SOON("Use WriteUtf8(..) instead.")
231 size_t WriteUtf8V2(Isolate* isolate, char* buffer, size_t capacity,
232 int flags = WriteFlags::kNone,
233 size_t* processed_characters_return = nullptr) const {
234 return WriteUtf8(isolate, buffer, capacity, flags,
235 processed_characters_return);
236 }
237
241 V8_INLINE static Local<String> Empty(Isolate* isolate);
242
246 bool IsExternal() const;
247
251 bool IsExternalTwoByte() const;
252
256 bool IsExternalOneByte() const;
257
263
267 bool IsInStringTable(Isolate* isolate) const;
268
270 public:
271 virtual ~ExternalStringResourceBase() = default;
272
278 virtual bool IsCacheable() const { return true; }
279
285 virtual void Unaccount(Isolate* isolate) {}
286
296 virtual size_t EstimateMemoryUsage() const {
297 return kDefaultMemoryEstimate;
298 }
299 static constexpr size_t kDefaultMemoryEstimate = static_cast<size_t>(-1);
300
302 public:
307 virtual void RecordSharedMemoryUsage(const void* location,
308 size_t size) = 0;
309 };
310
316 SharedMemoryUsageRecorder* recorder) const {}
317
318 // Disallow copying and assigning.
321
322 protected:
324
331 virtual void Dispose() { delete this; }
332
344 virtual void Lock() const {}
345
349 virtual void Unlock() const {}
350
351 private:
352 friend class internal::ExternalString;
353 friend class v8::String;
354 friend class internal::StringForwardingTable;
355 friend class internal::ScopedExternalStringLock;
356 };
357
365 public:
370 ~ExternalStringResource() override = default;
371
376 virtual const uint16_t* data() const = 0;
377
381 virtual size_t length() const = 0;
382
388 const uint16_t* cached_data() const {
389 CheckCachedDataInvariants();
390 return cached_data_;
391 }
392
398
399 protected:
401
402 private:
403 void CheckCachedDataInvariants() const;
404
405 const uint16_t* cached_data_ = nullptr;
406 };
407
420 public:
425 ~ExternalOneByteStringResource() override = default;
426
431 virtual const char* data() const = 0;
432
434 virtual size_t length() const = 0;
435
441 const char* cached_data() const {
442 CheckCachedDataInvariants();
443 return cached_data_;
444 }
445
451
452 protected:
454
455 private:
456 void CheckCachedDataInvariants() const;
457
458 const char* cached_data_ = nullptr;
459 };
460
466 V8_INLINE ExternalStringResourceBase* GetExternalStringResourceBase(
467 v8::Isolate* isolate, Encoding* encoding_out) const;
468 V8_INLINE ExternalStringResourceBase* GetExternalStringResourceBase(
469 Encoding* encoding_out) const;
470
475 // TODO(pthier): Change return type to const ExternalStringResource*.
476 V8_INLINE ExternalStringResource* GetExternalStringResource() const;
477
483 GetExternalOneByteStringResource() const;
484
485 V8_INLINE static String* Cast(v8::Data* data) {
486#ifdef V8_ENABLE_CHECKS
487 CheckCast(data);
488#endif
489 return static_cast<String*>(data);
490 }
491
501 template <int N>
503 Isolate* isolate, const char (&literal)[N],
504 NewStringType type = NewStringType::kNormal) {
505 static_assert(N <= kMaxLength, "String is too long");
506 return NewFromUtf8Literal(isolate, literal, type, N - 1);
507 }
508
512 Isolate* isolate, const char* data,
513 NewStringType type = NewStringType::kNormal, int length = -1);
514
518 Isolate* isolate, const uint8_t* data,
519 NewStringType type = NewStringType::kNormal, int length = -1);
520
524 Isolate* isolate, const uint16_t* data,
525 NewStringType type = NewStringType::kNormal, int length = -1);
526
532 Local<String> right);
533
543 Isolate* isolate, ExternalStringResource* resource);
544
554 V8_DEPRECATE_SOON("Use the version with the isolate argument instead.")
555 bool MakeExternal(ExternalStringResource* resource);
556
566 bool MakeExternal(Isolate* isolate, ExternalStringResource* resource);
567
576 static V8_WARN_UNUSED_RESULT MaybeLocal<String> NewExternalOneByte(
577 Isolate* isolate, ExternalOneByteStringResource* resource);
578
588 V8_DEPRECATE_SOON("Use the version with the isolate argument instead.")
589 bool MakeExternal(ExternalOneByteStringResource* resource);
590
600 bool MakeExternal(Isolate* isolate, ExternalOneByteStringResource* resource);
601
606 bool CanMakeExternal(Encoding encoding) const;
607
611 bool StringEquals(Local<String> str) const;
612
624 public:
627 char* operator*() { return str_; }
628 const char* operator*() const { return str_; }
629 size_t length() const { return length_; }
630 std::string_view as_view() const { return std::string_view(str_, length_); }
631
632 // Disallow copying and assigning.
633 Utf8Value(const Utf8Value&) = delete;
634 void operator=(const Utf8Value&) = delete;
635
636 private:
637 char* str_;
638 size_t length_;
639 };
640
652 "Prefer using String::ValueView if you can, or string->Write to a "
653 "buffer if you cannot.") V8_EXPORT Value {
654 public:
656 "Prefer using String::ValueView if you can, or string->Write to a "
657 "buffer if you cannot.")
658 Value(Isolate* isolate, Local<v8::Value> obj);
660 uint16_t* operator*() { return str_; }
661 const uint16_t* operator*() const { return str_; }
662 uint32_t length() const { return length_; }
663
664 // Disallow copying and assigning.
665 Value(const Value&) = delete;
666 void operator=(const Value&) = delete;
667
668 private:
669 uint16_t* str_;
670 uint32_t length_;
671 };
672
684 public:
687 const uint8_t* data8() const {
688#if V8_ENABLE_CHECKS
689 CheckOneByte(true);
690#endif
691 return data8_;
692 }
693 const uint16_t* data16() const {
694#if V8_ENABLE_CHECKS
695 CheckOneByte(false);
696#endif
697 return data16_;
698 }
699 uint32_t length() const { return length_; }
700 bool is_one_byte() const { return is_one_byte_; }
701
702 // Disallow copying and assigning.
703 ValueView(const ValueView&) = delete;
704 void operator=(const ValueView&) = delete;
705
706 private:
707 void CheckOneByte(bool is_one_byte) const;
708
709 Local<v8::String> flat_str_;
710 union {
711 const uint8_t* data8_;
712 const uint16_t* data16_;
713 };
714 uint32_t length_;
715 bool is_one_byte_;
716 // Avoid exposing the internal DisallowGarbageCollection scope.
717 alignas(internal::Internals::
718 kDisallowGarbageCollectionAlign) char no_gc_debug_scope_
719 [internal::Internals::kDisallowGarbageCollectionSize];
720 };
721
722 private:
723 void VerifyExternalStringResourceBase(const ExternalStringResourceBase* v,
724 Encoding encoding) const;
725 ExternalStringResource* GetExternalStringResourceSlow() const;
726 const ExternalOneByteStringResource* GetExternalOneByteStringResourceSlow()
727 const;
728 ExternalStringResourceBase* GetExternalStringResourceBaseSlow(
729 String::Encoding* encoding_out) const;
730
731 static Local<v8::String> NewFromUtf8Literal(Isolate* isolate,
732 const char* literal,
733 NewStringType type, int length);
734
735 static void CheckCast(v8::Data* that);
736};
737
738// Zero-length string specialization (templated string size includes
739// terminator).
740template <>
742 Isolate* isolate, const char (&literal)[1], NewStringType type) {
743 return String::Empty(isolate);
744}
745
750 public:
751 virtual ~ExternalResourceVisitor() = default;
752 virtual void VisitExternalString(Local<String> string) {}
753};
754
758class V8_EXPORT Symbol : public Name {
759 public:
764
769 static Local<Symbol> New(Isolate* isolate,
770 Local<String> description = Local<String>());
771
780 static Local<Symbol> For(Isolate* isolate, Local<String> description);
781
786 static Local<Symbol> ForApi(Isolate* isolate, Local<String> description);
787
788 // Well-known symbols
802
803 V8_INLINE static Symbol* Cast(Data* data) {
804#ifdef V8_ENABLE_CHECKS
805 CheckCast(data);
806#endif
807 return static_cast<Symbol*>(data);
808 }
809
810 private:
811 Symbol();
812 static void CheckCast(Data* that);
813};
814
820 private:
821 Numeric();
822 static void CheckCast(v8::Data* that);
823};
824
828class V8_EXPORT Number : public Numeric {
829 public:
830 double Value() const;
831 static Local<Number> New(Isolate* isolate, double value);
832 template <typename Int>
833 requires(std::is_integral<Int>::value && !std::is_same<Int, bool>::value &&
834 std::is_signed_v<Int> && sizeof(Int) <= sizeof(int32_t))
835 V8_INLINE static Local<Number> New(Isolate* isolate, Int value) {
836 return NewFromInt32(isolate, value);
837 }
838 template <typename UInt>
839 requires(std::is_integral<UInt>::value &&
840 !std::is_same<UInt, bool>::value && std::is_unsigned_v<UInt> &&
841 sizeof(UInt) <= sizeof(uint32_t))
842 V8_INLINE static Local<Number> New(Isolate* isolate, UInt value) {
843 return NewFromUint32(isolate, value);
844 }
845 V8_INLINE static Number* Cast(v8::Data* data) {
846#ifdef V8_ENABLE_CHECKS
847 CheckCast(data);
848#endif
849 return static_cast<Number*>(data);
850 }
851
852 private:
853 Number();
854 static Local<Number> NewFromInt32(Isolate* isolate, int32_t value);
855 static Local<Number> NewFromUint32(Isolate* isolate, uint32_t value);
856 static void CheckCast(v8::Data* that);
857};
858
862class V8_EXPORT Integer : public Number {
863 public:
864 static Local<Integer> New(Isolate* isolate, int32_t value);
865 static Local<Integer> NewFromUnsigned(Isolate* isolate, uint32_t value);
866 int64_t Value() const;
868#ifdef V8_ENABLE_CHECKS
869 CheckCast(data);
870#endif
871 return static_cast<Integer*>(data);
872 }
873
874 private:
875 Integer();
876 static void CheckCast(v8::Data* that);
877};
878
882class V8_EXPORT Int32 : public Integer {
883 public:
884 int32_t Value() const;
885 V8_INLINE static Int32* Cast(v8::Data* data) {
886#ifdef V8_ENABLE_CHECKS
887 CheckCast(data);
888#endif
889 return static_cast<Int32*>(data);
890 }
891
892 private:
893 Int32();
894 static void CheckCast(v8::Data* that);
895};
896
900class V8_EXPORT Uint32 : public Integer {
901 public:
902 uint32_t Value() const;
903 V8_INLINE static Uint32* Cast(v8::Data* data) {
904#ifdef V8_ENABLE_CHECKS
905 CheckCast(data);
906#endif
907 return static_cast<Uint32*>(data);
908 }
909
910 private:
911 Uint32();
912 static void CheckCast(v8::Data* that);
913};
914
918class V8_EXPORT BigInt : public Numeric {
919 public:
920 static Local<BigInt> New(Isolate* isolate, int64_t value);
921 static Local<BigInt> NewFromUnsigned(Isolate* isolate, uint64_t value);
929 static MaybeLocal<BigInt> NewFromWords(Local<Context> context, int sign_bit,
930 int word_count, const uint64_t* words);
931
938 uint64_t Uint64Value(bool* lossless = nullptr) const;
939
945 int64_t Int64Value(bool* lossless = nullptr) const;
946
951 int WordCount() const;
952
961 void ToWordsArray(int* sign_bit, int* word_count, uint64_t* words) const;
962
963 V8_INLINE static BigInt* Cast(v8::Data* data) {
964#ifdef V8_ENABLE_CHECKS
965 CheckCast(data);
966#endif
967 return static_cast<BigInt*>(data);
968 }
969
970 private:
971 BigInt();
972 static void CheckCast(v8::Data* that);
973};
974
976 using S = internal::Address;
977 using I = internal::Internals;
978 I::CheckInitialized(isolate);
979 S* slot = I::GetRootSlot(isolate, I::kEmptyStringRootIndex);
980 return Local<String>::FromSlot(slot);
981}
982
984 using A = internal::Address;
985 using I = internal::Internals;
987
989 if (I::IsExternalTwoByteString(I::GetInstanceType(obj))) {
990 Isolate* isolate = I::GetCurrentIsolateForSandbox();
991 A value = I::ReadExternalPointerField<internal::kExternalStringResourceTag>(
992 isolate, obj, I::kStringResourceOffset);
993 result = reinterpret_cast<String::ExternalStringResource*>(value);
994 } else {
995 result = GetExternalStringResourceSlow();
996 }
997#ifdef V8_ENABLE_CHECKS
998 VerifyExternalStringResourceBase(result, Encoding::TWO_BYTE_ENCODING);
999#endif
1000 return result;
1001}
1002
1005 using A = internal::Address;
1006 using I = internal::Internals;
1008 const ExternalOneByteStringResource* result;
1009 if (I::IsExternalOneByteString(I::GetInstanceType(obj))) {
1010 Isolate* isolate = I::GetCurrentIsolateForSandbox();
1011 A value = I::ReadExternalPointerField<internal::kExternalStringResourceTag>(
1012 isolate, obj, I::kStringResourceOffset);
1013 result = reinterpret_cast<String::ExternalOneByteStringResource*>(value);
1014 } else {
1015 result = GetExternalOneByteStringResourceSlow();
1016 }
1017#ifdef V8_ENABLE_CHECKS
1018 VerifyExternalStringResourceBase(result, Encoding::ONE_BYTE_ENCODING);
1019#endif
1020 return result;
1021}
1022
1024 v8::Isolate* isolate, String::Encoding* encoding_out) const {
1025 using A = internal::Address;
1026 using I = internal::Internals;
1028 int type = I::GetInstanceType(obj) & I::kStringRepresentationAndEncodingMask;
1029 *encoding_out = static_cast<Encoding>(type & I::kStringEncodingMask);
1031 if (type == I::kExternalOneByteRepresentationTag ||
1032 type == I::kExternalTwoByteRepresentationTag) {
1033 A value = I::ReadExternalPointerField<internal::kExternalStringResourceTag>(
1034 isolate, obj, I::kStringResourceOffset);
1035 resource = reinterpret_cast<ExternalStringResourceBase*>(value);
1036 } else {
1037 resource = GetExternalStringResourceBaseSlow(encoding_out);
1038 }
1039#ifdef V8_ENABLE_CHECKS
1040 VerifyExternalStringResourceBase(resource, *encoding_out);
1041#endif
1042 return resource;
1043}
1044
1046 String::Encoding* encoding_out) const {
1048 return GetExternalStringResourceBase(isolate, encoding_out);
1049}
1050
1051// --- Statics ---
1052
1054 using S = internal::Address;
1055 using I = internal::Internals;
1056 I::CheckInitialized(isolate);
1057 S* slot = I::GetRootSlot(isolate, I::kUndefinedValueRootIndex);
1058 return Local<Primitive>::FromSlot(slot);
1059}
1060
1062 using S = internal::Address;
1063 using I = internal::Internals;
1064 I::CheckInitialized(isolate);
1065 S* slot = I::GetRootSlot(isolate, I::kNullValueRootIndex);
1066 return Local<Primitive>::FromSlot(slot);
1067}
1068
1070 using S = internal::Address;
1071 using I = internal::Internals;
1072 I::CheckInitialized(isolate);
1073 S* slot = I::GetRootSlot(isolate, I::kTrueValueRootIndex);
1074 return Local<Boolean>::FromSlot(slot);
1075}
1076
1078 using S = internal::Address;
1079 using I = internal::Internals;
1080 I::CheckInitialized(isolate);
1081 S* slot = I::GetRootSlot(isolate, I::kFalseValueRootIndex);
1082 return Local<Boolean>::FromSlot(slot);
1083}
1084
1085Local<Boolean> Boolean::New(Isolate* isolate, bool value) {
1086 return value ? True(isolate) : False(isolate);
1087}
1088
1089} // namespace v8
1090
1091#endif // INCLUDE_V8_PRIMITIVE_H_
Definition: v8-primitive.h:918
uint64_t Uint64Value(bool *lossless=nullptr) const
static BigInt * Cast(v8::Data *data)
Definition: v8-primitive.h:963
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:37
bool Value() const
static Local< Boolean > New(Isolate *isolate, bool value)
Definition: v8-primitive.h:1085
static Boolean * Cast(v8::Data *data)
Definition: v8-primitive.h:40
Definition: v8-data.h:18
Definition: v8-primitive.h:749
virtual ~ExternalResourceVisitor()=default
virtual void VisitExternalString(Local< String > string)
Definition: v8-primitive.h:752
Definition: v8-primitive.h:882
static Int32 * Cast(v8::Data *data)
Definition: v8-primitive.h:885
int32_t Value() const
Definition: v8-primitive.h:862
static Integer * Cast(v8::Data *data)
Definition: v8-primitive.h:867
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:81
static Name * Cast(Data *data)
Definition: v8-primitive.h:92
int GetIdentityHash()
Definition: v8-primitive.h:828
static Local< Number > New(Isolate *isolate, double value)
static Local< Number > New(Isolate *isolate, Int value)
Definition: v8-primitive.h:835
static Local< Number > New(Isolate *isolate, UInt value)
Definition: v8-primitive.h:842
static Number * Cast(v8::Data *data)
Definition: v8-primitive.h:845
double Value() const
Definition: v8-primitive.h:819
Definition: v8-primitive.h:60
static Local< PrimitiveArray > New(Isolate *isolate, int length)
Local< Primitive > Get(Isolate *isolate, int index)
static PrimitiveArray * Cast(Data *data)
Definition: v8-primitive.h:67
int Length() const
void Set(Isolate *isolate, int index, Local< Primitive > item)
Definition: v8-primitive.h:31
Definition: v8-primitive.h:419
const char * cached_data() const
Definition: v8-primitive.h:441
~ExternalOneByteStringResource() override=default
virtual const char * data() const =0
virtual void RecordSharedMemoryUsage(const void *location, size_t size)=0
Definition: v8-primitive.h:269
void operator=(const ExternalStringResourceBase &)=delete
virtual void Unaccount(Isolate *isolate)
Definition: v8-primitive.h:285
ExternalStringResourceBase(const ExternalStringResourceBase &)=delete
virtual ~ExternalStringResourceBase()=default
virtual void Unlock() const
Definition: v8-primitive.h:349
virtual void EstimateSharedMemoryUsage(SharedMemoryUsageRecorder *recorder) const
Definition: v8-primitive.h:315
virtual bool IsCacheable() const
Definition: v8-primitive.h:278
virtual void Lock() const
Definition: v8-primitive.h:344
virtual size_t EstimateMemoryUsage() const
Definition: v8-primitive.h:296
virtual void Dispose()
Definition: v8-primitive.h:331
Definition: v8-primitive.h:364
virtual const uint16_t * data() const =0
const uint16_t * cached_data() const
Definition: v8-primitive.h:388
virtual size_t length() const =0
~ExternalStringResource() override=default
Definition: v8-primitive.h:623
char * operator*()
Definition: v8-primitive.h:627
Utf8Value(Isolate *isolate, Local< v8::Value > obj)
Utf8Value(const Utf8Value &)=delete
const char * operator*() const
Definition: v8-primitive.h:628
void operator=(const Utf8Value &)=delete
std::string_view as_view() const
Definition: v8-primitive.h:630
size_t length() const
Definition: v8-primitive.h:629
Definition: v8-primitive.h:683
bool is_one_byte() const
Definition: v8-primitive.h:700
const uint16_t * data16_
Definition: v8-primitive.h:712
void operator=(const ValueView &)=delete
const uint8_t * data8() const
Definition: v8-primitive.h:687
uint32_t length() const
Definition: v8-primitive.h:699
ValueView(const ValueView &)=delete
const uint16_t * data16() const
Definition: v8-primitive.h:693
ValueView(Isolate *isolate, Local< v8::String > str)
const uint8_t * data8_
Definition: v8-primitive.h:711
Definition: v8-primitive.h:653
const uint16_t * operator*() const
Definition: v8-primitive.h:661
uint32_t length() const
Definition: v8-primitive.h:662
Value(const Value &)=delete
void operator=(const Value &)=delete
Definition: v8-primitive.h:126
bool IsInStringTable(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:1023
Encoding
Definition: v8-primitive.h:131
@ ONE_BYTE_ENCODING
Definition: v8-primitive.h:134
@ TWO_BYTE_ENCODING
Definition: v8-primitive.h:133
void WriteOneByte(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)
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:485
size_t Utf8Length(Isolate *isolate) const
static Local< String > Empty(Isolate *isolate)
Definition: v8-primitive.h:975
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:502
ExternalStringResource * GetExternalStringResource() const
Definition: v8-primitive.h:983
size_t WriteUtf8(Isolate *isolate, char *buffer, size_t capacity, int flags=WriteFlags::kNone, size_t *processed_characters_return=nullptr) const
const ExternalOneByteStringResource * GetExternalOneByteStringResource() const
Definition: v8-primitive.h:1004
void Write(Isolate *isolate, uint32_t offset, uint32_t length, uint16_t *buffer, int flags=WriteFlags::kNone) const
int Length() const
Definition: v8-primitive.h:758
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:803
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:900
static Uint32 * Cast(v8::Data *data)
Definition: v8-primitive.h:903
uint32_t Value() const
Definition: v8-value.h:32
Definition: v8-internal.h:1010
static v8::Isolate * GetCurrentIsolateForSandbox()
Definition: v8-internal.h:1493
static Address ValueAsAddress(const T *value)
Definition: v8-internal.h:1880
uintptr_t Address
Definition: v8-internal.h:38
Definition: libplatform.h:15
Local< Primitive > Null(Isolate *isolate)
Definition: v8-primitive.h:1061
Local< Primitive > Undefined(Isolate *isolate)
Definition: v8-primitive.h:1053
Local< Boolean > False(Isolate *isolate)
Definition: v8-primitive.h:1077
Local< Boolean > True(Isolate *isolate)
Definition: v8-primitive.h:1069
NewStringType
Definition: v8-primitive.h:109
Definition: v8-primitive.h:164
#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