Lines Matching defs:EcmaString
58 class EcmaString : public TaggedObject {
63 CAST_CHECK(EcmaString, IsString);
114 static EcmaString *CreateEmptyString(const EcmaVM *vm);
115 static EcmaString *CreateFromUtf8(const EcmaVM *vm, const uint8_t *utf8Data, uint32_t utf8Len,
118 static EcmaString *CreateFromUtf8CompressedSubString(const EcmaVM *vm, const JSHandle<EcmaString> &string,
120 static EcmaString *CreateUtf16StringFromUtf8(const EcmaVM *vm, const uint8_t *utf8Data, uint32_t utf8Len,
122 static EcmaString *CreateFromUtf16(const EcmaVM *vm, const uint16_t *utf16Data, uint32_t utf16Len,
125 static EcmaString *CreateLineString(const EcmaVM *vm, size_t length, bool compressed);
126 static EcmaString *CreateLineStringNoGC(const EcmaVM *vm, size_t length, bool compressed);
127 static EcmaString *CreateLineStringWithSpaceType(const EcmaVM *vm,
129 static EcmaString *CreateTreeString(const EcmaVM *vm,
130 const JSHandle<EcmaString> &left, const JSHandle<EcmaString> &right, uint32_t length, bool compressed);
131 static EcmaString *CreateConstantString(const EcmaVM *vm, const uint8_t *utf8Data,
133 static EcmaString *Concat(const EcmaVM *vm, const JSHandle<EcmaString> &left,
134 const JSHandle<EcmaString> &right, MemSpaceType type = MemSpaceType::SHARED_OLD_SPACE);
138 static uint32_t CalculateAllConcatHashCode(const JSHandle<EcmaString> &firstString,
139 const JSHandle<EcmaString> &secondString);
140 static uint32_t CalculateConcatHashCode(const JSHandle<EcmaString> &firstString,
141 const JSHandle<EcmaString> &secondString);
142 static EcmaString *CopyStringToOldSpace(const EcmaVM *vm, const JSHandle<EcmaString> &original,
144 static EcmaString *FastSubString(const EcmaVM *vm,
145 const JSHandle<EcmaString> &src, uint32_t start, uint32_t length);
146 static EcmaString *GetSlicedString(const EcmaVM *vm,
147 const JSHandle<EcmaString> &src, uint32_t start, uint32_t length);
148 static EcmaString *GetSubString(const EcmaVM *vm,
149 const JSHandle<EcmaString> &src, uint32_t start, uint32_t length);
152 static inline EcmaString *FastSubUtf8String(const EcmaVM *vm,
153 const JSHandle<EcmaString> &src, uint32_t start, uint32_t length);
156 static inline EcmaString *FastSubUtf16String(const EcmaVM *vm,
157 const JSHandle<EcmaString> &src, uint32_t start, uint32_t length);
333 static int32_t Compare(const EcmaVM *vm, const JSHandle<EcmaString> &left, const JSHandle<EcmaString> &right);
335 static bool IsSubStringAt(const EcmaVM *vm, const JSHandle<EcmaString>& left,
336 const JSHandle<EcmaString>& right, uint32_t offset);
363 bool EqualToSplicedString(const EcmaString *str1, const EcmaString *str2);
365 static PUBLIC_API bool StringsAreEqual(const EcmaVM *vm, const JSHandle<EcmaString> &str1,
366 const JSHandle<EcmaString> &str2);
368 static PUBLIC_API bool StringsAreEqual(EcmaString *str1, EcmaString *str2);
370 static bool StringsAreEqualDiffUtfEncoding(EcmaString *str1, EcmaString *str2);
375 static bool StringIsEqualUint8Data(const EcmaString *str1, const uint8_t *dataAddr, uint32_t dataLen,
380 static bool StringsAreEqualUtf16(const EcmaString *str1, const uint16_t *utf16Data, uint32_t utf16Len);
384 const JSHandle<EcmaString> &receiver, const JSHandle<EcmaString> &search, int pos = 0);
388 const JSHandle<EcmaString> &receiver, const JSHandle<EcmaString> &search, int pos = 0);
420 const uint16_t *data = EcmaString::GetUtf16DataFlat(this, tmpBuf);
435 const uint8_t *data = EcmaString::GetUtf8DataFlat(this, tmpBuf);
554 const uint16_t *data = EcmaString::GetUtf16DataFlat(this, tmpBuf);
561 const uint8_t *data = EcmaString::GetUtf8DataFlat(this, buf);
573 const uint16_t *data = EcmaString::GetUtf16DataFlat(this, tmpBuf);
579 const uint8_t *data = EcmaString::GetUtf8DataFlat(this, buf);
608 void WriteData(EcmaString *src, uint32_t start, uint32_t destSize, uint32_t length);
612 static bool CanBeCompressed(const EcmaString *string);
623 static EcmaString *ConvertCase(const EcmaVM *vm, const JSHandle<EcmaString> &src);
626 static EcmaString *LocaleConvertCase(const EcmaVM *vm, const JSHandle<EcmaString> &src, const icu::Locale &locale);
629 static EcmaString *TrimBody(const JSThread *thread, const JSHandle<EcmaString> &src, Span<T> &data, TrimMode mode);
631 static EcmaString *Trim(const JSThread *thread, const JSHandle<EcmaString> &src, TrimMode mode = TrimMode::TRIM);
648 // To change the hash algorithm of EcmaString, please modify EcmaString::CalculateConcatHashCode
715 static void WriteToFlat(EcmaString *src, Char *buf, uint32_t maxLength);
718 static void WriteToFlatWithPos(EcmaString *src, Char *buf, uint32_t length, uint32_t pos);
720 static const uint8_t *PUBLIC_API GetUtf8DataFlat(const EcmaString *src, CVector<uint8_t> &buf);
722 static const uint8_t *PUBLIC_API GetNonTreeUtf8Data(const EcmaString *src);
724 static const uint16_t *PUBLIC_API GetUtf16DataFlat(const EcmaString *src, CVector<uint16_t> &buf);
726 static const uint16_t *PUBLIC_API GetNonTreeUtf16Data(const EcmaString *src);
729 static EcmaString *SlowFlatten(const EcmaVM *vm, const JSHandle<EcmaString> &string, MemSpaceType type);
731 PUBLIC_API static EcmaString *Flatten(const EcmaVM *vm, const JSHandle<EcmaString> &string,
734 static FlatStringInfo FlattenAllString(const EcmaVM *vm, const JSHandle<EcmaString> &string,
737 static EcmaString *FlattenNoGCForSnapshot(const EcmaVM *vm, EcmaString *string);
739 static EcmaString *ToLower(const EcmaVM *vm, const JSHandle<EcmaString> &src);
741 static EcmaString *ToUpper(const EcmaVM *vm, const JSHandle<EcmaString> &src);
743 static EcmaString *ToLocaleLower(const EcmaVM *vm, const JSHandle<EcmaString> &src, const icu::Locale &locale);
745 static EcmaString *ToLocaleUpper(const EcmaVM *vm, const JSHandle<EcmaString> &src, const icu::Locale &locale);
747 static EcmaString *TryToLower(const EcmaVM *vm, const JSHandle<EcmaString> &src);
749 static EcmaString *TryToUpper(const EcmaVM *vm, const JSHandle<EcmaString> &src);
751 static EcmaString *ConvertUtf8ToLowerOrUpper(const EcmaVM *vm, const JSHandle<EcmaString> &src,
756 class LineEcmaString : public EcmaString {
762 static constexpr size_t DATA_OFFSET = EcmaString::SIZE; // DATA_OFFSET equal to Empty String size
768 static LineEcmaString *Cast(EcmaString *str)
773 static LineEcmaString *Cast(const EcmaString *str)
775 return LineEcmaString::Cast(const_cast<EcmaString *>(str));
788 static size_t ObjectSize(EcmaString *str)
794 static size_t DataSize(EcmaString *str)
842 class ConstantString : public EcmaString {
844 static constexpr size_t RELOCTAED_DATA_OFFSET = EcmaString::SIZE;
859 static ConstantString *Cast(EcmaString *str)
864 static ConstantString *Cast(const EcmaString *str)
866 return ConstantString::Cast(const_cast<EcmaString *>(str));
896 class SlicedString : public EcmaString {
899 static constexpr size_t PARENT_OFFSET = EcmaString::SIZE;
908 friend class EcmaString;
909 static SlicedString *Cast(EcmaString *str)
914 static SlicedString *Cast(const EcmaString *str)
916 return SlicedString::Cast(const_cast<EcmaString *>(str));
934 EcmaString *parent = EcmaString::Cast(GetParent());
948 class TreeEcmaString : public EcmaString {
953 static constexpr size_t FIRST_OFFSET = EcmaString::SIZE;
961 static TreeEcmaString *Cast(EcmaString *str)
966 static TreeEcmaString *Cast(const EcmaString *str)
968 return TreeEcmaString::Cast(const_cast<EcmaString *>(str));
973 auto strSecond = EcmaString::Cast(GetSecond());
988 EcmaString *first = EcmaString::Cast(GetFirst());
991 EcmaString *string = const_cast<TreeEcmaString *>(this);
994 EcmaString *first = EcmaString::Cast(TreeEcmaString::Cast(string)->GetFirst());
999 string = EcmaString::Cast(TreeEcmaString::Cast(string)->GetSecond());
1011 FlatStringInfo(EcmaString *string, uint32_t startIndex, uint32_t length) : string_(string),
1024 EcmaString *GetString() const
1029 void SetString(EcmaString *string)
1055 EcmaString *string_ {nullptr};
1060 // if you want to use functions of EcmaString, please not use directly,
1062 // eg: EcmaString *str = ***; str->GetLength() -----> EcmaStringAccessor(str).GetLength()
1065 explicit inline EcmaStringAccessor(EcmaString *string)
1075 explicit EcmaStringAccessor(const JSHandle<EcmaString> &strHandle);
1077 static uint32_t CalculateAllConcatHashCode(const JSHandle<EcmaString> &firstString,
1078 const JSHandle<EcmaString> &secondString)
1080 return EcmaString::CalculateAllConcatHashCode(firstString, secondString);
1083 static EcmaString *CreateLineString(const EcmaVM *vm, size_t length, bool compressed);
1085 static EcmaString *CreateEmptyString(const EcmaVM *vm)
1087 return EcmaString::CreateEmptyString(vm);
1090 static EcmaString *CreateFromUtf8(const EcmaVM *vm, const uint8_t *utf8Data, uint32_t utf8Len, bool canBeCompress,
1094 return EcmaString::CreateFromUtf8(vm, utf8Data, utf8Len, canBeCompress, type, isConstantString, idOffset);
1097 static EcmaString *CreateFromUtf8CompressedSubString(const EcmaVM *vm, const JSHandle<EcmaString> &string,
1101 return EcmaString::CreateFromUtf8CompressedSubString(vm, string, offset, utf8Len, type);
1104 static EcmaString *CreateConstantString(const EcmaVM *vm, const uint8_t *utf8Data, size_t length,
1107 return EcmaString::CreateConstantString(vm, utf8Data, length, compressed, type, idOffset);
1110 static EcmaString *CreateUtf16StringFromUtf8(const EcmaVM *vm, const uint8_t *utf8Data, uint32_t utf8Len,
1113 return EcmaString::CreateUtf16StringFromUtf8(vm, utf8Data, utf8Len, type);
1116 static EcmaString *CreateFromUtf16(const EcmaVM *vm, const uint16_t *utf16Data, uint32_t utf16Len,
1119 return EcmaString::CreateFromUtf16(vm, utf16Data, utf16Len, canBeCompress, type);
1122 static EcmaString *Concat(const EcmaVM *vm, const JSHandle<EcmaString> &str1Handle,
1123 const JSHandle<EcmaString> &str2Handle, MemSpaceType type = MemSpaceType::SHARED_OLD_SPACE)
1125 return EcmaString::Concat(vm, str1Handle, str2Handle, type);
1128 static EcmaString *CopyStringToOldSpace(const EcmaVM *vm, const JSHandle<EcmaString> &original,
1131 return EcmaString::CopyStringToOldSpace(vm, original, length, compressed);
1135 static EcmaString *FastSubString(const EcmaVM *vm,
1136 const JSHandle<EcmaString> &src, uint32_t start, uint32_t length)
1138 return EcmaString::FastSubString(vm, src, start, length);
1142 static EcmaString *GetSubString(const EcmaVM *vm,
1143 const JSHandle<EcmaString> &src, uint32_t start, uint32_t length)
1145 return EcmaString::GetSubString(vm, src, start, length);
1280 static void WriteToFlatWithPos(EcmaString *src, Char *buf, uint32_t length, uint32_t pos)
1286 static void WriteToFlat(EcmaString *src, Char *buf, uint32_t maxLength)
1294 inline static void ReadData(EcmaString * dst, EcmaString *src, uint32_t start, uint32_t destSize, uint32_t length);
1341 return EcmaString::ComputeHashcodeUtf8(utf8Data, utf8Len, canBeCompress);
1346 return EcmaString::ComputeHashcodeUtf16(utf16Data, length);
1351 const JSHandle<EcmaString> &receiver, const JSHandle<EcmaString> &search, int pos = 0)
1353 return EcmaString::IndexOf(vm, receiver, search, pos);
1358 const JSHandle<EcmaString> &receiver, const JSHandle<EcmaString> &search, int pos = 0)
1360 return EcmaString::LastIndexOf(vm, receiver, search, pos);
1364 static int32_t Compare(const EcmaVM *vm, const JSHandle<EcmaString>& left, const JSHandle<EcmaString>& right)
1366 return EcmaString::Compare(vm, left, right);
1371 static bool IsSubStringAt(const EcmaVM *vm, const JSHandle<EcmaString>& left,
1372 const JSHandle<EcmaString>& right, uint32_t offset = 0)
1374 return EcmaString::IsSubStringAt(vm, left, right, offset);
1378 static bool StringsAreEqual(const EcmaVM *vm, const JSHandle<EcmaString> &str1, const JSHandle<EcmaString> &str2)
1380 return EcmaString::StringsAreEqual(vm, str1, str2);
1385 static bool StringsAreEqual(EcmaString *str1, EcmaString *str2)
1387 return EcmaString::StringsAreEqual(str1, str2);
1392 static bool StringsAreEqualDiffUtfEncoding(EcmaString *str1, EcmaString *str2)
1394 return EcmaString::StringsAreEqualDiffUtfEncoding(str1, str2);
1399 static bool StringIsEqualUint8Data(const EcmaString *str1, const uint8_t *dataAddr, uint32_t dataLen,
1402 return EcmaString::StringIsEqualUint8Data(str1, dataAddr, dataLen, canBeCompress);
1407 static bool StringsAreEqualUtf16(const EcmaString *str1, const uint16_t *utf16Data, uint32_t utf16Len)
1409 return EcmaString::StringsAreEqualUtf16(str1, utf16Data, utf16Len);
1415 bool EqualToSplicedString(const EcmaString *str1, const EcmaString *str2)
1422 return EcmaString::CanBeCompressed(utf8Data, utf8Len);
1427 return EcmaString::CanBeCompressed(utf16Data, utf16Len);
1431 static bool CanBeCompressed(const EcmaString *string)
1433 return EcmaString::CanBeCompressed(string);
1457 static EcmaString *ToLower(const EcmaVM *vm, const JSHandle<EcmaString> &src)
1459 return EcmaString::ToLower(vm, src);
1462 static EcmaString *TryToLower(const EcmaVM *vm, const JSHandle<EcmaString> &src)
1464 return EcmaString::TryToLower(vm, src);
1467 static EcmaString *TryToUpper(const EcmaVM *vm, const JSHandle<EcmaString> &src)
1469 return EcmaString::TryToUpper(vm, src);
1472 static EcmaString *ToUpper(const EcmaVM *vm, const JSHandle<EcmaString> &src)
1474 return EcmaString::ToUpper(vm, src);
1477 static EcmaString *ToLocaleLower(const EcmaVM *vm, const JSHandle<EcmaString> &src, const icu::Locale &locale)
1479 return EcmaString::ToLocaleLower(vm, src, locale);
1482 static EcmaString *ToLocaleUpper(const EcmaVM *vm, const JSHandle<EcmaString> &src, const icu::Locale &locale)
1484 return EcmaString::ToLocaleUpper(vm, src, locale);
1487 static EcmaString *Trim(const JSThread *thread,
1488 const JSHandle<EcmaString> &src, EcmaString::TrimMode mode = EcmaString::TrimMode::TRIM)
1490 return EcmaString::Trim(thread, src, mode);
1543 PUBLIC_API static EcmaString *Flatten(const EcmaVM *vm, const JSHandle<EcmaString> &string,
1546 return EcmaString::Flatten(vm, string, type);
1549 static FlatStringInfo FlattenAllString(const EcmaVM *vm, const JSHandle<EcmaString> &string,
1552 return EcmaString::FlattenAllString(vm, string, type);
1555 static EcmaString *SlowFlatten(const EcmaVM *vm, const JSHandle<EcmaString> &string,
1558 return EcmaString::SlowFlatten(vm, string, type);
1561 static EcmaString *FlattenNoGCForSnapshot(const EcmaVM *vm, EcmaString *string)
1563 return EcmaString::FlattenNoGCForSnapshot(vm, string);
1566 static const uint8_t *GetUtf8DataFlat(const EcmaString *src, CVector<uint8_t> &buf)
1568 return EcmaString::GetUtf8DataFlat(src, buf);
1571 static const uint8_t *GetNonTreeUtf8Data(const EcmaString *src)
1573 return EcmaString::GetNonTreeUtf8Data(src);
1576 static const uint16_t *GetUtf16DataFlat(const EcmaString *src, CVector<uint16_t> &buf)
1578 return EcmaString::GetUtf16DataFlat(src, buf);
1581 static const uint16_t *GetNonTreeUtf16Data(const EcmaString *src)
1583 return EcmaString::GetNonTreeUtf16Data(src);
1589 EcmaString *string_ {nullptr};